Windows编程___创建窗口

  创建Windows窗口不难,可以简要的概括为:

   1,# 注册一个窗口类

      填充WNDCLASS结构

      书写窗口消息处理函数WinProc

   2,# 创建一个窗口

      填写基本的窗口信息

   3,# 显示窗口

   4,# 循环处理窗口信息

   相关函数:

注册窗口类(重点是填充WNDCLASS结构)

ATOM RegisterClass (CONST WNDCLASS *lpWndClass)

    WNDCLASS结构

// 也不很清楚,就值知道几个重要的,其他的照葫芦画瓢写的.
Wnd.cbClsExtra = NULL;
Wnd.cbWndExtra  = NULL;
Wnd.hbrBackground = (HBRUSH)COLOR_WINDOW;
Wnd.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_ARROW));
Wnd.hIcon = NULL;
Wnd.hInstance = hInstance;
Wnd.lpszClassName = sz_ClassName;  //类名
Wnd.lpszMenuName = NULL;  //菜单
Wnd.style = CS_HREDRAW | CS_VREDRAW; //类的类型 CS_type
Wnd.lpfnWndProc = WndProc; //窗口处理函数

创建窗口

HWND CreateWindow(          LPCTSTR lpClassName,  //基于那个类的窗口
    LPCTSTR lpWindowName, //窗口标题
    DWORD dwStyle,  //窗口风格 WS_***
    int x,  //左上角
    int y,  //右上角
    int nWidth,  //
    int nHeight,  //
    HWND hWndParent,  //父窗口句柄
    HMENU hMenu,  //菜单句柄,注意,如果是"BOTTON"类的窗口,那么此参数为按钮ID,与处理消息有关
    HINSTANCE hInstance,  //窗口实例,我不是很清楚干嘛的,不过WinMain函数参数,就有一个hInstance
    LPVOID lpParam //不是很清楚,貌似是窗口创造前要发送的消息(发送窗口处理函数)WM_CREATE 消息
);
//窗口创造就会给处理函数发送一个WM_CREATE消息
//如果我们不需要处理的消息可以交个DefWindowProc()函数处理,并返回.

窗口处理函数(需要自己写 然后交给windows取调用的. 在RgisterClass中传递给Windows)

//记得消息处理函数要有 CALLBACK 声明
LRESULT    CALLBACK WndProc(HWND hWnd,
                UINT uMsg,
                WPARAM wParam,
                LPARAM lParam)
{
        //uMsg可以初步判断消息
        //有的消息我们直接通过uMsg就可以直接获取,但是有些还需要结合wParam,lParam
    switch(uMsg){
    case WM_CREATE:
        //窗口创造前执行.
        break;
    case WM_LBUTTONDOWN:
        //  鼠标左键被点下
        break;
    case WM_PAINT:
        hDc = BeginPaint(hWnd,&paint);
        //绘画消息触发
        EndPaint(hWnd,&paint);
        break;
    case WM_CLOSE: //标题框的关闭按钮被按下
        PostQuitMessage(WM_QUIT);
        break;
    case WM_COMMAND:
        if(LOWORD(wParam) == BOTTON_ID && HIWORD(wParam) == BN_CLICKED){
            //按钮被按下 
            //LOWORD(wParam)  低位 HIWORD(wParam) 高位
        }
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam); //我们不需要处理的消息都默认让系统帮我们处理
    }
    return 0;
}       

显示窗口

ShowWindow(hWND,nCmdShow); //hWND是CreateWindow返回的窗口句柄,nCmdShow是显示窗口的方式(可以直接用WinMain函数的最后一个参数nCmdShow)
UpdateWindow(hWND); //=一个WM_PAINT消息来刷新窗口

消息循环

//处理窗口消息
while(GetMessage(&Msg,NULL,0,0)){
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
}
// emmmm...直接Copy VS项目的代码的,还把一些删了,但是,貌似也没错.
原文地址:https://www.cnblogs.com/cgjh/p/8099901.html