How to create a hidden window in C++

后端 未结 5 506
-上瘾入骨i
-上瘾入骨i 2021-02-01 13:57

How to create a hidden window ?

The purpose of this window is to receive some messages.

5条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-02-01 14:20

    In a win32/mfc environment what you need to do is create a class and inherit from CWnd like this:

    class HiddenMsgWindow : public CWnd
    {
    ...
    }
    

    in the constructor of that class you would instantiate a window like this:

    HiddenMsgWindow::HiddenMsgWindow()
    {
       CString wcn = ::AfxRegisterWndClass(NULL);
       BOOL created = this->CreateEx(0, wcn, _T("YourExcellentWindowClass"), 0, 0, 0, 0, 0, HWND_MESSAGE, 0);
    }
    

    This gets you a hidden window with a message pump almost ready to rock and roll.

    the rest of the story is to provide the linkage between the window messages and the handlers for those messages.

    This is done by adding a few macros and a message handler to your implementation file (.cpp) like this:

    BEGIN_MESSAGE_MAP(HiddenMsgWindow, CWnd)
       ON_MESSAGE(WM_USER + 1, DoNOOP)
    END_MESSAGE_MAP()
    
    LRESULT HiddenMsgWindow::DoNOOP(WPARAM wParam, LPARAM lParam)
    {
       AfxMessageBox(_T("Get Reaaady for a Ruuummmmmmmbllllle!"));
       return LRESULT(true);
    }
    

    Then you need to fill in the rest of the glue in the header file like this:

    class HiddenMsgWindow : public CWnd
    {
    public:
       HiddenMsgWindow();
    protected:
       afx_msg LRESULT DoNOOP(WPARAM wParam, LPARAM lParam);
    
       DECLARE_MESSAGE_MAP()
    
    }
    

    And just like magic, you have a hidden window all ready to pump your messages.

    In order to use this message window you would instantiate the class retrieve it's handle and send or post messages as desired. Just like this:

    HiddenMsgWindow *hmw = new HiddenMsgWindow();
    SendMessage(hmw->m_hWnd, WM_USER + 1, 0, 0);
    

提交回复
热议问题