示例代碼運行效果圖
在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$.