新手请教,对话框上各个Static Text控件如何分别设置字体? 如体 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.codeproject.com/staticctrl/clabel.asp 好像是用dialog的字体的,统一设置的。可以用edit,然后调成read only 以前是用BCB的,哪里设置非常方便灵活。谁知都VC2005了,还是那么不通用! class CTempDlg : public CDialog{public: CFont m_font;....}BOOL CTempDlg::OnInitDialog(){..... m_font.CreatePointFont (120,"Verdana");//在这里设置字体 m_static1.SetFont (&m_font);.....} 如果照snowlight81(snow_light) 说的去做,各个Static Text的字体大小不一样,设定界面又都乱了套,还得手动编写代码,真是麻烦!有没有更好的方法? 自己扩展个STATIC类重载DRAWITEM把字体设置做成成员函数,一个类统统搞定 #if !defined(AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_)#define AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// RxStatic.h : header file///////////////////////////////////////////////////////////////////////////////// CRxStatic windowclass CRxStatic : public CStatic{#define CHINESE GB2312_CHARSET#define ENGLISH DEFAULT_CHARSET #define CLARITY -1 // Constructionpublic: CRxStatic();// Attributespublic:// Operationspublic:// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CRxStatic) //}}AFX_VIRTUAL// Implementationpublic: void SetShadow(bool bShadow=true,COLORREF cShadowColor=RGB(244,0,0),int nInterval=2,int nAngle=30); void SetFontStyle(bool bItalic=false,bool bBold=false,bool bUnderline=false); void SetBkColor(COLORREF dwColor=CLARITY); void SetTextColor(COLORREF dwColor); void SetFontSize(int nSize); void SetFont(CString sFontName,DWORD lpLanguage=CHINESE); virtual ~CRxStatic(); // Generated message map functionsprotected: //{{AFX_MSG(CRxStatic) afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP()private: CString m_lpFont; //字体名称 int m_nSize; //字体大小 COLORREF m_FontColor; //前景色 COLORREF m_BkColor; //背景色 bool m_bItalic; //是否为斜体 bool m_bBold; //是否为粗体 bool m_bUnderline; //是否有下划线 DWORD m_dwCharacter; bool m_bIsShadow; COLORREF m_ShadowColor; int m_nInterval; int m_nAngle;};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_) // RxStatic.cpp : implementation file//#include "stdafx.h"#include "cgzx.h"#include "RxStatic.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CRxStaticCRxStatic::CRxStatic(){ m_lpFont="宋体"; m_nSize=9; m_FontColor=RGB(0,0,0); m_BkColor=CLARITY; m_bItalic=false; m_bBold=false; m_bUnderline=false; m_dwCharacter=CHINESE; m_bIsShadow=false; m_ShadowColor=RGB(32,32,32); m_nInterval=3; m_nAngle=45;}CRxStatic::~CRxStatic(){}BEGIN_MESSAGE_MAP(CRxStatic, CStatic) //{{AFX_MSG_MAP(CRxStatic) ON_WM_PAINT() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CRxStatic message handlersvoid CRxStatic::OnPaint() { CPaintDC dc(this); // device context for painting CFont font; int nBold; if(m_bBold==true) nBold=FW_BOLD; else nBold=FW_NORMAL; LOGFONT lgFont; lgFont.lfCharSet=m_dwCharacter; lgFont.lfClipPrecision=0; lgFont.lfEscapement=0; strcpy(lgFont.lfFaceName,m_lpFont); lgFont.lfHeight=m_nSize+3; lgFont.lfItalic=m_bItalic; lgFont.lfOrientation=0; lgFont.lfOutPrecision=0; lgFont.lfPitchAndFamily=2; lgFont.lfQuality=0; lgFont.lfStrikeOut=0; lgFont.lfUnderline=m_bUnderline; lgFont.lfWeight=nBold; lgFont.lfWidth=0; font.CreateFontIndirect(&lgFont); CFont* pFont; pFont=dc.SelectObject(&font); CString sCaption; CRect rcWnd; this->GetClientRect(&rcWnd); this->GetWindowText(sCaption); DWORD dwStyle,dwDCStyle; dwStyle=this->GetStyle(); if(dwStyle&SS_CENTER==SS_CENTER )//居中显示 dwDCStyle=DT_CENTER; if(dwStyle&SS_SIMPLE ==SS_SIMPLE) //单行 dwDCStyle=dwDCStyle|DT_SINGLELINE|DT_VCENTER; if(m_bIsShadow==true) //阴影 { //根据角度计算出阴影位置 float fx=cos(m_nAngle)*m_nInterval; float fy=sin(m_nAngle)*m_nInterval; CRect rcShadow; rcShadow=rcWnd; rcShadow.left=(float)rcShadow.left+fx; rcShadow.right=(float)rcShadow.right+fx; rcShadow.top=(float)rcShadow.top+fy; rcShadow.bottom=(float)rcShadow.bottom +fy; dc.SetBkMode(TRANSPARENT); dc.SetTextColor(m_ShadowColor); dc.DrawText(sCaption,rcShadow,dwDCStyle); } dc.SetBkMode(OPAQUE); if(m_BkColor==CLARITY) dc.SetBkMode(TRANSPARENT); else dc.SetBkColor(m_BkColor); dc.SetTextColor(m_FontColor); dc.DrawText(sCaption,rcWnd,dwDCStyle); font.DeleteObject(); dc.SelectObject(pFont); // Do not call CStatic::OnPaint() for painting messages}void CRxStatic::SetFont(CString sFontName,DWORD lpLanguage){ m_lpFont=sFontName; m_dwCharacter=lpLanguage;}void CRxStatic::SetFontSize(int nSize){ m_nSize=nSize;}void CRxStatic::SetTextColor(COLORREF dwColor){ m_FontColor=dwColor;}void CRxStatic::SetBkColor(COLORREF dwColor){ m_BkColor=dwColor;}void CRxStatic::SetFontStyle(bool bItalic,bool bBold,bool bUnderline){ m_bItalic=bItalic; m_bBold=bBold; m_bUnderline=bUnderline;}void CRxStatic::SetShadow(bool bShadow,COLORREF cShadowColor,int nInterval,int nAngle){ m_bIsShadow=bShadow; m_ShadowColor=cShadowColor; m_nInterval=nInterval; m_nAngle=nAngle;} 腐蚀膨化图像以得到十字叉(急) 关于从内存映射文件中读取数据的问题 奇怪的编译问题! 录制PPLive的播放内容 三个COM组件编程的特急问题。请教高手!急!急!急!急!急!(高分) 怎样得到当前执行程序的路径?? 那位仁兄能帮我翻译下这行代码的意思,不胜感激 刚完成一个扑克牌游戏,欢迎各位网友指正 学习汇编怎么入手? 如何拼写检查 对一文件加密后生成新文件给加图标怎么操作呢? 关于两个数组比较的问题
可以用edit,然后调成read only
{
public:
CFont m_font;....
}BOOL CTempDlg::OnInitDialog()
{
..... m_font.CreatePointFont (120,"Verdana");//在这里设置字体
m_static1.SetFont (&m_font);.....
}
重载DRAWITEM
把字体设置做成成员函数,一个类统统搞定
#define AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// RxStatic.h : header file
///////////////////////////////////////////////////////////////////////////////
// CRxStatic windowclass CRxStatic : public CStatic
{
#define CHINESE GB2312_CHARSET
#define ENGLISH DEFAULT_CHARSET
#define CLARITY -1 // Construction
public:
CRxStatic();// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRxStatic)
//}}AFX_VIRTUAL// Implementation
public:
void SetShadow(bool bShadow=true,COLORREF cShadowColor=RGB(244,0,0),int nInterval=2,int nAngle=30);
void SetFontStyle(bool bItalic=false,bool bBold=false,bool bUnderline=false);
void SetBkColor(COLORREF dwColor=CLARITY);
void SetTextColor(COLORREF dwColor);
void SetFontSize(int nSize);
void SetFont(CString sFontName,DWORD lpLanguage=CHINESE);
virtual ~CRxStatic(); // Generated message map functions
protected:
//{{AFX_MSG(CRxStatic)
afx_msg void OnPaint();
//}}AFX_MSG DECLARE_MESSAGE_MAP()
private:
CString m_lpFont; //字体名称
int m_nSize; //字体大小
COLORREF m_FontColor; //前景色
COLORREF m_BkColor; //背景色
bool m_bItalic; //是否为斜体
bool m_bBold; //是否为粗体
bool m_bUnderline; //是否有下划线
DWORD m_dwCharacter;
bool m_bIsShadow;
COLORREF m_ShadowColor;
int m_nInterval;
int m_nAngle;};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_RXSTATIC_H__134230C6_AAD7_4461_B1FE_2A796909C386__INCLUDED_)
//#include "stdafx.h"
#include "cgzx.h"
#include "RxStatic.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CRxStaticCRxStatic::CRxStatic()
{
m_lpFont="宋体";
m_nSize=9;
m_FontColor=RGB(0,0,0);
m_BkColor=CLARITY;
m_bItalic=false;
m_bBold=false;
m_bUnderline=false;
m_dwCharacter=CHINESE;
m_bIsShadow=false;
m_ShadowColor=RGB(32,32,32);
m_nInterval=3;
m_nAngle=45;}CRxStatic::~CRxStatic()
{
}
BEGIN_MESSAGE_MAP(CRxStatic, CStatic)
//{{AFX_MSG_MAP(CRxStatic)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CRxStatic message handlersvoid CRxStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CFont font;
int nBold;
if(m_bBold==true)
nBold=FW_BOLD;
else
nBold=FW_NORMAL;
LOGFONT lgFont;
lgFont.lfCharSet=m_dwCharacter;
lgFont.lfClipPrecision=0;
lgFont.lfEscapement=0;
strcpy(lgFont.lfFaceName,m_lpFont);
lgFont.lfHeight=m_nSize+3;
lgFont.lfItalic=m_bItalic;
lgFont.lfOrientation=0;
lgFont.lfOutPrecision=0;
lgFont.lfPitchAndFamily=2;
lgFont.lfQuality=0;
lgFont.lfStrikeOut=0;
lgFont.lfUnderline=m_bUnderline;
lgFont.lfWeight=nBold;
lgFont.lfWidth=0;
font.CreateFontIndirect(&lgFont);
CFont* pFont;
pFont=dc.SelectObject(&font);
CString sCaption;
CRect rcWnd;
this->GetClientRect(&rcWnd);
this->GetWindowText(sCaption);
DWORD dwStyle,dwDCStyle;
dwStyle=this->GetStyle();
if(dwStyle&SS_CENTER==SS_CENTER )//居中显示
dwDCStyle=DT_CENTER;
if(dwStyle&SS_SIMPLE ==SS_SIMPLE) //单行
dwDCStyle=dwDCStyle|DT_SINGLELINE|DT_VCENTER;
if(m_bIsShadow==true) //阴影
{
//根据角度计算出阴影位置
float fx=cos(m_nAngle)*m_nInterval;
float fy=sin(m_nAngle)*m_nInterval;
CRect rcShadow;
rcShadow=rcWnd;
rcShadow.left=(float)rcShadow.left+fx;
rcShadow.right=(float)rcShadow.right+fx;
rcShadow.top=(float)rcShadow.top+fy;
rcShadow.bottom=(float)rcShadow.bottom +fy;
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(m_ShadowColor);
dc.DrawText(sCaption,rcShadow,dwDCStyle);
}
dc.SetBkMode(OPAQUE);
if(m_BkColor==CLARITY)
dc.SetBkMode(TRANSPARENT);
else
dc.SetBkColor(m_BkColor);
dc.SetTextColor(m_FontColor);
dc.DrawText(sCaption,rcWnd,dwDCStyle);
font.DeleteObject();
dc.SelectObject(pFont);
// Do not call CStatic::OnPaint() for painting messages
}void CRxStatic::SetFont(CString sFontName,DWORD lpLanguage)
{
m_lpFont=sFontName;
m_dwCharacter=lpLanguage;
}void CRxStatic::SetFontSize(int nSize)
{
m_nSize=nSize;
}void CRxStatic::SetTextColor(COLORREF dwColor)
{
m_FontColor=dwColor;
}void CRxStatic::SetBkColor(COLORREF dwColor)
{
m_BkColor=dwColor;
}void CRxStatic::SetFontStyle(bool bItalic,bool bBold,bool bUnderline)
{
m_bItalic=bItalic;
m_bBold=bBold;
m_bUnderline=bUnderline;
}void CRxStatic::SetShadow(bool bShadow,COLORREF cShadowColor,int nInterval,int nAngle)
{
m_bIsShadow=bShadow;
m_ShadowColor=cShadowColor;
m_nInterval=nInterval;
m_nAngle=nAngle;
}