vc++深入详解 1

创建一个Win32应用程序步骤:

1、编写WinMain函数。(可以在MSDN上查找并复制)

2、创建(一个)窗口(步骤如下):

a、设计(一个)窗口(WNDCLASS)

b、注册(该)窗口

c、创建窗口

d、显示并更新窗口。

3、编写消息循环。


4、编写窗口过程函数(窗口过程的函数的语法,可通过MSDN查看WNDCLASS的lpfnWndProc成员变量,在这个成员的解释中可查到)





分解:


窗口与句柄

在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的。句柄是Windows程序中一个重要的概念(图标句柄(HICON)、光标句柄(HCURSOR)、画刷句柄(HBRUSH)  )。


1、WinMain函数的原型声明:

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)


2、窗口的创建

a、窗口类函数的声明:

typedef struct _WNDCLASS { 
    UINT    style; 
    WNDPROC lpfnWndProc; 
    int     cbClsExtra; 
    int     cbWndExtra; 
    HANDLE  hInstance; 
    HICON   hIcon; 
    HCURSOR hCursor; 
    HBRUSH  hbrBackground; 
    LPCTSTR lpszMenuName; 
    LPCTSTR lpszClassName; 
} WNDCLASS; 

回调函数的实现机制:(下次在写)


b、注册窗口类

注册函数原型说明:

ATOM RegisterClass (CONST WNDCLASS  *lpWndClass);

c、创建窗口

函数原型说明:

HWND CreateWindow(
  LPCTSTR lpClassName,  // pointer to registered class name
  LPCTSTR lpWindowName, // pointer to window name
  DWORD dwStyle,        // window style
  int x,                // horizontal position of window
  int y,                // vertical position of window
  int nWidth,           // window width
  int nHeight,          // window height
  HWND hWndParent,      // handle to parent or owner window
  HMENU hMenu,          // handle to menu or child-window identifier
  HANDLE hInstance,     // handle to application instance
  LPVOID lpParam        // pointer to window-creation data
);

d、显示及更新窗口

(1)、显示窗口

函数原型声明:

BOOL ShowWindow(
  HWND hWnd,     // handle to window
  int nCmdShow   // show state of window
);
(2)、更新窗口
BOOL UpdateWindow(
  HWND hWnd   // handle of window
);

3、消息循环:

在创建窗口、显示窗口、更新窗口后,我们需要编写一个消息循环,不断的从消息队列中取出消息。

GetMessage()函数原型声明:

BOOL GetMessage(
  LPMSG lpMsg,         // address of structure with message
  HWND hWnd,           // handle of window
  UINT wMsgFilterMin,  // first message
  UINT wMsgFilterMax   // last message
);
 


通常我们编写的消息循环代码如下:

MSG msg;
while ( GetMessage(&msg, NULL, 0, 0) )
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
提示:消息队列中过去消息还可以调用PeekMessage函数。(查阅MSDN)


4、编写窗口过程函数

窗口过程函数的声明形式:(用于处理发送给窗口的消息;一个Windows应用程序的主要代码部分就集中在窗口过程能够函数中)

LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
提示:系统通过窗口过程函数的地址(指针)来调用窗口过程函数,而不是名字。

函数填充:

LRESULT CALLBACK WindowAzeProc(     //WindowAzeProc 可以自己命名,但是要和前面声明的一样
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
    switch(uMsg)
    {
        case WM_CHAR:
             ...
             break;
        case WM_LBUTTONDOWN:
             ...
             break;
        case WM_PAINT:
             ...
             break;
        case WM_CLOSE:
             if(IDYES == MessageBox(hwnd, "是否真的结束?", "message",MB_YESNO))
             {
                DestroyWindow(hwnd);
             }
             break;
        case WM_DESTROY:
             postQuitMessage(0);
             break;
        default:
            return DefWindlowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}




问:“Win32 Application” 和 “Win32 Console Application” 的区别:

答:Win32 Application 是基于WINDOWS平台的32位开发环境开发应用程序,SDK程序;

      Win32 Console Application 是基于DOS开发平台开发应用程序,不能使用与图形有关的函数,是控制台程序。















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值