我是靠谱客的博主 香蕉红酒,这篇文章主要介绍VC++创建一个Windows窗口程序,现在分享给大家,希望可以做个参考。

本文为《VC++深入详解》第一章的笔记

创建一个完整的Windows窗口程序主要步骤为

  1. WinMain函数的定义
  2. 创建一个窗口
  3. 编写消息循环
  4. 编写窗口过程函数

窗口的创建:


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

GetMessage(),Peekmessage()从消息队列中取出消息,并保存在消息结构体中。

TranslateMessage(LPMSG  lpMsg)将虚拟键消息转换为字符消息。它并不会修改原有的消息,只是产生新的消息并投递到消息队列中。

DispatchMessage(LPMSG  lpMsg)分派一个消息到窗口过程,由窗口过程函数对消息进行处理。实际上是将消息回传给操作系统,由操作系统调用窗口过程函数对消息进行处理(响应)。
WIndows的应用程序消息处理机制:

  1. 操作系统接收到应用程序的窗口消息,将消息投递到应用程序的消息队列中。
  2. 应用程序在消息循环中调用Getmessage函数从消息队列中取出一条一条的消息。取出消息后,应用程序可以对消息进行一些预处理,例如,放弃对某些消息的响应,或者调用TranslateMessage产生新的消息。
  3. 应用程序调用Dispatchmessage,将消息回传给操作系统。
  4. 系统利用WNDCLASS结构体的lpfnWndProc的成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。
编写窗口过程函数

剩下的工作就是编写一个窗口过程函数,用于出路发送给窗口的消息。


完整实例FirstWindowApp:
新建空白Win32项目,新建源文件FirstWindowApp.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//FirstWindowApp #include <windows.h> #include <stdio.h> //声明回调函数 LRESULT CALLBACK WinProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); //定义WinMian函数 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ) { //设计一个窗口类 WNDCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); wndcls.hIcon=NULL; //wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinProc; wndcls.lpszClassName="FirstWindowApp"; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); //创建窗口,并保存成功创建窗口后返回的句柄 HWND hwnd; hwnd=CreateWindow("FirstWindowApp","FirstWindowApp",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,600,400,NULL,NULL,hInstance,NULL); //显示及更新窗口 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); //定义消息结构体,开始消息循环 MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //定义窗口回调函数 LRESULT CALLBACK WinProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(uMsg) { case WM_CHAR: char szChar[20]; sprintf(szChar,"char code is %d",wParam); MessageBox(hwnd,szChar,"char",0); break; case WM_LBUTTONDOWN: MessageBox(hwnd,"mouse clicked","message",0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,"Hello Windows",strlen("Hello Windows")); //ReleaseDC(hwnd,hdc); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); TextOut(hDC,0,0,"FirstWindowApp",strlen("FirstWindowApp")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否真的退出?","message",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; }


最后

以上就是香蕉红酒最近收集整理的关于VC++创建一个Windows窗口程序的全部内容,更多相关VC++创建一个Windows窗口程序内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部