1

我不太明白这是如何工作的。所以我制作了我的对话框..或框。而且我不知道如何让它们出现在我的代码中。现在,我正试图让它们在我启动程序时立即弹出,这样我就可以基本了解它是如何工作的。

 switch (message)
 {
 case WM_CREATE:
     HINSTANCE hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
     CreateDialog(hInstance, "Whatever", hwnd, ABOUT_DIALOG);

这在 CreateDialog 中给我一个错误,说 int 类型的参数与 DLGPROC 不兼容。我假设我需要在某处声明我的对话框?

如果我的第一个启动窗口上有一个按钮,我怎么知道用户按下了按钮?我将再次假设并说我需要在 WM_COMMAND 命令的某个地方捕获它?

4

1 回答 1

3

最后一个参数,即您传递ABOUT_DIALOG给的东西,必须是DLGPROC. 这是这种形式的一个功能:

INT_PTR CALLBACK DialogProc(
  HWND hwndDlg,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
);

编译器告诉你这ABOUT_DIALOG不是那种形式的函数。事实上,编译器会告诉你这ABOUT_DIALOG绝对int不是正确的事情!

要使用默认的无操作对话框过程启动并运行它,请按如下方式实现:

INT_PTR CALLBACK DialogProc(
  HWND hwndDlg,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
)
{
    return FALSE;
}

文档是这样说的:

通常,如果对话框过程处理了消息,则应返回 TRUE,否则应返回 FALSE。如果对话框过程返回 FALSE,则对话框管理器执行默认对话框操作以响应消息。

因此,通过返回FALSE,我们要求进行默认处理。

对话框启动并运行后,您可以使用所需的任何功能填写对话框过程。

于 2013-04-24T20:45:43.947 回答