vc2005
下高階彩色按鈕的實現
moakap 2007-9-3
所謂高階彩色按鈕,就是按鈕在滑鼠單擊、選中等操作中,呈現不同的顏色,使應用程式更加美觀。
我們首先定義按鈕的幾種狀態,根據需要,又下面幾種狀態: 0.
預設狀態 1.
焦點狀態——滑鼠放置在按鈕上時按鈕的狀態 2.
選中狀態——按鈕被按下時的狀態
要製作高階彩色按鈕,必須對
cbutton
按鈕類進行過載。下面詳細介紹高階彩色按鈕的實現過程: 1、
根據應用需要使用普通按鈕設計程式的介面。 2、
將按鈕的
owner draw
屬性設定為
true。
3、新建
cadvbutton
類,其父類為
cbutton。
4、在cadvbutton
類中新增下列私有成員變數: 1)
int m_state
按鈕的狀態標誌,分別取0,
1,2
2)cpoint m_point
點變數,用來捕捉滑鼠的當前位置 3)
int m_istimeron
定時器標示,指示定時器狀態 5、
設定滑鼠單擊(按鈕被按下)時的操作 利用
mfc classwizard
嚮導為cadvbutton
類新增wm_lbuttondown
訊息的響應函式,在該函式中得到當前滑鼠的位置和按鈕的客戶區域
,當滑鼠位置在按鈕客戶區域是,設定為選中狀態。
void
cadvbutton::onlbuttondown(uint nflags, cpoint point)
cbutton::onlbuttondown(nflags, point);
} 6、
設定鬆開滑鼠左鍵(按鈕彈起)的操作 利用
mfc classwizard
嚮導為cadvbutton
類新增wm_lbuttonup
訊息的響應函式。當滑鼠位置在按鈕客戶區域時,將按鈕狀態設定成焦點狀態。
void
cadvbutton::onlbuttonup(uint nflags, cpoint point)
cbutton::onlbuttonup(nflags, point);
} 7、
設定滑鼠移動過按鈕的操作 利用
mfc classwizard
嚮導為cadvbutton
類新增wm_mousemove
訊息的響應函式。在函式中獲得按鈕的客戶區域和滑鼠當前位置。當滑鼠位置在按鈕客戶區域時,將按鈕狀態設定成焦點狀態。
void
cadvbutton::onmousemove(uint nflags, cpoint point)
cbutton::onmousemove(nflags, point);
} 利用
mfc classwizard
嚮導為cadvbutton
類新增wm_timer
訊息的響應函式。在函式
中檢測滑鼠的當前位位 置,根據當前位置設定按鈕的狀態。
void
cadvbutton::ontimer(uint_ptr nidevent)
} else
killtimer(nidevent);
m_istimeron = false;
}
cbutton::ontimer(nidevent);
} 8、
為cadvbutton
類新增drawitem
函式,在函式中對按鈕客戶區域進行繪製。
void
cadvbutton::drawitem(lpdrawitemstruct lpdrawitemstruct)
char *pcaption = new
char[maxcaption];
int ilen = getwindowtext((lptstr)pcaption,maxcaption);//
得到按鈕標題
pdc->setbkmode(transparent);//
設定背景模式為透明
pdc->settextcolor(textcolor);//
設定按鈕字型顏色
pdc->drawtext((lptstr)pcaption,ilen,&m_clientrect,dt_singleline|dt_center|dt_vcenter);//
繪製標題}
9、在對話方塊中顯示按鈕
在應用程式對話方塊檔案中包含
cadvbutton
類,#include 「cadvbutton.h」
直接將對話方塊中的按鈕變數型別設定成
cadvbutton
型別即可。
我們還可以根據不同功能設定不同顏色系列的按鈕。
VC2005逃跑按鈕實現
1.新建乙個基於對話方塊的mfc應用程式。刪除對話方塊中的預設按鈕。拖過來兩個按鈕。2.新建乙個類,繼承cbutton vc6是使用類嚮導。vc8是開啟類檢視,右擊新增類。3.為兩個按鈕關聯變數 開啟類檢視,右擊 newbtn 類,開啟屬性面板,可以為 newbtn 類新增訊息響應函式。直接在 中為...
關於VC2005的學習感言
這段時間一直都在用vc2005這個工具進行相關的mfc開發。可以說現在還是屬於初學者,還是處於借鑑別人的 然後再整合到自己的程式中,這樣的一種補牆式的開發模式,沒辦法,剛開始嘛!不過現在還是有些心得的 主要是體現在開發的模式上,再者就是開發的思想上 其實現在發現很多的開發流程和思想都是一致的 無論是...
關於VC 2005 不能除錯的問題
前一段時間用vc2005就發現有個程式突然不能除錯了,驚訝至極。然後也不知道什麼原因就又能除錯了。更加驚訝。這一靈異現象是我對vc2005的印象大打折扣。今天vc2005無法除錯的現象再次神奇出現。我重建工程了幾次,也沒見效,要不是光碟機不好使,我都要重灌系統了。就在我快要崩潰的時候,在網上找到了一...