【问题标题】:Windows Dialog Box not getting openedWindows 对话框打不开
【发布时间】:2019-08-20 01:33:12
【问题描述】:

当用户按下按钮时,我试图在 Windows 机器中打开一个对话框(使用 Windows 凭据提供程序)。我尝试了下面的代码,但是没有打开对话框。我有一个资源“IDD_DIALOG1”和回调方法“ChangePasswordProc”。

HWND hwndOwner = nullptr;

::DialogBox(HINST_THISDLL, MAKEINTRESOURCE(IDD_DIALOG1), hwndOwner,ChangePasswordProc);

【问题讨论】:

  • 如果你按Alt+Tab,你能看到你的对话吗?该对话框可能隐藏在凭据提供程序后面
  • 我看不到
  • 您是否试图从凭证提供者内部引发对话?你是在哪个方法里面做的?
  • 你试过什么?您是否查看过 DialogBox 调用返回的值?您是否验证了 IDD_DIALOG1 引用了有效的对话框资源并且这些资源已链接到您的项目中?您是否使用 Spy++ 查看窗口是否存在,但它只是在屏幕外或缺少 WS_VISIBLE?

标签: c++ windows visual-studio credential-providers


【解决方案1】:

我很久没有用 Windows GUI 编写了,但也许可以试试这样:

HWND dialog = ::DialogBox(HINST_THISDLL, MAKEINTRESOURCE(IDD_DIALOG1), hwndOwner,ChangePasswordProc);
ShowWindow(dialog, SW_SHOW);

我记得,创建窗口并不意味着显示它——它必须明确地完成。

【讨论】:

  • 我也试过这个 HWND hwndGoto = NULL; // 对话框的窗口句柄 if (!IsWindow(hwndGoto)) { PrintLn("No previous Window available"); hwndGoto = CreateDialog(HINST_THISDLL, MAKEINTRESOURCE(IDB_TILE_IMAGE), hwndOwner, nullptr); ShowWindow(hwndGoto, SW_SHOW); }
【解决方案2】:

要从Credential Provider 内部创建任何窗口,您必须首先通过调用ICredentialProviderCredentialEvents 接口的OnCreatingWindow 方法获取父窗口句柄。

HRESULT OnCreatingWindow([out] HWND* phwndOwner);

指向此接口的指针通过调用其ICredentialProviderCredential 接口的Advise 方法提供给您的提供者:

HRESULT Advise([in] ICredentialProviderCredentialEvents* pcpce);

看看这个post

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多