c++ - Internet Explorer 闪烁的子窗口

标签 c++ internet-explorer winapi atl bho

我正在编写一个浏览器帮助程序对象,并希望在 Internet Explorer 窗口中显示一个子窗口以向用户显示一些消息。我使用 DS_CONTROL 和 WS_CHILDWINDOW 并希望获得类似于此图像中消息的行为:enter image description here

我成功地插入并显示了一个子窗口,但是窗口在闪烁,有时是可见的,有时网站内容在 z 坐标中位于窗口上方。我试图将子窗口设置为最顶层的窗口,但这并没有改变任何东西。如何让子窗口在关闭之前始终可见?这是我使用的一些源代码:

资源.rc:

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_NOTIFICATIONBAR DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CONTROL | DS_MODALFRAME | DS_SYSMODAL | DS_SHELLFONT | WS_VISIBLE |  WS_CHILDWINDOW
EXSTYLE WS_EX_TOPMOST
FONT 8, "Ms Shell Dlg"
{
    DEFPUSHBUTTON   "OK", IDOK, 129, 7, 50, 14
    PUSHBUTTON      "Cancel", IDCANCEL, 129, 24, 50, 14
    LTEXT           "Static", IDC_STATIC, 25, 16, 68, 21, SS_LEFT
}

对话框类:

#include "atlbase.h"
#include "atlwin.h"
#include "resources/resource.h"

class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
   enum { IDD = IDD_NOTIFICATIONBAR };

   BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
      COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
   END_MSG_MAP()

   CMyDialog() {Create(::GetActiveWindow());}

   ~CMyDialog() {DestroyWindow();}

   LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // ::MessageBox(NULL,_T("OnInit"),_T("OnInit"),MB_ICONINFORMATION|MB_OK);
      // Do some initialization code
      return 1;
   }

   static CMyDialog &getInstance()
   {
       static CMyDialog dlg;
       return dlg;
   }
public:
   LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
       ShowWindow(SW_HIDE);
       return 0;
   }
};

调用:

CMyDialog &bar=CMyDialog::getInstance();
bar.ShowWindow(SW_SHOWNORMAL);

最佳答案

您必须调整 MSHTML 窗口的大小以便为您的控件腾出空间。

关于c++ - Internet Explorer 闪烁的子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078105/

相关文章:

c++ - 如何从隐藏文件夹运行程序 WinAPI

c - 在线程函数中获取句柄

c# - 将外部应用程序移动到屏幕前面

c++ - 多重虚继承是否像虚函数的继承那样涉及后期绑定(bind)?

c++ - 为什么在这种情况下 bool 和 not bool 都返回 true?

html - IE11 上的溢出滚动问题

jquery - jQtransform IE 上的复选框点击问题

c++ - 从 std::vector 删除范围?

c++ - cairo 上下文中的鼠标事件

internet-explorer - 如何在 JSF 中使用 Internet Explorer 条件注释?