WinMain-被系统调用为基于Windows的应用程序的初始入口点

平台 SDK: Windows 用户接口

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-是与CreateDialog和DialogBox系列函数一起使用的应用程序定义的回调函数

平台SDK: Windows 用户接口

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.


WndProc-一个应用程序定义的函数,用于处理发送到窗口的消息

平台 SDK: Windows 用户接口

WindowProc

WindowProc函数是一个应用程序定义的函数,用于处理发送到窗口的消息。 WNDPROC类型定义了一个指向这个回调函数的指针。 WindowProc是应用程序定义的函数名称的占位符。

LRESULT CALLBACK WindowProc(
  HWND hwnd,      // 窗口句柄
  UINT uMsg,      // 消息标识符
  WPARAM wParam,  // 第一个消息参数
  LPARAM lParam   // 第二个消息参数
);

参数

  • hwnd

  • [in] 窗口句柄。

  • uMsg

  • [in] 指定消息。

  • wParam

  • [in] 指定其他消息信息。 该参数的内容取决于uMsg参数的值。

  • lParam

  • [in] 指定其他消息信息。 该参数的内容取决于uMsg参数的值。

返回值

返回值是消息处理的结果,取决于发送的消息。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.


UpdateWindow-通过向窗口发送WM_PAINT消息来更新指定窗口的客户区

平台 SDK: Windows GDI

UpdateWindow

如果窗口的更新区域不是空的,则UpdateWindow函数通过向窗口发送WM_PAINT消息来更新指定窗口的客户区。 该函数直接将WM_PAINT消息发送到指定窗口的窗口过程,绕过应用程序队列。 如果更新区域为空,则不发送消息。

BOOL UpdateWindow(
  HWND hWnd   // 窗口句柄
);

参数

  • hWnd

  • [in] 要更新的窗口句柄。

返回值

如果函数成功,返回值为非零。

如果函数失败,返回值为零。

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-创建两个矩形的并集

平台 SDK: Windows GDI

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.