WinMain
WinMain函数被系统调用为基于Windows的应用程序的初始入口点。
int WINAPI WinMain(
HINSTANCE hInstance, // 当前实例句柄
HINSTANCE hPrevInstance, // 先前的实例句柄
LPSTR lpCmdLine, // 命令行
int nCmdShow // 显示状态
);
参数
hInstance
[in] 当前的应用程序实例句柄。
hPrevInstance
[in] 前一个应用程序实例句柄。 该参数始终为NULL。
如果您需要检测另一个实例是否已经存在,请使用CreateMutex函数创建一个唯一命名的互斥锁。 即使互斥量已经存在,CreateMutex也会成功,但GetLastError函数将返回ERROR_ALREADY_EXISTS。 这表明应用程序的另一个实例存在,因为它首先创建了互斥锁。
lpCmdLine
[in] 指向应用程序命令行的空终止字符串的指针,不包括程序名称。 要检索整个命令行,请使用GetCommandLine函数。
nCmdShow
[in] 指定如何显示窗口。 该参数可以是以下值之一。
值 | 含义 |
---|
SW_HIDE | 隐藏窗口并激活另一个窗口。 |
SW_MAXIMIZE | 最大化指定的窗口。 |
SW_MINIMIZE | 最小化指定的窗口并按Z顺序激活下一个顶层窗口。 |
SW_RESTORE | 激活并显示窗口。 如果窗口被最小化或最大化,则系统将其恢复到其原始大小和位置。 应用程序应该在恢复最小化窗口时指定此标志。 |
SW_SHOW | 激活窗口并以当前的大小和位置显示它。 |
SW_SHOWMAXIMIZED | 激活窗口并将其显示为最大化窗口。 |
SW_SHOWMINIMIZED | 激活窗口并将其显示为最小化窗口。 |
SW_SHOWMINNOACTIVE | 将窗口显示为最小化窗口。 该值与SW_SHOWMINIMIZED类似,但窗口未激活。 |
SW_SHOWNA | 以当前大小和位置显示窗口。 该值与SW_SHOW类似,只是窗口未激活。 |
SW_SHOWNOACTIVATE | 以最近的大小和位置显示一个窗口。 该值与SW_SHOWNORMAL类似,但窗口未激活。 |
SW_SHOWNORMAL | 激活并显示一个窗口。 如果窗口被最小化或最大化,则系统将其恢复到其原始大小和位置。 应用程序应该在第一次显示窗口时指定此标志。 |
返回值
如果函数成功,当它收到WM_QUIT消息时终止,它应该返回包含在该消息的wParam参数中的退出值。 如果函数在进入消息循环之前终止,它应该返回零。
备注
您的WinMain应该初始化应用程序,显示其主窗口,并输入消息检索和分发循环,这是应用程序执行的其余部分的顶级控制结构。 收到WM_QUIT消息时终止消息循环。 此时,WinMain应退出应用程序,并返回WM_QUIT消息的wParam参数中传递的值。 如果由于调用PostQuitMessage而收到WM_QUIT,则wParam的值是PostQuitMessage函数的nExitCode参数的值。 有关更多信息,请参阅创建消息循环。
ANSI应用程序可以使用WinMain函数的lpCmdLine参数来访问命令行字符串,不包括程序名称。 WinMain无法返回Unicode字符串的原因是lpCmdLine使用LPSTR数据类型,而不是LPTSTR数据类型。 GetCommandLine函数可用于访问命令行中的Unicode字符串,因为它使用LPTSTR数据类型。
要求
Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。
Windows 95/98/Me: 包含在Windows 95和更高版本中。
头文件: 声明于 Winuser.h; 包含于 Windows.h.
DialogProc
DialogProc函数是与CreateDialog和DialogBox系列函数一起使用的应用程序定义的回调函数。 它处理发送到模态或非模态对话框的消息。 DLGPROC类型定义了一个指向这个回调函数的指针。 DialogProc是应用程序定义的函数名称的占位符。
INT_PTR CALLBACK DialogProc(
HWND hwndDlg, // 对话框句柄
UINT uMsg, // 消息
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);
参数
hwndDlg
[in] 对话框句柄。
uMsg
[in] 指定消息。
wParam
[in] 指定其他消息特定的信息。
lParam
[in] 指定其他消息特定的信息。
返回值
通常,对话框过程在处理消息时应返回TRUE,否则返回FALSE。 如果对话框过程返回FALSE,则对话框管理器将执行默认对话框操作以响应该消息。
如果对话框过程处理需要特定返回值的消息,则对话框过程应在返回TRUE之前立即调用SetWindowLong(hwndDlg,DWL_MSGRESULT,lResult)来设置所需的返回值。 请注意,您必须在返回TRUE之前立即调用SetWindowLong; 这样做可能会导致DWL_MSGRESULT值被嵌套的对话框消息覆盖。
以下信息是上述一般规则的例外情况。 有关返回值的语义的详细信息,请参阅特定消息的文档。
WM_CHARTOITEM
WM_COMPAREITEM
WM_CTLCOLORBTN
WM_CTLCOLORDLG
WM_CTLCOLOREDIT
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
WM_INITDIALOG
WM_QUERYDRAGICON
WM_VKEYTOITEM
备注
只有在对话框中使用对话框类时,才应使用对话框过程。 这是默认类,在对话框模板中未指定明确的类时使用。 尽管对话框过程类似于窗口过程,但它不得调用DefWindowProc函数来处理不需要的消息。 不需要的消息由对话框窗口过程在内部处理。
要求
Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。
Windows 95/98/Me: 包含在Windows 95和更高版本中。
头文件: 声明于 Winuser.h; 包含于 Windows.h.
WindowProc
WindowProc函数是一个应用程序定义的函数,用于处理发送到窗口的消息。 WNDPROC类型定义了一个指向这个回调函数的指针。 WindowProc是应用程序定义的函数名称的占位符。
LRESULT CALLBACK WindowProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 消息标识符
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);
参数
返回值
返回值是消息处理的结果,取决于发送的消息。
要求
Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。
Windows 95/98/Me: 包含在Windows 95和更高版本中。
头文件: 声明于 Winuser.h; 包含于 Windows.h.
UpdateWindow
如果窗口的更新区域不是空的,则UpdateWindow函数通过向窗口发送WM_PAINT消息来更新指定窗口的客户区。 该函数直接将WM_PAINT消息发送到指定窗口的窗口过程,绕过应用程序队列。 如果更新区域为空,则不发送消息。
BOOL UpdateWindow(
HWND hWnd // 窗口句柄
);
参数
返回值
如果函数成功,返回值为非零。
如果函数失败,返回值为零。
Windows NT/2000/XP: 要获得扩展的错误信息,请调用GetLastError。
示例代码
有关示例,请参阅客户区中的绘图。
要求
Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。
Windows 95/98/Me: 包含在Windows 95和更高版本中。
头文件: 声明于 Winuser.h; 包含于 Windows.h.
库: 使用 User32.lib.
UnionRect
UnionRect函数创建两个矩形的并集。 联合是包含两个源矩形的最小矩形。
BOOL UnionRect(
LPRECT lprcDst, // 目标矩形
CONST RECT *lprcSrc1, // 第一个矩形
CONST RECT *lprcSrc2 // 第二个矩形
);
参数
lprcDst
[out] 指向RECT结构的指针将接收包含由lprcSrc1和lprcSrc2参数指向的矩形的矩形。
lprcSrc1
[in] 指向包含第一个源矩形的RECT结构的指针。
lprcSrc2
[in] 指向包含第二个源矩形的RECT结构的指针。
返回值
如果指定的结构包含非空矩形,则返回值不为零。
如果指定的结构不包含非空矩形,则返回值为零。
Windows NT/2000/XP: 要获得扩展的错误信息,请调用GetLastError。
备注
系统会忽略空白矩形的尺寸 - 即所有坐标均设为零的矩形,因此它没有高度或没有宽度。
因为应用程序可以为不同目的使用矩形,所以矩形函数不使用明确的度量单位。 相反,所有的矩形坐标和尺寸都以有符号的逻辑值给出。 映射模式和使用矩形的函数决定了度量单位。
要求
Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。
Windows 95/98/Me: 包含在Windows 95和更高版本中。
头文件: 声明于 Winuser.h; 包含于 Windows.h.
库: 使用 User32.lib.