当前位置:首页 > 芯闻号 > 充电吧
[导读]  1 #include2 #include3 #include "resource.h"   4    5 #define MAX_LOADSTRING 100   6 TCHAR szTitle[

  1 #include2 #include3 #include "resource.h"
  4 
  5 #define MAX_LOADSTRING 100
  6 TCHAR szTitle[MAX_LOADSTRING] = _T("标题栏");     // 标题栏文本
  7 TCHAR szWindowClass[MAX_LOADSTRING] = _T("MyClass");   // 主窗口类名
  8 
  9 
 10 ATOM ToRegisterClass(HINSTANCE hInstance, int nShowCmd);//注册窗口类
 11 HWND ToCreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x, int y, int nWidth,int nHeight, HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam);//创建窗口
 12 BOOL ToShowWindow(HWND hWnd, int nCmdShow);//显示窗口
 13 BOOL ToUpdateWindow(HWND hWnd);//更新窗口
 14 WPARAM ToRecycleMessage(MSG msg);//消息循环
 15 LRESULT CALLBACK ToWndProc(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam);//窗口过程
 16 
 17  //——————————————————————————进入WinMain函数————————————————————————————
 18 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
 19 {
 20  //————————————————————————————第一步:设计并注册窗口类————————————————————————————
 21  ToRegisterClass(hInstance, nShowCmd);//当前实例句柄,窗口显示方式
 22 
 23  //————————————————————————————第二步:创建窗口————————————————————————————
 24  HWND hWnd = ToCreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 25  
 26  //————————————————————————————第三步:显示窗口————————————————————————————
 27  ToShowWindow(hWnd, nShowCmd);
 28 
 29  //————————————————————————————第四步:更新窗口————————————————————————————
 30  ToUpdateWindow(hWnd);
 31 
 32  //————————————————————————————第五步:消息循环————————————————————————————
 33  MSG msg;
 34  return ToRecycleMessage(&msg);//MSG结构的wParam成员的值是传递给PostQuitMessage函数参数,通常是0。
 35 }
 36 
 37 ATOM ToRegisterClass(HINSTANCE hInstance, int nShowCmd)
 38 {
 39  WNDCLASS lpWndClass;
 40  lpWndClass.cbClsExtra = 0;//窗口类无扩展
 41  lpWndClass.cbWndExtra = 0;//窗口实例无扩展
 42  lpWndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//背景
 43  lpWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);//鼠标
 44  lpWndClass.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDB_PNG1));//图标
 45  lpWndClass.hInstance = hInstance;
 46  lpWndClass.lpfnWndProc = ToWndProc;//窗口函数
 47  lpWndClass.lpszClassName = szWindowClass;//窗口类名
 48  lpWndClass.lpszMenuName = NULL;//菜单名
 49  lpWndClass.style = CS_HREDRAW | CS_VREDRAW;//风格
 50  return RegisterClass(&lpWndClass);
 51 }
 52 
 53 HWND ToCreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x, int y, int nWidth,int nHeight, HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam)
 54 {
 55  return CreateWindow(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
 56 }
 57 
 58 BOOL ToShowWindow(HWND hWnd, int nCmdShow)
 59 {
 60  return ShowWindow(hWnd, nCmdShow);
 61 }
 62 
 63 BOOL ToUpdateWindow(HWND hWnd)
 64 {
 65  return UpdateWindow(hWnd);//   调用UpdateWindow函数会通过发送给窗口消息处理函数WndProc一个WM_PAINT消息,通过这个消息完成重绘显示区域的工作。
 66 }
 67 
 68 WPARAM ToRecycleMessage(MSG *msg)
 69 {
 70  int nRet;
 71  while(nRet = GetMessage(msg, NULL, 0, 0) != 0)//收到WM_QUIT消息则跳出消息循环
 72  {
 73   if (nRet == -1)
 74   {
 75    return;
 76   }
 77   TranslateMessage(msg);//翻译消息
 78   DispatchMessage(msg);//分发消息
 79  }
 80  return msg->wParam;
 81 }
 82 
 83 //窗口过程函数:处理窗口消息
 84 LRESULT CALLBACK ToWndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
 85 {
 86  DWORD dwNum = 0;
 87  wchar_t * pwSrc;
 88  RECT rect;
 89  PAINTSTRUCT ps;//创建绘制对象结构
 90  HDC hdc = NULL;//创建设备描述句柄对象
 91  static HWND hwndButton[3] = {NULL,NULL,NULL};
 92  switch(uMsg)
 93  {
 94  case WM_COMMAND://处理按钮等发出的消息
 95   break;
 96  case WM_CHAR://处理键盘发出的消息
 97   break;
 98  case WM_CLOSE://关闭窗口消息
 99   if (IDYES == MessageBox(hWnd, _T("结束?"), _T("提示"), MB_YESNO))
100   {
101    DestroyWindow(hWnd);
102   }
103   break;
104  case WM_DESTROY://处理WM_DESTROY消息必须调用PostQuitMessage函数,该函数向消息队列中发送WM_QUIT消息,让程序退出消息循环。
105   PostQuitMessage(0);
106   break;
107  default:
108   return DefWindowProc(hWnd, uMsg, wParam, lParam);//默认的窗口处理函数
109   break;
110  }
111  return 0;
112 }
113 
114

 

 1 HWND CreateWindow(      
 2 
 3     LPCTSTR lpClassName,//注册的窗口类型名称。
 4     LPCTSTR lpWindowName,//窗口名称
 5     DWORD dwStyle,//窗口类型
 6     int x,//窗口左上角位置
 7     int y,//窗口左上角位置
 8     int nWidth,//窗口的宽度
 9     int nHeight,//窗口的高度
10     HWND hWndParent,//父窗口
11     HMENU hMenu,//窗口菜单
12     HINSTANCE hInstance,//应用程序实例句柄
13     LPVOID lpParam//传送给窗口的自定义参数
14 );

 

 1 BOOL GetMessage(         
 2     LPMSG lpMsg,//从线程消息队列里获取到的消息指针
 3     HWND hWnd,//想获取那个窗口的消息,当设置为NULL时是获取所有窗口的消息。
 4     UINT wMsgFilterMin,//获取消息的ID编号最小值,如果小于这个值就不获取回来。
 5 
 6     UINT wMsgFilterMax//获取消息的ID编号最大值,如果大于这个值就不获取回来。
 7 );
 8 
 9 //一般情况下最后两个参数都设置为0,表示所有消息
10 
11      函数返回值可能是0,大于0,或者等于-1。如果成功获取一条非WM_QUIT消息时,就返回大于0的值;如果获取WM_QUIT消息时,就返回值0值。如果出错就返回-1的值。

 

nCmd:窗口显示方式,参数如下:

 1 SW_FORCEMINIMIZE  是强制窗口最小化,主要使用在非窗口主线程的其它线程来操作。
 2 SW_HIDE  是显示窗口为隐藏状态。
 3 SW_MAXIMIZE  是显示窗口为最大化。
 4 SW_MINIMIZE  是显示窗口为最小化。
 5 SW_RESTORE  是从任务里恢复窗口显示。
 6 SW_SHOW  是激活窗口为当前窗口,并且显示为当前的大小和位置。
 7 SW_SHOWDEFAULT  是创建进程时显示窗口的值。
 8 SW_SHOWMAXIMIZED  是激活窗口为当前窗口,并且显示最大化。
 9 SW_SHOWMINIMIZED  是激活窗口为当前窗口,并且显示最小化。
10 SW_SHOWMINNOACTIVE  是显示窗口为最小化,但不激活它作为当前窗口。
11 SW_SHOWNA  是显示为当前的大小和位置,但不激活它作为当前窗口。
12 SW_SHOWNOACTIVATE  是显示当前窗口,但不激活它作为当前窗口。
13 SW_SHOWNORMAL  是显示当前窗口,但窗口是最小化或最大化时会恢复窗口为原来的大小和位置。

 

 

TranslateMessage:

   用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。
  TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生WM_KEYDOWN和WM_KEYUP消息。这两个消息的附加参数(wParam和lParam)包含的是虚拟键代码和扫描码等信息,而我们在程序中往往需要得到某个字符的ASCII码,TranslateMessage这个函数就可以将WM_KEYDOWN和WM_ KEYUP消息的组合转换为一条WM_CHAR消息(该消息的wParam附加参数包含了字符的ASCII码),并将转换后的新消息投递到调用线程的消息队列中。注意,TranslateMessage函数并不会修改原有的消息,它只是产生新的消息并投递到消息队列中。
  也就是说TranslateMessage会发现消息里是否有字符键的消息,如果有字符键的消息,就会产生WM_CHAR消息,如果没有就会产生什么消息。

 

 

PostQuitMessage:

  nExitCode是退出标识码,它被放到WM_QUIT消息的参数wParam里。

  VOID  PostQuitMessage(int nExitCode);

  当点击窗口右上角的关闭时,Windows就会把窗口从系统里删除,这时就会发出消息WM_DESTROY给窗口消息处理函数WindowProc,WindowProc收到这条消息后,最需要做的一件事情就是调用PostQuitMessage发出退出消息,让消息循环结束。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭