博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
win32下创建窗口
阅读量:6333 次
发布时间:2019-06-22

本文共 3877 字,大约阅读时间需要 12 分钟。

win32下创建窗口

一、创建所使用函数解析

1.1 入口函数WinMain

   1.2 窗口处理函数
     当窗口处理消息事件时,系统调用该函数
      LRESULT CALLBACK WindowProc(
   HWND hwnd,      // 窗口的句柄
   UINT uMsg,      // 消息的ID号
   WPARAM wParam,  // 消息所对应的参数
   LPARAM lParam   // 消息所对应的参数
  );
   1.3 注册窗口类型
      typedef struct _WNDCLASS {
    UINT    style;  //窗口类的风格:不是窗口类型的风格
    WNDPROC lpfnWndProc; //窗口处理函数
    int     cbClsExtra; //窗口类附加数据大小
    int     cbWndExtra; //窗口附加数据大小
    HANDLE  hInstance; //当前应用程序的实例句柄
    HICON   hIcon; //窗口图标
    HCURSOR hCursor; //窗口的鼠标
    HBRUSH  hbrBackground; //窗口的背景画刷
    LPCTSTR lpszMenuName; //菜单
    LPCTSTR lpszClassName; //类型名称:不是窗口标题的名称,只是注册的名称
    } WNDCLASS;
   
    注册函数 RegisterClass
   1.4 创建窗口
       HWND CreateWindow(
    LPCTSTR lpClassName,  //窗口类型名称
    LPCTSTR lpWindowName, //窗口名称
    DWORD dwStyle,        //窗口类型
    int x,                //窗口的左上角X坐边
    int y,                //窗口的左上角X坐边
    int nWidth,           //窗口的宽度
    int nHeight,          //窗口的高度
    HWND hWndParent,      //父窗口句柄
    HMENU hMenu,          //窗口菜单句柄
     HANDLE hInstance,     //应用程序的实例句柄
     LPVOID lpParam        //创建的参数,一般为NULL
    );

   1.5 显示窗口

     ShowWindow 显示窗口
          BOOL ShowWindow(
     HWND hWnd,     //显示的窗口句柄
      int nCmdShow   //显示的方式
     );
     UpdateWindow 刷新窗口
   1.6 消息处理
     GetMessage 获取消息
     DispatchMessage 派发消息
   
   1.7 程序退出
     窗口销毁时,退出程序。在WndProc中实现。
        WM_DESTROY: 当窗口销毁时,会调用WndProc
          传递给使用者。
        PostQuitMessage:发送一个退出消息。

二、代码示例

 

1 #include 
2 3 HINSTANCE g_hInst = NULL; 4 5 //2 窗口处理函数 6 LRESULT CALLBACK WndProc( HWND hWnd, 7 UINT nMsg, 8 WPARAM wParam, 9 LPARAM lParam ) 10 { 11 //判断消息ID 12 switch( nMsg ) 13 { 14 case WM_DESTROY: //窗口销毁的消息 15 PostQuitMessage( 0 ); //发送退出消息 16 return 0; 17 } 18 //调用缺省的消息处理程序 19 return DefWindowProc( hWnd, nMsg, 20 wParam, lParam ); 21 } 22 23 //3 注册窗口类型 24 BOOL MyRegister( LPSTR pszClassName ) 25 { 26 WNDCLASS wc = {
0}; 27 ATOM nAtom = 0; 28 //构造注册窗口的参数 29 wc.style = CS_VREDRAW|CS_HREDRAW; 30 wc.lpfnWndProc = WndProc; 31 wc.cbClsExtra = 0; 32 wc.cbWndExtra = 0; 33 wc.hInstance = g_hInst; 34 wc.hIcon = NULL; 35 wc.hCursor = NULL; 36 wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE); 37 wc.lpszMenuName = NULL; 38 wc.lpszClassName = pszClassName; 39 //注册窗口 40 nAtom = RegisterClass( &wc ); 41 if( 0 == nAtom ) 42 { 43 MessageBox( NULL, "Register Failed", 44 "Error", MB_OK|MB_ICONWARNING ); 45 return FALSE; 46 } 47 else 48 { 49 MessageBox( NULL, "Register Successed", 50 "Successed", MB_OK ); 51 } 52 return TRUE; 53 } 54 55 //4 窗口创建 56 HWND MyCreate( LPSTR pszClassName ) 57 { 58 HWND hWnd = NULL; 59 //创建窗口 60 hWnd = CreateWindow( pszClassName, 61 "HelloWnd", WS_OVERLAPPEDWINDOW, 62 100, 100, 300, 500, NULL, NULL, 63 g_hInst, NULL ); 64 if( NULL == hWnd ) 65 { 66 MessageBox( NULL, "CreateWnd Failed", 67 "Error", MB_OK ); 68 return NULL; 69 } 70 MessageBox( NULL, "CreateWnd Successed", 71 "Successed", MB_OK ); 72 return hWnd; 73 } 74 75 //5 显示窗口 76 void DisplayWnd( HWND hWnd ) 77 { 78 //显示 79 ShowWindow( hWnd, SW_SHOW ); 80 //刷新 81 UpdateWindow( hWnd ); 82 } 83 //6 消息处理 84 void Message( ) 85 { 86 MSG msg = { 0 }; 87 //消息循环处理,获取消息 88 while( GetMessage( &msg, NULL, 0, 0 ) ) 89 { 90 //派发消息 91 DispatchMessage( &msg ); 92 } 93 } 94 //1 入口函数 95 int WINAPI WinMain( HINSTANCE hInst, 96 HINSTANCE hPrevInst, 97 LPSTR pszCmdLine, 98 int nShowCmd ) 99 {100 HWND hWnd = NULL;101 g_hInst = hInst;102 //注册窗口类型103 MyRegister( "MyWnd" );104 //创建注册类型的窗口105 hWnd = MyCreate( "MyWnd" );106 //显示窗口107 DisplayWnd( hWnd );108 //消息处理109 Message( );110 return 0;111 }

 

 

 

转载于:https://www.cnblogs.com/macong/archive/2012/11/17/2774425.html

你可能感兴趣的文章
MD5加密解密
查看>>
.Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
查看>>
SVN被锁定的几种解决方法
查看>>
js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
查看>>
ios ios7 取消控制拉升
查看>>
182在屏幕中实现网格化视图效果
查看>>
本文摘录 - FlumeJava
查看>>
Scala学习(三)----数组相关操作
查看>>
Matlab基于学习------------------函数微分学
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
64. Minimum Path Sum
查看>>
Windows Live Writer 使用指南
查看>>
分析iOS Crash文件,使用命令符号化iOS Crash文件
查看>>
R学习笔记 第五篇:字符串操作
查看>>
在Mac OS下配置PHP开发环境
查看>>
(转)介绍下Nuget在传统Asp.net项目中的使用
查看>>
C# ArcEngine 实现点击要素高亮并弹出其属性
查看>>
初识GO语言——安装Go语言
查看>>