zoukankan      html  css  js  c++  java
  • 用windowsapi来建立一个窗口

    #include <iostream> 
    #include <Windows.h> 
      
    HINSTANCE g_hInstace = 0; 
    LRESULT CALLBACK WindowProc(HWND hWnd, 
                                UINT nMsg, 
                                WPARAM wParam, 
                                LPARAM lParam) 
    { 
        switch(nMsg) 
        { 
            case WM_QUIT: 
                PostQuitMessage(0); 
                break; 
        } 
        return DefWindowProc(hWnd,nMsg,wParam,lParam); 
    } 
      
    BOOL RegisterWnd(LPCWSTR lpszClassName,WNDPROC WndProc) 
    { 
        WNDCLASSEX wcx={0}; 
        wcx.cbSize=sizeof(WNDCLASSEX); 
        wcx.cbClsExtra=0;//int cbClsExtra 给类而外预留的空间默认设为0 当你需要的时候自然会明白它的用处。  
        wcx.cbWndExtra=0;//int cbWndExtra 同上  
        wcx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); 
        wcx.hCursor=NULL;//HCURSOR hCursor  该窗口光标形式的句柄 
        wcx.hIcon=NULL;//HICON hIcon  该窗口的图标的句柄 
        wcx.hIconSm=NULL;//HICON hIconSm这个图标显示的是窗口在任务栏处显示的图标。 
        wcx.hInstance=g_hInstace;//HINSTANCE hInstance    该窗口的句柄 
      
        //WNDPROC lpfnWndProc 这个应该是该结构中最重要的一个成员,类型WNDPROC的实质是一个指向函数的长整类型的指针。   
        //也就是说我们定义一个窗口,当鼠标在该窗口上操作,或键盘按键时,该窗口收到了这个消息。此时他的lpfnWndProc指向一个回调函数, 
        //(回调函数见下方讲解)该窗口将参数送到回调函数,由回调函数执行动作,之后则可以对动作作出相应。 
        wcx.lpfnWndProc=WndProc; 
      
        wcx.lpszClassName=lpszClassName;//LPCTSTR lpszClassName该类的名字。即给该类起一个名字。 
        wcx.lpszMenuName=NULL; 
        wcx.style=CS_HREDRAW | CS_VREDRAW;//定义窗口的风格,style 虽然是一个无符号整数,但是他的取值,是系统定义好的一组宏变量 
        ATOM nAtom=RegisterClassEx(&wcx);//该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 
        if(0 == nAtom) 
            return FALSE; 
        return TRUE; 
      
    } 
      
    HWND CreateWnd(LPCWSTR lpszClassName,LPCWSTR lpszWindowsName) 
    { 
        HWND hWnd=CreateWindowEx(WS_EX_CLIENTEDGE, 
                                 lpszClassName, 
                                 lpszWindowsName, 
                                 WS_OVERLAPPEDWINDOW, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT, 
                                 CW_USEDEFAULT,  
                                 NULL, 
                                 NULL, 
                                 g_hInstace, 
                                 NULL); 
        return hWnd; 
    } 
      
    void DisplayWnd(HWND hWnd) 
    { 
        ShowWindow(hWnd,SW_NORMAL); 
        UpdateWindow(hWnd); 
    } 
      
    void Message() 
    { 
        MSG nMsg={0}; 
        while(GetMessage(&nMsg,NULL,0,0)) 
        { 
            TranslateMessage(&nMsg); 
            DispatchMessage(&nMsg); 
        } 
    } 
    int WINAPI WinMain(HINSTANCE hInstance, 
                         HINSTANCE hPrevInstance, 
                         LPSTR     lpCmdLine, 
                         int       nCmdShow) 
    { 
         // TODO: Place code here. 
        if(!RegisterWnd(TEXT("WinMain"),WindowProc)) 
        { 
            MessageBox(NULL,TEXT("创建窗口失败"),TEXT("Warning"),MB_YESNOCANCEL); 
            return 0; 
        } 
      
        HWND hWnd = CreateWnd(TEXT("WinMain"),TEXT("主窗口")); 
        DisplayWnd(hWnd); 
        Message(); 
      
        return 0; 
    } 
      
      
    int main() 
    { 
        //HINSTANCE hInstance=HINSTANCE(100); 
        //WinMain(hInstance,hInstance,NULL,1); 
        WinMain(g_hInstace,g_hInstace,NULL,1); 
        //WinMain(NULL,NULL,NULL,0); 
        return 0; 
    }; 
  • 相关阅读:
    pycharm中Terminal中运行用例
    python pandas模块简单使用(读取excel为例)
    pytest框架,使用print在控制台输入
    CentOS7配置python3教程
    linux 添加与修改用户归属组
    python 连接oracle基础环境配置方法
    robot framework 接口post请求需要加headers
    unittest中的parameterized参数化
    json格式
    Django_URL
  • 原文地址:https://www.cnblogs.com/hongjiumu/p/3525500.html
Copyright © 2011-2022 走看看