c++ - 打开对话框

标签 c++ winapi dialog

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

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

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

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

最佳答案

最后一个参数,您将 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;
}

documentation是这样说的:

Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.

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

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

关于c++ - 打开对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201648/

相关文章:

c# - 如何使用 OpenFileDialog 选择文件夹?

android - 在自定义对话框中设置 TextView

css - 如何使用 CSS + HTML 在对话行中排除前导连字符?

c++ - 运算符(operator)内部运算符(operator)不工作

c++ - 调用cout时,如何在struct中输出常量文本?

c++ - WM_KEYDOWN 消息未发送

c++ - 如何在 native C++ 中获取进程名称和日期时间戳

c++对象未跨文件注册

c++ - 将指针传递给指向函数的指针时出现段错误

c++ - 让 DrawText 打断一个字符串