java系统找不到指定文件怎么解决
329
2022-09-22
Windows程序设计-窗口和消息
完整代码注释
#include
播放WAV
VS2015引入WINMM.LIB,用来播放WAV:工程,右键属性,链接器,输入,附加依赖项
调用的Windows函数
LoadIcon 加载图标供程序使用。 LoadCursor 加载鼠标光标供程序使用。 GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。 RegisterClass 为程序窗口注册窗口类别。 MessageBox 显示消息框。 CreateWindow 根据窗口类别建立一个窗口。 ShowWindow 在屏幕上显示窗口。 UpdateWindow 指示窗口自我更新。 GetMessage 从消息队列中取得消息。 TranslateMessage 转译某些键盘消息。 DispatchMessage 将消息发送给窗口消息处理程序。 PlaySound 播放一个声音文件。 BeginPaint 开始绘制窗口。 GetClientRect 取得窗口显示区域的大小。 DrawText 显示字符串。 EndPaint 结束绘制窗口。 PostQuitMessage 在消息队列中插入一个「退出程序」消息。 DefWindowProc 执行内定的消息处理。
大写字母标识
前缀 | 类别 | 英文 |
CS | 窗口类别样式 | class style |
CW | 建立窗口 | create window |
DT | 绘制文字 | draw text |
IDI | 图示ID | ID icon |
IDC | 游标ID | ID cursor |
MB | 消息框 | message border |
SND | 声音 | sound |
WM | 窗口消息 | window message |
WS | 窗口样式 | window style |
四种数据结构
结构 | 含义 |
MSG | 消息结构 |
WNDCLASS | 窗口类别结构 |
PAINTSTRUCT | 绘图结构 |
RECT | 矩形结构 |
/* * 消息数据结构 */typedef struct tagMSG { HWND hwnd; // 接收消息的窗口句柄 UINT message; // 消息标识符 WPARAM wParam; // 32位的消息参数(message parameter) LPARAM lParam; // 32位的消息参数 DWORD time; // 放入消息队列中的时间 POINT pt; // 消息放入消息队列时的鼠标坐标#ifdef _MAC DWORD lPrivate;#endif} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
WM_QUIT消息将导致GetMessage传回0
大写标识符
句柄是一个(通常为32位的)整数,它代表一个对象。
标识符 | 含义 |
HINSTANCE | 执行实体(程序自身)句柄 |
HWND | 窗口句柄 |
HDC | 设备内容句柄 |
HICON | 图标句柄 handle to an icon |
HCURSOR | 鼠标光标句柄 |
HBRUSH | 画刷句柄 |
匈牙利表示法
前缀 | 数据型态 |
c | char或WCHAR或TCHAR |
by | BYTE (无正负号字符) |
n | short |
i | int |
x, y | int分别用作x坐标和y坐标 |
cx, cy | int分别用作x长度和y长度;C代表「计数器」 |
b或f | BOOL (int);f代表「旗标」 |
w | WORD (无正负号短整数) |
l | LONG (长整数) |
dw | DWORD (无正负号长整数) |
fn | function(函数) |
s | string(字符串) |
sz | 以字节值0结尾的字符串 |
h | 句柄 |
p | 指标 |
消息中心
假设使用者执行HELLOWIN,并且使用者最终单击了 Close按钮,或者假设用键盘或鼠标从系统菜单中选择了 Close, DefWindowProc处理这一键盘或者鼠标输入,在检测到使用者选择了Close选项之后,它给窗口消息处理程序发送一条WM_SYSCOMMAND消息。WndProc将这个消息传给DefWindowProc。DefWindowProc给窗口消息处理程序发送一条WM_CLOSE消 息 来 响 应 之 。 WndProc 再 次 将 它 传 给 DefWindowProc 。 DestroyWindow 呼 叫DestroyWindow来响应这条WM_CLOSE消息。DestroyWindow导致Windows给窗口消息处理程序发送一条WM_DESTROY消息。WndProc再呼叫PostQuitMessage,将一条WM_QUIT消息放入消息队列中,以此来响应此消息。这个消息导致WinMain中的消息循环终止,然后程序结束。
消息能够被分为「队列化的」和「非队列化的」。队列化的消息是由Windows放入程序消息队列中的。在程序的消息循环中,重新传回并分配给窗口消息处理程序。非队列化的消息在Windows呼叫窗口时直接送给窗口消息处理程序。也就是说,队列化的消息被「发送」给消息队列,而非队列化的消息则「发送」给窗口消息处理程序。任何情况下,窗口消息处理程序都将获得窗口所有的消息–包括队列化的和非队列化的。
窗口消息处理程序是窗口的”消息中心”。
队列化消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息WM_QUIT)。
非队列化消息则是其它消息。在许多情况下,非队列化消息来自呼叫特定的Windows函数。 例如,当WinMain呼叫CreateWindow时,Windows将建立窗口并在处理中给窗口消息处理程序发送一个WM_CREATE消息。当WinMain呼叫ShowWindow时,Windows将给窗口 消 息 处 理 程 序 发 送 WM_SIZE 和 WM_SHOWWINDOW 消 息 。 当 WinMain 呼 叫UpdateWindow时,Windows将给窗口消息处理程序发送WM_PAINT消息。键盘或鼠标输入时发出的队列化消息信号,也能在非队列化消息中出现。例如,用键盘或鼠标选择了一个菜单项时,键盘或鼠标消息就是队列化的,而说明菜单项已选中的WM_COMMAND消息则可能就是非队列化的。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~