国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
自繪按鈕中注意的問題(DrawItem)

今天從CButton派生了一個類CUIButton,主要用于自繪,按照基本的流程,重寫DrawItem方法。

步驟如下:點擊CUIButton按鈕,在右鍵彈出菜單中選擇“add windows message Handler",

找到DrawItem,為其添加消息映射,添加的代碼如下:

void CUIButton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)

結果在使用到CUIButton的地方用SubClassDlgItem就會出問題。

后來調試發(fā)現(xiàn),不應該按照上面的添加此消息的映射,而是為CUIButton類重寫DrawItem函數(shù),添

加方法:

在類CUIButton右鍵,在彈出菜單中選擇"Add Virtual Function",彈出的添加虛函數(shù)框中選

擇"DrawItem",向導為我們生成的代碼如下:

void CUIButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

在這里添加所需的自繪代碼就ok了

附: how to implement control to self-draw

1、從CButton類派生自己的CUIControl類

2、借助于MFC向導生成工具,為期添加虛函數(shù)DrawItem()和OnEraseBkgnd()。

     注意:DrawItem()是控件重定義的函數(shù),不是OnDrawItem()。

3、在DrawItem()中近控件的自繪處理,這里給出一個實例代碼,用于一個自定義Button,在

     Button上面繪圖:

  void CUIButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default

//CButton::OnDrawItem(nIDCtl, lpDrawItemStruct);

 int nCxIcon = ::GetSystemMetrics(SM_CXICON);
int nCyIcon = ::GetSystemMetrics(SM_CYICON);
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC,nCxIcon,nCyIcon);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap = (CBitmap *)dcMem.SelectObject(bitmap);
ASSERT(pOldBitmap);

 HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
ASSERT(hIcon);

 CRect rcClient;
GetClientRect(&rcClient); // get the button's rect
dcMem.StretchBlt(0,0,nCxIcon,nCyIcon,pDC,2,2,rcClient.Width() - CX_SHADOW - 4, 
rcClient.Height() - CY_SHADOW - 4,SRCCOPY);

dcMem.DrawIcon(0,0,hIcon);

 // draw border around icon
CPen pen;
pen.CreateStockObject(BLACK_PEN);
ASSERT(pDC != NULL);
CPen* pPenOld = pDC->SelectObject(&pen);
pDC->Rectangle(0, 0, rcClient.Width()-CX_SHADOW, rcClient.Height()-CY_SHADOW);
if (pPenOld)
pDC->SelectObject(pPenOld);

 //pDC->StretchBlt(0,0,80,80,&dcMem,0,0,nCxIcon,nCyIcon,SRCCOPY);
pDC->StretchBlt(2,2,rcClient.Width() - CX_SHADOW - 4,rcClient.Height() - CY_SHADOW - 4,&dcMem,0,0,nCxIcon,nCyIcon,SRCCOPY);

}

4、為OnEraseBkGround()添加代碼。這里很簡單,直接返回True即可:

   BOOL CUIButton::OnEraseBkgnd(CDC* pDC) 
{
// TODO: Add your message handler code here and/or call default
return TRUE;
//return CButton::OnEraseBkgnd(pDC);
}

5、在你的對話框中使用CUIButton按鈕,首先在dialog資源中添加一個按鈕(CButton)。

6、在對話框類的頭文件中定義一個成員CUIButton m_CtlUIBtn;注意變量的類型是CUIButton而

    不是CButton

7 、在OnInitDialog中用SubClass技術:

     BOOL CAboutDlg::OnInitDialog() 
{
CDialog::OnInitDialog(); 
m_CtlUIButton.SubclassDlgItem(IDC_UI_BUTTON,this);
return TRUE;  // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

that is OK!

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
如何給button等按鈕和控件加背景色或者圖片?還有dialog如何增加背景色和圖片背景,...
按鈕加載位圖
用VC++實現(xiàn)自繪按鈕控制
白喬原創(chuàng):VC之美化界面篇
設置listctrl行高
VC改變對話框按鈕字體顏色和背景的解決方案
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服