MFC開發常見問題的回答3 (轉)

worldblog發表於2007-12-29
MFC開發常見問題的回答3 (轉)[@more@]

第一輯:/develop/read_article.?id=6676">http://www.csdn.net/develop/read_article.asp?id=6676

第二輯:http://www.csdn.net/develop/read_article.asp?id=7259

 

問:MFC如何處理WM_SETTEXT訊息?

答:

MFC沒有提供WM_SETTEXT訊息的對映,所以需要我們自己定義
在message map裡面
OnMessage(WM_SETTEXT, OnSetText)
在.h裡面宣告
void LRESULT CMyClass::OnSetText(wParam, lParam);//bool...等等函式型別自己決定

 

 

問:如何註冊自己的訊息?

答:
在message map裡面

#define ON_WM_CHKTBLTOGGLE()
{
WM_CHKTBLTOGGLE, 0, AfxSig_vwp, (AFX_PMSG)(AFX_PMSGW)(BOOL
(AFX_MSG_CALL CWnd::*)(BYTE, BYTE))OnChkTblToggle
},
ON_MESSAGE(WM_CHKTBLTOGGLE, OnChkTblToggle)

如此宣告訊息函式
afx_msg LRESULT OnChkTblToggle(WPARAM wParam, LPARAM lParam);


LRESULT CMyView::OnChkTblToggle(WPARAM wParam, LPARAM lParam)
{
    // TODO: write your code here.
}

void CMYView::OnChkTblToggle(UINT, CPoint)

 

 

問:如何使我的視窗總位於螢幕頂端?

SetWindowPos(&wndTopMost,NULL,NULL,NULL,NULL,SWP_NOMOVE¦SWP_NOSIZE);

 

 

問:怎麼弄一個HDC建立一個CDC?
有時候window 會給你一個DC的控制程式碼,而你想利用其CDC,比如自畫ComBox、按鈕、tabctrl等等
下面有兩種方法從一個hdc建立到CDC,你能把它們利用到任何MFC應用程式中!
方法一:
void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem)
{
    CDC myDC;
    myDC.Attach(lpDrawItem->hDC);
    //在這裡做你想做的!
    //I如果你不做下面的 detach, window會很不高興哦:)
    myDC.Detach();
}
方法二:
CDC* pDC = CDC:FromHandle(lpDrawItem->hDC);

沒法說出上面良種方法在資源上的差異,至少下面的很簡單,並且,你不會因忘記detach出錯....

 

如何去掉視窗的標題條?

答:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
LONG dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE):
dwStyle &= ~(WS_CAPTION¦WS_BORDER ):
::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle):
//.....

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996105/,如需轉載,請註明出處,否則將追究法律責任。

相關文章