wtl自繪,按鈕Button

2021-09-30 20:29:15 字數 2002 閱讀 3773

.**件

#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平台下的乙個庫,主要用於...