免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MFC自繪控件學(xué)習(xí)總結(jié)第二貼(轉(zhuǎn))
首先感謝大家對(duì)第一帖的支持,應(yīng)一些網(wǎng)友烈要求下面我在關(guān)于上一貼的一些補(bǔ)充和說明(老鳥可以無視)
這一貼是實(shí)戰(zhàn)+理論不知道第一帖的先看第一帖:
http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html


1).補(bǔ)充個(gè)高級(jí)可重載函數(shù)PreSubclassWindow(),我的理解是允許用戶在子類化之前再做一額外些處理 ,這個(gè)重載函數(shù)也是非常重要的,要引起相當(dāng)?shù)淖⒁狻?梢栽谶@里改變控件的大小,位置,窗口樣式,字體 ,等等.....你能想到的能改的,都可以在這里改.


2).關(guān)于Edit的補(bǔ)充說明:我最初的自繪方法是利用 WM_NCPAINT 里面處理的非客戶區(qū)只是自己畫了邊界,以實(shí)現(xiàn)Hover和Leave不同的邊界。不過我后來發(fā)現(xiàn)由于非客戶區(qū)太小了邊界也就2像素,如果鼠標(biāo)移動(dòng)很快有時(shí) 系統(tǒng)不能檢測(cè)到鼠標(biāo)當(dāng)前的狀態(tài),所以程序里面的Edit是在OnPaint里面做的繪制,不過有個(gè)核心API -Default() 下面看代碼
void CEditEx::OnPaint() 
{


Default();         // 關(guān)鍵

if(!m_bHover)
DrawBoder();   // 畫自己的邊界


},這才是程序里面的自繪Edit使用的方法.


3).對(duì)于控件的Hover和Leave效果,簡(jiǎn)單的說 Hover就是鼠標(biāo)現(xiàn)在浮于控件上面,Leave就是鼠標(biāo)離開了控件,那么這個(gè)效果要怎么實(shí)現(xiàn)呢?我直接給源碼吧
以Edit控件為列
頭文件中加入


 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
CPP中加入:
BEGIN_MESSAGE_MAP(CEditEx, CEdit)
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave) 
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
注:ON_WM_MOUSEMOVE() 可以用類向?qū)砑?不過OnMouseLeave,和OnMouseHover是需要手動(dòng)添加的


然后再CPP中定義:
void CEditEx::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bHover)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bHover= _TrackMouseEvent(&tme);// m_bHover: BOOL型成員變量

}


CEdit::OnMouseMove(nFlags, point);
}
LRESULT CEditEx::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_bHover = false;
//
做相應(yīng)的操作
//
return 0;
}
LRESULT CEditEx::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
//
做相應(yīng)的操作
//
return 0;
}
絕大多數(shù)控件可以用這種方法,不過某些控件,可能需要你在OnMouseMove里面完全模擬出 Hover和Leave的情況,比如程序里面的TabCtrl...




4).我把以前我看過的帖子整理了下供大家學(xué)習(xí)參考(由于時(shí)間久了,很多帖子都忘記了):


進(jìn)度條自繪:http://www.codeproject.com/KB/miscctrl/cprogressctrlst.aspx(有項(xiàng)目源碼)


透明控件(多個(gè)控件)實(shí)現(xiàn):http://www.codeguru.com/cpp/controls/buttonctrl/advancedbuttons/article.php/c15603/General-Solution-for-a-Transparent-Control.htm(有項(xiàng)目源碼)


透明窗體:http://msdn.microsoft.com/en-us/library/ms997507 (Menu、窗體、Combobox 都可以參考這種方式實(shí)現(xiàn)任意透明度,我也是參考這種方法)


不規(guī)則按鈕實(shí)現(xiàn):http://www.codeguru.com/cpp/controls/buttonctrl/non-rectangularbuttons/article.php/c2085/Universal-Button---beauty-of-HRGN.htm


自繪按鈕2篇帖子:
http://www.vckbase.com/document/viewdoc/?id=551
http://www.vckbase.com/document/viewdoc/?id=561


Custom draw 和 Owner draw 的區(qū)別(是全英文,不過要是讀懂了對(duì)你自繪的思想很有幫助,有時(shí)間幫大家翻譯下):
http://blog.csdn.net/xiexievv/article/details/6279219


WM_DRAWITEM與DrawItem()的討論,對(duì)控件自繪很有幫助:
http://blog.csdn.net/xiexievv/article/details/6259194


下面這幾篇帖子仔細(xì)閱讀定有意想不到的收獲,不只是自繪控件,完全可以讓我們對(duì)MFC的整體認(rèn)識(shí)都會(huì)提升1個(gè)等級(jí)
MFC中OnDraw與OnPaint的區(qū)別:
http://blog.csdn.net/xiexievv/article/details/6271153


深度剖析消息反射機(jī)制:
http://blog.csdn.net/xiexievv/article/details/6282205


PreTranslateMessage和TranslateMessage區(qū)別:
http://blog.csdn.net/xiexievv/article/details/6299027


WindowProc和DefWindowProc的區(qū)別:
http://blog.csdn.net/xiexievv/article/details/6299016


CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的區(qū)別:
http://blog.csdn.net/xiexievv/article/details/6233423


同時(shí)推薦幾個(gè)很好的學(xué)習(xí)網(wǎng)站: 
http://www.codeproject.com(英文)
http://www.codeguru.com(英文)
http://www.pudn.com
http://www.vckbase.com/document/index.asp
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PC端鼠標(biāo)vs手機(jī)端手勢(shì):兩種交互有何異同點(diǎn)?
讓設(shè)計(jì)跟著指尖走-觸控設(shè)備上的互動(dòng)效果
用Delphi做一個(gè)組件探測(cè)器:WidgetSpy
漂亮Edit控件的重載
VS2010/MFC編程入門之七(對(duì)話框:為對(duì)話框添加控件)
CEdit響應(yīng)鼠標(biāo)雙擊事件
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服