reactos操作系统实现(176)

MessageBox函数是一个非常简单提示性窗口函数,那么它是怎么实现显示窗口的呢?现在就来分析它的实现代码,如下:

#001  int

#002  WINAPI

#003  MessageBoxW(

#004    HWND hWnd,

#005    LPCWSTR lpText,

#006    LPCWSTR lpCaption,

#007    UINT uType)

#008  {

 

在这里主要调用函数MessageBoxExW来实现。

#009      return MessageBoxExW(hWnd, lpText, lpCaption, uType, LANG_NEUTRAL);

#010  }

 

MessageBoxExW函数实现如下:

#001  int

#002  WINAPI

#003  MessageBoxExW(

#004    HWND hWnd,

#005    LPCWSTR lpText,

#006    LPCWSTR lpCaption,

#007    UINT uType,

#008    WORD wLanguageId)

#009  {

 

定义一个消息框的结构。

#010      MSGBOXPARAMSW msgbox;

#011 

 

设置结构大小,以便实现不同版本兼容。

#012      msgbox.cbSize = sizeof(msgbox);

 

设置本窗口属于那个窗口的句柄。

#013      msgbox.hwndOwner = hWnd;

 

设置进程实例为空。

#014      msgbox.hInstance = 0;

 

设置提示性的文字。

#015      msgbox.lpszText = lpText;

 

窗口显示的标题。

#016      msgbox.lpszCaption = lpCaption;

 

窗口显示的类型。

#017      msgbox.dwStyle = uType;

 

窗口图标为空。

#018      msgbox.lpszIcon = NULL;

 

窗口帮助索引为空。

#019      msgbox.dwContextHelpId = 0;

 

窗口回调函数也为空。

#020      msgbox.lpfnMsgBoxCallback = NULL;

 

不同的语言显示。

#021      msgbox.dwLanguageId = wLanguageId;

#022 

 

调用函数MessageBoxTimeoutIndirectW进一步显示。

#023      return MessageBoxTimeoutIndirectW(&msgbox, (UINT)-1);

#024  }

posted @ 2010-01-08 22:10  ajuanabc  阅读(149)  评论(0编辑  收藏  举报