【问题标题】:C++ and Win32 WC_DIALOG close event problemC++和Win32 WC_DIALOG关闭事件问题
【发布时间】:2019-11-14 17:31:44
【问题描述】:

我的英语不好。对不起

HWND DIALOG_0 = CreateWindowEx(0, WC_DIALOG, "Security Alert", DS_SETFONT | WS_OVERLAPPEDWINDOW | WS_VISIBLE, 600,300,300,200,Win.hwnd_0,NULL,NULL,NULL);
(WNDPROC)SetWindowLongPtr(DIALOG_0 , GWLP_WNDPROC, (INT_PTR)dede);
ShowWindow (DIALOG_0, SW_SHOW);
UpdateWindow(DIALOG_0);

如何执行关闭事件。 如何制作 HWND 点击事件

我使用它,但它被锁定了。

(WNDPROC)SetWindowLongPtr(DIALOG_0 , GWLP_WNDPROC, (INT_PTR)dede);

WC_DIALOG 创建dede函数

LONG_PTR __stdcall Win32::dede(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {

        case WM_CTLCOLORDLG:
            return (INT_PTR)GetStockObject(HOLLOW_BRUSH);
        break;

        default:
            DefWindowProc(hDlg, message, wParam, lParam);
        break;
    }

    return (INT_PTR)FALSE;
}

【问题讨论】:

  • 显示dede的代码。
  • 好的,源代码追加完成。
  • 这不是您子类化窗口的方式。您需要将未处理的消息转发到原始窗口的CallWindowProc。另外,创建对话框的方法是CreateDialog,而不是CreateWindowEx。此外,这不是您使用DS_SETFONT 的方式。重新开始:创建一个对话框模板,使用CreateDialog,并指定一个DlgProc

标签: c++ winapi


【解决方案1】:

您通常使用DialogBoxCreateDialog 创建对话框,而不是CreateWindow。如果您使用CreateWindow,则不能使用 DS_ 样式。

GWLP_WNDPROC 替换了原来的窗口过程,你通常应该调用CallWindowProc,而不是DefWindowProc。如果您不这样做,那么您将无法获得默认的 IDCANCEL 处理以及对话框通常提供的所有其他内容。

捕捉WM_CLOSEWM_COMMAND 来处理关闭和点击事件。

MSDN 有一个对话指南here

【讨论】:

  • 你能提供有效的样品吗?源码分享一下?
  • 什么样本?您通常在 Visual Studio 中设计一个模板对话框,并将其作为资源包含在您的 .exe/.dll 中。
  • @RamazanŞAHİN 这花了大约 10 秒到谷歌 docs.microsoft.com/en-us/windows/win32/learnwin32/…
  • @Anders 同名有多么令人困惑,因为最后一条评论不是我。
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 2014-03-26
  • 2011-06-21
  • 2012-08-30
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多