做MFC分割視窗時,其中含有視類CxxVew視窗,含有General Class (自定義的類CMyXX),在CMyXX中使用GetDC時:
CDC* pDC = GetDC();
出現標題中的問題,因為自己沒有指定此設備背景關系環境是哪個視窗的(沒有獲取某個視窗的句柄),即編譯器不知道在哪個視窗物件中獲取DC,且自定義的類又不是從CWnd類派生,所以程式會默認呼叫Windows Api中的GetDC函式:
WINUSERAPI
HDC
WINAPI
GetDC( HWND hWnd );
Windows Api函式原型中形參必須是某個視窗的句柄,不能為空,所以會出現標題中的錯誤,那么如何將視類視窗的指標傳遞給自定義的類中去使用呢?
解決方案:
在自定義的類MyXX.h 頭檔案宣告一個CWnd* 指標變數p_WndView,再宣告一個函式:void SetWindowWnd(CWnd* pWnd),在cpp檔案中實作這個函式:
void CMyXX::SetWindowWnd(CWnd* pWnd)
{
p_WndView = pWnd;
}
在CxxView的頭檔案中包含MyXX.h這個頭檔案,且宣告一個public的CMyXX的物件變數m_xx,然后在CxxVew.cpp中就可以使用m_xx.SetWindowWnd(this)來傳遞這個視圖視窗的指標到CMyXX中的p_WndView變數中,在MyXX.cpp中就可以在影像顯示的函式中使用:
CDC* pDC = p_WndView->GetDC();
獲取視類視窗的設備背景關系指標,進而獲取句柄,接下來的操作就簡單了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/32747.html
標籤:其他
