資源簡介
MFC程序, 通過windows API 控制計算機,關機, 注銷, 重啟
代碼片段和文件信息
//?MyButton.cpp?:?implementation?file
//
#include?“stdafx.h“
#include?“RESTART.h“
#include?“MyButton.h“
CMyButton::CMyButton(void)
{
??m_DownColor?=?m_UpColor?=?RGB(000);//初始化設為黑色
}
CMyButton::~CMyButton(void)
{
}
?
BOOL?CMyButton::Attach(const?UINT?nIDCWnd*?pParent)
{
????if?(!SubclassDlgItem(nID?pParent))
????return?FALSE;
????return?TRUE;
}
void?CMyButton::SetDownColor(COLORREFcolor)
{????//CMyButton類的函數
????m_DownColor?=?color;
}
void?CMyButton::SetUpColor(COLORREF?color)
{
????m_UpColor?=?color;
}
void?CMyButton::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)
{
???CDC?dc;
???dc.Attach(lpDrawItemStruct->hDC);//得到繪制的設備環境CDC
????VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);
???//得當Button上文字這里的步驟是:1先得到在資源里編輯的按鈕的文字
???//然后將此文字重新繪制到按鈕上
????//同時將此文字的背景色設為透明這樣按鈕上僅會顯示文字
????const?int?bufSize?=?512;
????TCHAR?buffer[bufSize];
????GetWindowText(buffer?bufSize);
???int?size=strlen(buffer);//得到長度
???DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);//繪制文字
???SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);//透明
???if?(lpDrawItemStruct->itemState&ODS_SELECTED)//當按下按鈕時的處理
???{////重繪整個控制
?????????CBrush?brush(m_DownColor);
??????????dc.FillRect(&(lpDrawItemStruct->rcItem)&brush);//利用畫刷brush,填充矩形框
?????????//因為這里進行了重繪所以文字也要重繪
?????????DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);
??????????SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);
????}
??else//當按鈕不操作或者彈起時
????{
???????????CBrush?brush(m_UpColor);
????????????dc.FillRect(&(lpDrawItemStruct->rcItem)&brush);//
????????????DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);
????????????SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);
?????}
????if?((lpDrawItemStruct->itemState&ODS_SELECTED)&&(lpDrawItemStruct->itemAction?&(ODA_SELECT|ODA_DRAWENTIRE)))
?????{//選中了本控件高亮邊框
???????????????COLORREF?fc=RGB(255-GetRValue(m_UpColor)255-GetGValue(m_UpColor)255-GetBValue(m_UpColor));
?????????????CBrush?brush(fc);
????????????dc.frameRect(&(lpDrawItemStruct->rcItem)&brush);//用畫刷brush,填充矩形邊框
???????}
?????if?(!(lpDrawItemStruct->itemState?&ODS_SELECTED)?&&(lpDrawItemStruct->itemAction?&?ODA_SELECT))
?????????{
??????????CBrush?brush(m_UpColor);?//控制的選中狀態結束去掉邊框
?????????dc.frameRect(&lpDrawItemStruct->rcItem&brush);//}
????????dc.Detach();
}
- 上一篇:在MFC中嵌入cef瀏覽器demo
- 下一篇:MFC modBus 讀寫串口
評論
共有 條評論