LRESULT CTangramTabCtrlWnd::OnCreatePage(WPARAM wParam, LPARAM lParam) { HWND hPageWnd = (HWND)wParam; //CTabPageWnd* pWnd = new CTabPageWnd(); //pWnd->SubclassWindow(hPageWnd); CWnd* pWnd = FromHandlePermanent(hPageWnd); if (pWnd == NULL) { pWnd = new CTabPageWnd(); pWnd->SubclassWindow(hPageWnd); } AddTab(pWnd, (LPCTSTR)lParam, (UINT)GetTabsNum()-1); //AddTab(pView,LPCTSTR(pObj->m_strCaption),0); //if(nIndex==m_pTangramXMLObj->m_nActivePage) //{ // SetFocusedItem(pItem); //} //AddPage(pWnd,(LPCTSTR)lParam); //SendMessage(WM_TGM_SETACTIVEPAGE); InvalidateRect(NULL); //if(pWnd) //{ // pWnd->UnsubclassWindow(); // delete pWnd; //} return 0; }
LRESULT CResizableSheetEx::OnResizeSupport(WPARAM wParam, LPARAM lParam) { switch (wParam) { case RSZSUP_SHEETPAGEEXHACK: { // a window object must be still associated to the page handle // but MFC subclassing has been turned off to allow the system // to subclass it first, so we can catch all the messages CWnd* pWnd = CWnd::FromHandlePermanent((HWND)lParam); if (pWnd == NULL) return 0; // suclass the window again and refresh page and sheet pWnd->SubclassWindow(pWnd->Detach()); RefreshLayout(); pWnd->SendMessage(WM_SIZE); Invalidate(); UnlockWindowUpdate(); if (pWnd->IsWindowVisible()) { // send lost PSN_SETACTIVE notification message CPropertyPage* pPage = DYNAMIC_DOWNCAST(CPropertyPage, pWnd); if (pPage != NULL) SetActivePage(pPage); } } break; default: return FALSE; } return TRUE; }
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl) { if (rControl.m_hWnd == NULL) // not subclassed yet { ASSERT(!pDX->m_bSaveAndValidate); HWND hWndCtrl = pDX->PrepareCtrl(nIDC); if (!rControl.SubclassWindow(hWndCtrl)) { ASSERT(FALSE); // possibly trying to subclass twice? AfxThrowNotSupportedException(); } #ifndef _AFX_NO_OCC_SUPPORT else { // If the control has reparented itself (e.g., invisible control), // make sure that the CWnd gets properly wired to its control site. if (pDX->m_pDlgWnd->m_hWnd != ::GetParent(rControl.m_hWnd)) rControl.AttachControlSite(pDX->m_pDlgWnd); } #endif //!_AFX_NO_OCC_SUPPORT } }
BOOL CMFCControlContainer::SubclassDlgControls() { if (m_pWnd->GetSafeHwnd() != NULL) { // Subclass Feature Pack controls: CWnd* pWndChild = m_pWnd->GetWindow(GW_CHILD); while (pWndChild != NULL) { ASSERT_VALID(pWndChild); TCHAR lpszClassName [MAX_CLASS_NAME + 1]; ::GetClassName(pWndChild->GetSafeHwnd(), lpszClassName, MAX_CLASS_NAME); CWnd* pWndSubclassedCtrl = CreateDlgControl(lpszClassName); if (pWndSubclassedCtrl != NULL) { m_arSubclassedCtrls.Add((CObject*)pWndSubclassedCtrl); pWndSubclassedCtrl->SubclassWindow(pWndChild->GetSafeHwnd()); } pWndChild = pWndChild->GetNextWindow(); } return TRUE; } return FALSE; }
BOOL CMFCControlContainer::ReSubclassControl(HWND hWndCtrl, WORD nIDC, CWnd& control) { if (hWndCtrl == NULL) { return FALSE; } int nIndex = -1; for (int i = 0; i < m_arSubclassedCtrls.GetCount(); i++) { CWnd* pWnd = (CWnd*)m_arSubclassedCtrls [i]; if (pWnd->GetSafeHwnd() == hWndCtrl) { nIndex = i; break; } } if (nIndex != -1) { CWnd* pWnd = DYNAMIC_DOWNCAST(CWnd, m_arSubclassedCtrls [nIndex]); if (pWnd->GetSafeHwnd() != NULL) { ASSERT_VALID(pWnd); // get init state DWORD dwSize = 0; BYTE* pbInitData = NULL; GetControlData(nIDC, dwSize, pbInitData); // Free old subclassed control: m_arSubclassedCtrls [nIndex] = NULL; // unsubclass PreUnsubclassControl(pWnd); VERIFY(pWnd->UnsubclassWindow() == hWndCtrl); // destroy delete pWnd; // subclass if (!control.SubclassWindow(hWndCtrl)) { ASSERT(FALSE); // possibly trying to subclass twice? AfxThrowNotSupportedException(); } // set init state if (dwSize > 0) { control.SendMessage(WM_MFC_INITCTRL, (WPARAM)dwSize, (LPARAM)pbInitData); } return TRUE; } } return FALSE; }
BOOL CServerSocet::LinkWindowSocket(HWND m_hWnd,CString* sMessage) { CString S; if(!bCreateSocket) return FALSE; CWnd win; win.SubclassWindow(m_hWnd); m_hWnd = GetConsoleWindow(); SocWin = new(CSocketWindow); S.Format(_T("Создание окна")); if(sMessage != NULL) *sMessage = *sMessage + S; if(!SocWin->Create(101)) { if(sMessage != NULL) { *sMessage = *sMessage + _T("\tневыполненно\n"); *sMessage = *sMessage + MyGetLastError(); } return FALSE; } SocWin->SetFunction(this); if(sMessage != NULL) *sMessage = *sMessage + _T("\tвыполненно\n"); int Errors; S.Format(_T("Связываем сокет с окном ")); if(sMessage != NULL) *sMessage = *sMessage + S; Errors=WSAAsyncSelect(sokServerSocket,SocWin->m_hWnd,WM_SERVER_ACCEPT,FD_ACCEPT|FD_READ); if (Errors == SOCKET_ERROR) { if(sMessage != NULL) { *sMessage = *sMessage + _T("\tневыполненно\n"); *sMessage = *sMessage + MyGetLastError(); } return FALSE; } if(sMessage != NULL) *sMessage = *sMessage + _T("\tвыполненно\n"); *sMessage = *sMessage + _T("Установка HOOK"); if(sMessage != NULL) *sMessage = *sMessage + _T("\tвыполненно\n"); //SendMessage(SocWin->m_hWnd ,WM_SERVER_ACCEPT,0,0); //SocWin->ShowWindow(1); return TRUE; }
BOOL CShortcutManager::HookWindow(HWND hWnd) { if (hWnd) { ASSERT(m_hWndHooked == NULL); if (m_hWndHooked) { return FALSE; } ASSERT(::IsWindow(hWnd)); if (!::IsWindow(hWnd)) { return FALSE; } m_hWndHooked = hWnd; m_bPreMFCSubclass = (CWnd::FromHandlePermanent(hWnd) == NULL); } else { // Unhook the window if (m_hWndHooked) { CWnd* pPerm = CWnd::FromHandlePermanent(m_hWndHooked); if (m_bPreMFCSubclass && pPerm) { pPerm->UnsubclassWindow(); } if (m_bPreMFCSubclass && pPerm) { pPerm->SubclassWindow(m_hWndHooked); } } m_hWndHooked = NULL; m_bPreMFCSubclass = FALSE; } return TRUE; }
void CKofDlgImpl::EnableVisualManagerStyle( BOOL bEnable, BOOL bNCArea /*= FALSE*/, const CList<UINT,UINT>* plstNonSubclassedItems /*= NULL*/ ) { bEnable; m_bVisualManagerNCArea = bNCArea; plstNonSubclassedItems; if (m_Dlg.GetSafeHwnd () == NULL) { return; } CWnd* pWndChild = m_Dlg.GetWindow(GW_CHILD); while (pWndChild != NULL) { ASSERT_VALID (pWndChild); if (plstNonSubclassedItems != NULL && plstNonSubclassedItems->Find (pWndChild->GetDlgCtrlID ()) != NULL) { pWndChild = pWndChild->GetNextWindow (); continue; } if (bEnable && CWnd::FromHandlePermanent (pWndChild->GetSafeHwnd ()) == NULL) { #define MAX_CLASS_NAME 255 #define STATIC_CLASS _T("Static") #define BUTTON_CLASS _T("Button") #define EDIT_CLASS _T("Edit") #define COMBOBOX_CLASS _T("ComboBox") #define SCROLLBAR_CLASS _T("ScrollBar") TCHAR lpszClassName [MAX_CLASS_NAME + 1]; ::GetClassName (pWndChild->GetSafeHwnd (), lpszClassName, MAX_CLASS_NAME); CString strClass = lpszClassName; CWnd* pWndSubclassedCtrl = NULL; if (strClass == STATIC_CLASS) { pWndSubclassedCtrl = new CKofStatic; } else if (strClass == BUTTON_CLASS) { if ((pWndChild->GetStyle () & 0xF) == BS_GROUPBOX) { pWndSubclassedCtrl = new CKofGroup; } else { pWndSubclassedCtrl = new CKofMFCButton; } } else if (strClass == PROGRESS_CLASS) { pWndSubclassedCtrl = new CKofProgressCtrl; } else if (strClass == TRACKBAR_CLASS) { //pWndSubclassedCtrl = new CSliderCtrl; } else if (strClass == EDIT_CLASS) { pWndSubclassedCtrl = new CKofMFCEdit; } else if (strClass == COMBOBOX_CLASS) { pWndSubclassedCtrl = new CKofComboBox; } else if (strClass == SCROLLBAR_CLASS) { //pWndSubclassedCtrl = new CScrollBar; } else if (strClass == UPDOWN_CLASS) { pWndSubclassedCtrl = new CKofMFCSpinButtonCtrl; } else if (strClass == RICHEDIT_CLASS) { pWndSubclassedCtrl = new CKofRichEditCtrl; } if (pWndSubclassedCtrl != NULL) { m_arSubclassedCtrls.Add (pWndSubclassedCtrl); pWndSubclassedCtrl->SubclassWindow (pWndChild->GetSafeHwnd ()); } } pWndChild = pWndChild->GetNextWindow (); } OnChangeVisualManager (); if (m_Dlg.IsWindowVisible ()) { m_Dlg.RedrawWindow (NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN); } }
//************************************************************************************* void CBCGPDlgImpl::EnableVisualManagerStyle (BOOL bEnable, BOOL bNCArea, const CList<UINT,UINT>* plstNonSubclassedItems) { m_bVisualManagerStyle = bEnable; m_bVisualManagerNCArea = bNCArea; if (m_Dlg.GetSafeHwnd () == NULL) { return; } if (m_lstNonSubclassedItems.IsEmpty() && plstNonSubclassedItems != NULL) { m_lstNonSubclassedItems.AddTail((CList<UINT,UINT>*)plstNonSubclassedItems); } CWnd* pWndChild = m_Dlg.GetWindow (GW_CHILD); while (pWndChild != NULL) { ASSERT_VALID (pWndChild); if (plstNonSubclassedItems != NULL && plstNonSubclassedItems->Find (pWndChild->GetDlgCtrlID ()) != NULL) { pWndChild = pWndChild->GetNextWindow (); continue; } if (m_lstNonSubclassedItems.Find (pWndChild->GetDlgCtrlID ()) != NULL) { pWndChild = pWndChild->GetNextWindow (); continue; } CBCGPButton* pButton = DYNAMIC_DOWNCAST(CBCGPButton, pWndChild); if (pButton != NULL) { ASSERT_VALID (pButton); pButton->m_bVisualManagerStyle = m_bVisualManagerStyle; } if (m_bVisualManagerStyle && CWnd::FromHandlePermanent (pWndChild->GetSafeHwnd ()) == NULL) { #define MAX_CLASS_NAME 255 #define STATIC_CLASS _T("Static") #define BUTTON_CLASS _T("Button") #define EDIT_CLASS _T("Edit") #define COMBOBOX_CLASS _T("ComboBox") #define SCROLLBAR_CLASS _T("ScrollBar") TCHAR lpszClassName [MAX_CLASS_NAME + 1]; ::GetClassName (pWndChild->GetSafeHwnd (), lpszClassName, MAX_CLASS_NAME); CString strClass = lpszClassName; CWnd* pWndSubclassedCtrl = NULL; if (strClass == STATIC_CLASS) { pWndSubclassedCtrl = new CBCGPStatic; } else if (strClass == BUTTON_CLASS) { if ((pWndChild->GetStyle () & 0xF) == BS_GROUPBOX) { pWndSubclassedCtrl = new CBCGPGroup; } else { pWndSubclassedCtrl = new CBCGPButton; } } else if (strClass == PROGRESS_CLASS) { pWndSubclassedCtrl = new CBCGPProgressCtrl; } else if (strClass == TRACKBAR_CLASS) { pWndSubclassedCtrl = new CBCGPSliderCtrl; } else if (strClass == EDIT_CLASS) { pWndSubclassedCtrl = new CBCGPEdit; } else if (strClass == COMBOBOX_CLASS) { pWndSubclassedCtrl = new CBCGPComboBox; } else if (strClass == SCROLLBAR_CLASS) { pWndSubclassedCtrl = new CBCGPScrollBar; } else if (strClass == UPDOWN_CLASS) { pWndSubclassedCtrl = new CBCGPSpinButtonCtrl; } if (pWndSubclassedCtrl != NULL) { m_arSubclassedCtrls.Add (pWndSubclassedCtrl); pWndSubclassedCtrl->SubclassWindow (pWndChild->GetSafeHwnd ()); } } pWndChild->SendMessage (BCGM_ONSETCONTROLVMMODE, (WPARAM) bEnable); pWndChild = pWndChild->GetNextWindow (); } OnChangeVisualManager (); if (m_Dlg.IsWindowVisible ()) { m_Dlg.RedrawWindow (NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN); } }