BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { //SAMPLE: modified this function to use our owner if (!CFrameWnd::PreCreateWindow(cs)) return FALSE; //SAMPLE: end of changed lines //SAMPLE: added these lines to create our invisible owner // we have to check since PreCreateWindow may be called // more than once if (m_wndOwner.m_hWnd == NULL) { // we don't care about any attributes of our hidden window LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0); if (!m_wndOwner.CreateEx(0, pstrOwnerClass, _T(""), WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, 0)) return FALSE; } // note that we _don't_ set WS_CHILD... making the _owner_ // window of our frame some invisible window. cs.hwndParent = m_wndOwner.m_hWnd; return TRUE; //SAMPLE: end of added lines }
if (!::IsWindow(m_wndInvisible.m_hWnd)){
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
if (!m_wndInvisible.CreateEx(0, pstrOwnerClass, _T(""), WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, 0))
return FALSE;
} cs.hwndParent = m_wndInvisible.m_hWnd;
{
//SAMPLE: modified this function to use our owner if (!CFrameWnd::PreCreateWindow(cs))
return FALSE; //SAMPLE: end of changed lines //SAMPLE: added these lines to create our invisible owner // we have to check since PreCreateWindow may be called
// more than once if (m_wndOwner.m_hWnd == NULL)
{
// we don't care about any attributes of our hidden window LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0); if (!m_wndOwner.CreateEx(0, pstrOwnerClass, _T(""), WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0))
return FALSE;
} // note that we _don't_ set WS_CHILD... making the _owner_
// window of our frame some invisible window. cs.hwndParent = m_wndOwner.m_hWnd;
return TRUE; //SAMPLE: end of added lines
}
查看有关托盘编程的资料。