1

我在编码之前进行了一些分析,并且在查找具有以下特征的应用程序的信息或实现时遇到了一些麻烦:

  1. 窗口 #1(显示在任务栏上)
  2. 窗口#2(不显示在任务栏上,你可以把它放在窗口#1 后面,所以我们不是在谈论基于窗口#1 的弹出窗口/对话框)
  3. Window #1 和 Window #2 都在同一个项目(或应用程序,可以这么说)中

同样,这只是从概念上讲,所以如果你能指出一些证明这是可能的信息,那就太好了。请注意,这是在 C++ 而不是 C# 中。

4

1 回答 1

1

我想出的最接近的是:

  1. 添加了一个从 CWnd 派生的类
  2. 在类中添加了以下功能

    无效 Create2ndWindow(CWnd* pParent){

    LPCTSTR pszClassName = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW, ::LoadCursor(NULL, IDC_ARROW), (HBRUSH) ::GetStockObject(WHITE_BRUSH), ::LoadIcon(NULL, IDI_APPLICATION));

    BOOL bCreated = CreateEx(WS_EX_CLIENTEDGE, 
        pszClassName, 
        _T("My Second Window"), 
        WS_BORDER|WS_CAPTION|WS_ACTIVECAPTION|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_POPUPWINDOW|WS_SIZEBOX, 
        CRect(20, 20, 100, 100), 
        pParent, 
        NULL);
    if(bCreated)
        ShowWindow(SW_SHOW);
    

    }

  3. 在 InitInstance 我添加了以下几行: CSecondWindow* pWnd = new CSecondWindow(); pWnd->Create2ndWindow(pFrame);

  4. 执行应用程序,桌面上出现 2 个窗口,但您应该只看到 pFrame 窗口的一个任务栏按钮,而 CSecondWindow 没有按钮

如果 pParent 为 NULL,那么您将看到任务栏按钮。您可以添加另一种样式 WS_EX_TOOLWINDOW 但这会降低标题栏的高度。

于 2013-09-12T20:31:03.027 回答