1. 前言
Win32窗口的创建按照以下步骤:
- 定义窗口
- 注册窗口
- 创建窗口
- 显示窗口
- 更新窗口 (非必须???)
- 消息循环
- 窗口过程 WndProc
2. 相关函数
2.1 WinMain
Windows中GUI程序的入口函数是WinMain
int WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nShowCmd)
{
// hIns: 当前程序实例句柄
// hPreIns: 前一个程序的实例句柄,已经弃用
// lpCmdLine:
// nShowCmd:
}
2.2 WndProc
每个窗口都有一个过程函数。
LRESULT WndProc(HWND hWnd, UINT msg, WPARAM wPara, LPARAM lPara)
{
switch(msg)
{
case:
// .......
}
return DefWindowProc(hWnd, msg, wPara, lPara);
}
2.3 CreateWindowEx
函数功能是创建窗口。
HWND CreateWindowExA(
[in] DWORD dwExStyle,
[in, optional] LPCSTR lpClassName,
[in, optional] LPCSTR lpWindowName,
[in] DWORD dwStyle,
[in] int X,
[in] int Y,
[in] int nWidth,
[in] int nHeight,
[in, optional] HWND hWndParent,
[in, optional] HMENU hMenu,
[in, optional] HINSTANCE hInstance,
[in, optional] LPVOID lpParam
);
dwExStyle: 窗口的扩展样式.这里演示几个样式.
WS_EX_ACCEPTFILES: 创建可以接收文件。当拖放文件到窗口上时,系统会向该窗口发送WM_DROPFILES消息。
WS_EX_TOPMOST: 这个属性只用在顶层窗口上,对于子窗口这个属性被自动忽略, 设置了这个属性的窗口会一直在其他窗口上面。
3. 一些概念
3.1 顶层窗口
指的是没有父窗口或者父窗口为桌面的窗口,顶层窗口不会拥有WS_CHILD属性.
3.2 客户区与非客户区
非客户区包括以下部分:
- 标题栏: 顶部的横条, 显示的窗口图标, 标题
- 边框
- 垂直和水平滚动条
- 菜单栏,在标题栏的下方
- 系统菜单,WM_SYSMENU
4. 菜单的使用
4.1 介绍
Windows中有三种菜单, 分别时系统菜单, 顶层菜单, 弹出菜单(右键菜单), 如下图所示:
