示例代碼運行效果圖
在vc6下面怎樣實現具有xp風格的按鈕?我這裡介紹一種簡單的方法。 我們需要用到兩個類,一個是CButtonST,另一個是CWinXpButtonST.這兩個類一個是按鈕類,另一個是Xp風格按鈕類,大家可以從我的例子原代碼中得到相關的4個文件(BtnST.h、BtnST.cpp、WinXPButtonST.h、WinXPButtonST.cpp)。
下面開始制作這個示例程序
1、使用vc的向導制作一個工程dialog工程,起名為:XPDlg。並接受一切默認值。
2、將我上面提到的4個文件copy到你的工程所在的目錄。打開FileView將4個文件加入到你的工程中去。查看ClassView增加了2個類,CButtonSt 和CWinXpButtonST。
3、在CAboutDlg類中加入#include "WinXPButtonSt.h"並加入成員 CWinXPButtonST m_OK;
4、使用MFC 類向導在類CAboutDlg中,加入2個函數 ON_WM_CTLCOLOR ON_WN_INITDIALOG注意這個地方是CAboutDlg類,而不是默認的CXPDlgDlg類, 如下圖:
5、在OnInitDialog中加入如下代碼:
m_OK.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); m_OK.SetBkColor(RGB(162,189,252)); m_OK.SetRounded(TRUE); m_OK.SetTooltipText(_T("關閉"));6、在CAboutDlg::OnCtlColor中加入如下代碼:
if(nCtlColor==CTLCOLOR_LISTBOX) { //pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(233,233,220)); HBRUSH b=CreateSolidBrush(RGB(233,233,220)); return b; } else if(nCtlColor==CTLCOLOR_SCROLLBAR) { //pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(233,233,220)); HBRUSH b=CreateSolidBrush(RGB(233,233,220)); return b; } else if(nCtlColor==CTLCOLOR_EDIT) { //pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(233,233,220)); HBRUSH b=CreateSolidBrush(RGB(233,233,220)); return b; } else if(nCtlColor==CTLCOLOR_STATIC) { pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(160,180,220)); HBRUSH b=CreateSolidBrush(RGB(160,180,220)); return b; } else if(nCtlColor==CTLCOLOR_DLG) { pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(160,180,220)); HBRUSH b=CreateSolidBrush(RGB(160,180,220)); return b; }7、在CAboutDlg::DoDataExchange中加入如下代碼:
DDX_Control(pDX, IDOK, m_OK);8、打開Dialog對話框IDD_XPDLG_DIALOG 並加入一個Button,雙擊這個Button,生成該按鈕單擊處理函數,在其中加入
CAboutDlg Dlg; Dlg.DoModal();9、運行Ctrl+F7
這個程序所用到的類,是一個意大利人寫的,還有其他不少功能,大家可以參照說明來使用,順便提一句,這個類不能用作商業用途,如果需要的話,需要給作者支付5$.
本文示例代碼或素材下載