.**件
#pragma once
class cmybuttonex
: public cwindowimpl, public cownerdraw
begin_msg_map(cmybuttonex)
chain_msg_map_alt(cownerdraw, 1)
default_reflection_handler()
end_msg_map()
void drawitem(lpdrawitemstruct lpdis);
private:
cstring m_stext2;
};
cpp檔案
#include "stdafx.h"
#include "mybuttonex.h"
extern cfont m_deffont; //預設字型
extern cfont m_fontbig; //大字型
cmybuttonex::cmybuttonex()
cmybuttonex::~cmybuttonex()
void cmybuttonex::drawitem(lpdrawitemstruct lpdis)
; ::getwindowtext(m_hwnd, sztext, max_path);
if (wcslen(sztext) > 0)
else
dc.selectfont(holdfont);
dc.settextcolor(crlold);
dc.setbkmode(noldmode);
}if (holdpen)
dc.selectpen(holdpen);
if (holdbrush)
dc.selectbrush(holdbrush);
}
建立font
logfont logfont;
memset(&logfont, 0, sizeof(logfont));
lstrcpy(logfont.lffacename, _t("宋體")/*_t("tahoma")*/);
//預設字型
logfont.lfweight = fw_normal;
logfont.lfheight = -12;
m_deffont.createfontindirect(&logfont);
//大號字型
logfont.lfweight = fw_normal;
logfont.lfheight = -16;
m_fontbig.createfontindirect(&logfont);
如果自繪失敗的話,請按如下步驟檢查一遍
1.新增自繪控制項類,使其派生自cownerdraw,例如
class mybuttonex:public cwindowimpl
,public cownerdraw
2.在自繪控制項類中新增訊息對映chain_msg_map_alt,例如:chain_msg_map_alt(cownerdraw, 1)
3.end_msg_map之前要新增default_reflection_handler()
4.重寫void drawitem(lpdrawitemstruct lpds)等函式,在此函式中完成自繪工作
5.修改自繪控制項類的視窗樣式,新增ownerdraw屬性,例如bs_ownerdraw
6.不要使用ddx_control關聯控制項變數與控制項id!而是使用subclasswindow來實現,否則看不出自繪效果!(這一點浪費了我半小時找原因)
引自:
MFC自繪Button按鈕分析和實現
對於按壓式的button按鈕,wm ctlcolor無法完成按鈕控制項的背景顏色和字型顏色修改,若想要完成外觀定製需要新增wm drawitem訊息或者重寫cbutton類中的drawitem函式完成按鈕外觀修改,下面逐一介紹。自繪製知識基礎 自繪製需要的兩個基礎步驟 1.控制項型別設定為 bs o...
Button 按鈕的重繪
using system using system.collections.generic using system.componentmodel using system.drawing using system.data using system.linq using system.text u...
WTL介面自繪系列 預備
本文不會闡述技術上的細節,旨在提供巨集觀的思路。想學windows介面自繪,那麼你要對常用的控制項的用法有所了解,最好有實踐經歷。另外,對gdi gdi 的學習也是必不可少的,但無需通學。常用的一些gdi函式 用法及gdi技術中的常見名詞 概念弄懂即可。wtl是windows平台下的乙個庫,主要用於...