zoukankan      html  css  js  c++  java
  • windows应用程序框架及实例

    应用程序框架:
    同一类型应用程序的结构大致相同,并有很多相同的源代码,
    因此可以通过一个应用程序框架AFX(Application FrameWorks)
    编写同一类型应用程序的通用源代码。

    主要向导:
    Datebase Project:创建数据库项目

    MFC ActiveX Control Wizard:创建基于MFC的ActiveX控件

    MFC AppWizard[dll]:创建基于MFC的动态链接库

    MFC AppWizard[exe]:创建基于MFC的应用程序(最常用)

    New Database Wizard:在SQL服务器上创建一个SQL Server数据库

    Win32 Application:创建Win32应用程序,可不使用MFC,采用SDK方法编程

    Win32 Console Application:创建DOS下的Win32控制台应用程序,
    采用C++或C语言进行编程

    Win32 Dynamic-link Library:创建Win32动态链接库,采用SDK方法

    Win32 Static Library:创建Win32静态链接库,采用SDK方法


    引入应用程序向导的目的:为了避免程序员重复编写代码。

    区别于DOS程序,即使一个简单的Windows程序:
    它也必须显示一个程序运行窗口,需要编写复杂的程序代码。
    而同一类型应用程序的框架窗口风格是相同的,如相同的菜单栏、工具栏、
    状态栏和用户区。
    基本菜单命令的功能也是一样的,如相同的文件操作和编辑命令。

    编写一个实现具体功能的MFC应用程序的步骤:

    ★根据应用程序特性在MFC AppWizard[exe]应用程序向导各步骤对话框中进行选择,
    创建一个应用程序的框架。

    ★利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。

    ★利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。

    ★根据需要编写具体的函数代码。

    ★编译、链接程序。如果程序有语法错误,需要修改源程序。直到没有编译、链接错误,
    才能得到可执行程序。

    ★测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动Debug调试器
    进行调试,找出并修改程序设计中的逻辑错误。

    我们可以为Visual C++ MFC编程作一个形象的总结:

    ◇MFC应用程序框架使我们的程序设计工作犹如做填充题。

    ◇Developer Studio中的集成工具使我们的程序设计工作犹如做选择题,
    程序员犹如软件集成装配车间里的技术工人。

    Visual C++中通用的文件类型
    后缀 类型 说明
    dsw 工作区文件 将项目的详细情况组合到工作区中
    dsp 项目文件 存储项目的详细情况并替代mak文件
    h C++头文件 存储类的定义代码
    cpp C++源文件 存储类的成员函数的实现代码
    rc 资源脚本文件 存储菜单、工具栏和对话框等资源
    rc2 资源文件 用来将资源包含到项目中
    ico 图标文件 存储应用程序图标
    bmp 位图文件 存储位图
    clw 类向导文件 存储ClassWizard类向导使用的类信息

    MFC中资源标识符前缀
    标识符前缀 说明
    IDR_ 主菜单、工具栏、应用程序图
    标和快捷键表
    IDD_ 对话框
    IDC_ 控件和光标
    IDS_ 字符串
    IDP_ 提示信息对话框的字符串
    ID_ 菜单命令项
    应用程序举例:
    例1:创建应用程序框架。
    本例的目的在于说明创建Windows应用程序的方法及过程

     1 //包含应用程序所需的数据类型和数据结构的定义
     2 #include <windows.h>
     3 
     4 LRESULT    CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明
     5 
     6 //----------------------以下初始化窗口类-------------------------
     7 int WINAPI WinMain
     8 (
     9 HINSTANCE hInstance,
    10 HINSTANCE hPrevInst,
    11 LPSTR lpszCmdLine,
    12 int nCmdShow
    13 )
    14 {
    15 HWND hw
    16 nd;
    17 MSG Msg;
    18 WNDCLASS wndclass;
    19 char lpszClassName[] = "窗口";    //窗口类名
    20 char lpszTitle[] = "My_windows";    //窗口标题名
    21 
    22 //------------------窗口类的定义---------------------------
    23 wndclass.style=0;    //窗口类型为缺省类型
    24 wndclass.lpfnWndProc=WndProc;    //定义窗口处理函数
    25 wndclass.cbClsExtra=0;    //窗口类无扩展
    26 wndclass.cbWndExtra=0;    //窗口实例无扩展
    27 wndclass.hInstance=hInstance;    //当前实例句柄
    28 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    29 //窗口的最小化图标为缺省图标
    30 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;
    31 //窗口采用箭头光标
    32 wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
    33 //窗口背景为白色
    34 wndclass.lpszMenuName=NULL;    //窗口中无菜单
    35 wndclass.lpszClassName=lpszClassName ;    //窗口类名为"窗口"
    36 
    37 //------------------以下进行窗口类的注册------------
    38 if(!RegisterClass(&wndclass))//如果注册失败则发出警告
    39 {
    40 MessgaeBeep(0);
    41 return FALSE;
    42 }
    43 //--------------------创建窗口-------------------------
    44 hwnd = CreateWindow
    45 (
    46 lpszClassName,    //窗口类名
    47 lpszTitle,    //窗口实例的标题名
    48 WS_OVERLAPPEDWINDOW,    //窗口的风格
    49 CW_USEDEFAULT,
    50 CW_USEDEFAULT,    //窗口左上角坐标为缺省值
    51 CW_USEDEFAULT,
    52 CW_USEDEFAULT,    //窗口的高和宽为缺省值
    53 NULL,    //此窗口无父窗口
    54 NULL,    //此窗口无主菜单
    55 hInstance,    //创建此窗口的应用程序的当前句柄
    56 NULL //不使用该值
    57 
    58 );
    59 //------------------------显示窗口-----------------------
    60 ShowWindow(hwnd,nCmdShow);
    61 
    62 //------------------------绘制用户区---------------------
    63 UpdateWindow(hwnd);    
    64 //------------------------消息循环-----------------------
    65 while(GetMessage(&Msg,NULL,0,0))
    66 {
    67 TranslateMessage(&Msg);
    68 DispatchMessage(&Msg);
    69 }
    70 
    71 //消息循环结束即程序终止时将消息返回操作系统
    72 return Msg.wParam;
    73 }
    74 
    75 //---------------------------------窗口函数--------------------
    76 LRESULT CALLBACK WndProc
    77 (    HWND hwnd,
    78 UINT message,
    79 WPARAM wParam,
    80 LPARAM lParam
    81 )
    82 
    83 { 
    84 switch(message)
    85 { 
    86 case WM_DESTROY:
    87 PostQuitMessage(0);//调用PostQuitMessage发出VM_QUIT消息
    88 default:    //缺省时采用系统消息缺省处理函数
    89 return DefWindowProc(hwnd,message,wParam,lParam);
    90 }
    91 return(0);
    92 }
  • 相关阅读:
    php抽象类,接口,特性的比较
    服务器和客户端缓存控制
    git平时用到的仓库
    PHP版DES算法加密数据
    Linux连接Windows服务器以及文件传输方法
    php连接MySQL数据库的三种方式(mysql/mysqli/pdo)
    PHP实现网站访客来访显示访客IP&浏览器&操作系统
    ESXI的使用
    vue
    Laravel学习笔记
  • 原文地址:https://www.cnblogs.com/veis/p/6940045.html
Copyright © 2011-2022 走看看