打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mfc中字体设置详解

为了能选用不同的字体和大小来输出文本串,须使用作为GDI对象的 CFont类。Windows和常用的字处理软件(如Word)、绘图软件(如CorelDraw)等应用软件会提供多种与设备无关的字体,主要是 TrueType轮廓字体。 CFont类是CGDIObject的派生类:CObject CGDIObject CFont。只有一个缺省构造函数CFont( );CFont类中,必须用字体创建成员函数CreateFont[Indirect]CreatePointFont [Indirect]来初始化。

其中的CreatePointFont提供了创建字体的一种简单方法:
BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL );

参数nPointSize为字体的大小,以0.1点(像素/墨点/磅数)为单位,如汉字的字号与nPointSize值及磅数的对应关系见下表:

汉字字号

nPointSize

磅数

初号

小初

420

360

42

36

一号

小一

260

240

26

24

二号

小二

220

180

22

18

三号

小三

160

150

16

15

四号

小四

140

120

14

12

五号

小五

105

90

10.5

9

六号

小六

75

65

7.5

6.5

七号

八号

55

50

5.5

5

参数lpszFaceName为字体名称字符串的指针。

pDC非空,则系统会将设备单位点自动转换为pDC中的映射模式所指定的逻辑单位,如

CFont font;

font.CreatePointFont(160, '宋体');

注意:CFont类的这些逻辑字体创建函数,并不是从无到有创建一个新的GDI字体,而只是从GDI的物理字体库中选择与所设置参数最匹配的字体。为了方便用户选择各种字体参数,可使用字体公用对话框:

汉字的字号与磅数

字体公用对话框

使用字体公用对话框需要用到CFontDialog类。CFontDialog类的构造函数为

CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );

其中,lplfInitial为逻辑字体结构的指针(可用CFont的成员函数GetLogFont来获得,参见《Windows程序设计》),dwFlags为对话框的可选参数,CF_EFFECTS表示对话框中有删除线和下划线复选框与选择颜色的下拉式组合框,CF_SCREENFONTS则使得对话框中只列出系统支持的显示字体。CFontDialog类的常用成员函数有:

virtual int DoModal( ); //显示对话框,返回IDOKIDCANCEL

CString GetFaceName( ) const; //返回字体名称串

int GetSize( ) const; //返回所选择的字体大小,以0.1点为单位

COLORREF GetColor( ) const; //返回所选择的字体颜色常用的文本输出函数有TextOutDrawTextExtTextOut,它们都是CDC类的成员函数。下面只介绍最简单的TextOut

BOOL TextOut( int x, int y, const CString& str );

其中,xy为显示串的左上角坐标,str为要显示的文本串。如:

pDC->TextOut(10, 10, L'Test text');

还可以使用CDC类的成员函数SetTextColorSetBkColor来分别设置输出文本的前景色和背景色:(缺省的前景色为黑色,背景色空)

 

virtual COLORREF SetTextColor( COLORREF crColor );

virtual COLORREF SetBkColor( COLORREF crColor );

如: pDC->SetTextColor(RGB(0, 128, 0));pDC->TextOut(10, 30, L'Test text'); pDC->SetBkColor(RGB(0, 0, 128));pDC->TextOut(10, 50, L'Test text'); 创建名为FontMFC单文档应用程序,在视图类中添加若干字体参数类变量:

CFont font;

CString m_sFontName;

int m_iFontSize;

COLORREF m_colTextColor;

CString m_sStr;

 

并在构造函数中对它们进行初始化:

m_sFontName = L'宋体';

m_iFontSize = 120;

font.CreatePointFont(m_iFontSize, m_sFontName);

m_colTextColor = RGB(0,0,0);

m_sStr = L'Test text测试文本';

 

添加字体设置菜单项ID_FONT_SET及其响应函数,在里面打开公用字体对话框,将用户选择的字体参数保存到视图类的类变量中,创建新的字体对象,并调用重绘窗口函数:

void CFontView::OnFontSet() {

// TODO:在此添加命令处理程序代码

LOGFONT lf;

font.GetLogFont(&lf);

CFontDialog fontDlg(&lf);

fontDlg.m_cf.rgbColors = m_colTextColor;

if (fontDlg.DoModal() == IDOK)

{

m_sFontName = fontDlg.GetFaceName();

m_iFontSize = fontDlg.GetSize();

m_colTextColor = fontDlg.GetColor();

font.DeleteObject();

font.CreatePointFont(m_iFontSize, m_sFontName);

RedrawWindow();

}

}

创建文本串输入对话框的资源,添加对应的对话框类和编辑控件变量。添加字符串输入菜单项ID_STRING_INPUT及其响应函数,在里面打开输入对话框,将用户输入的字符串保存到视图类的对应类变量中:

void CFontView::OnStringInput() {

// TODO:在此添加命令处理程序代码

CInputDlg dlg;

dlg.m_sStr = m_sStr;

if (dlg.DoModal() == IDOK)

{

m_sStr = dlg.m_sStr;

RedrawWindow();

}

}

在视图类的OnDraw函数中,选入所设置的字体、设置文本颜色、输出用户的字符串:

void CFontView::OnDraw(CDC* pDC)

{

CFontDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc) return;

// TODO:在此处为本机数据添加绘制代码

pDC->SelectObject(&font);

pDC->SetTextColor(m_colTextColor);

pDC->TextOut(20, 20, m_sStr);

}

 

下面是该例程序的编写步骤框图:在建立项目 (Project)时,选择Siggle documentSDI单文档界面)或Multiple documentsMDI多文档界面,缺省)而不是Dialog based(基于对话框)的应用程序,并且选择缺省的Document/View architecture suport?(支持文档-视图体系)的复选框,建立支持文档/视图体系的项目。

应用程序框架会自动生成应用程序类C*App、文档类C*Doc、主框架窗口类CMainFrame、视图类C*View,对多文档界面还有子框架窗口类CChildFrame。在应用程序框架自动生成的C*Doc类的Serialize(系列化)成员函数中使用其输入参数--文档类CArchive的对象ar--来读写文件,读写方法似文件流操作。如

void CWaveDoc::Serialize(CArchive& ar) {

if (ar.IsStoring())

{

// TODO: add storing code here

//写文件 ... ... ar > id;

ar >> fileLen;

... ...

}

}

注意,用>输出或输入的为二进制数据;为了输出或输入字符串,可以用CArchive类的成员函数:void WriteString( LPCTSTR lpsz ); Bool ReadString(CString& rString );。如: char str[80]; sprintf(str, '%d(%XA1~%XFE):\r\n', a, c1, c1); ar.WriteString(str);

可将重要的读入数据作为文档类的类变量或数组,供视图类的代码访问和图形输出,也可供文档类自己在写入文件时使用。为了简化RIFF文件中的4字符标识的读写与比较,Windows SDK在多媒体头文件mmsystem.h中定义了类型FOURCCFour-Character Code四字符代码):

typedef DWORD FOURCC;

及其构造宏(用于将4个字符转换成一个FOURCC数据)

FOURCC mmioFOURCC(CHAR ch0, CHAR ch1, CHAR ch2, CHAR ch3);

其定义为MAKEFOURCC宏:

#define mmioFOURCC(ch0, ch1, ch2, ch3)  MAKEFOURCC(ch0, ch1, ch2, ch3);

MAKEFOURCC宏定义为:

#define MAKEFOURCC(ch0, ch1, ch2, ch3) \

((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1)

#define ID_RIFFmmioFOURCC('R', 'I', 'F', 'F')

#define ID_WAVEmmioFOURCC('W', 'A', 'V', 'E')

... ...

FOURCC id;

... ... ar >> id; if (id != ID_RIFF) { ... ...

}

... ...在文件读写过程中,如果出现读写错误或文件的格式与数据不对,可动态创建一个普通的(generic)文件异常类(CFileException)对象,作抛出(throw)处理。例如

if (id != ID_RIFF)

{

::MessageBox(NULL, L'Not RIFF format!', L'Error', MB_OK);

throw(new CFileException(CFileException:: genericException));

}

函数PlaySound可以播放系统声音、声音资源和声音文件,其函数原型为:

BOOL PlaySound(

LPCSTR pszSound,

HMODULE hmod,

DWORD fdwSound

);

其中参数

pszSound的含义与fdwSound的设置有关。

fdwSound标志设置为SND_ALIASSND_FILENAMESND_RESOURCE,则pszSound为系统事件的别名、文件名或资源ID

fdwSound标志没有设置这些值,则先在注册表或win.ini中寻找串为pszSound的声音,若没有,则视其为文件名

pszSound=NULL,则停止播放正在播放的任何声音(同sndPlaySound)。若要停止非波形格式的声音,必须设置fdwSound的标志SND_PURGE

参数hmod

若设置了fdwSound的标志SND_RESOURCE,则hmod为包含pszSound所指定资源的可执行文件的句柄

若没有设置fdwSound的标志SND_RESOURCE,则hmod必须为NULL

fdwSound为标志参数,可以取下列值:

PlaySound函数中的fdwSound参数的值 fdwSound对应数值含义 SND_ASYNC 0x01异步播放,调用后立即返回(最常用) SND_LOOP 0x08循环播放,必须与SND_ASYNC标志同用 SND_MEMORY 0x04 lpszSound指向内存中波形声音映像(可以动态生产声音) SND_NODEFAULT 0x02 找不到指定声音时,不播放缺省的声音 SND_NOSTOP 0x10如果有声音正在播放,则不播放指定的声音而直接返回 SND_SYNC 0x00同步播放,直到声音播完后调用才返回(缺省值) SND_NOWAIT 0x002000若设备忙,则不等待(不播放声音,立即返回) SND_ ALIAS 0x010000 pszSound为注册项的别名 SND_ ALIAS_ID 0x110000 别名是一个预定义的ID SND_ FILENAME 0x020000 pszSound为文件名 SND_ RESOURCE 0x040004 pszSound为资源名或原子(atom) SND_ PURGE 0x40清除任务的非静止事件 SND_ APPLICATION 0x80使用应用程序指定关联程序来播放声音例如:

PlaySound('c:\\sounds\\sample.wav', NULL, SND_ASYNC); PlaySound(ar.GetFile()->GetFilePath(), NULL, SND_ASYNC);

为了使包含PlaySound的程序能够编译通过,必须包含多媒体头文件:

#include

并在项目中添加多媒体链接库:选'项目\*属性'(其中*号表示项目名)菜单项或按Alt+F7组合键,弹出'*属性页'对话框。在该其左上角的'配置'栏的下拉式列表中,选择'所有配置'项。在其左边的'配置'目录栏中,选中'配置属性\链接器\输入'项,在右边顶行的'附加依赖项'栏中键入 winmm.lib。先按'应用'钮,再按'确定'钮关闭对话框。绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw中进行:

void CWaveView::OnDraw(CDC* pDC)

{

CWaveDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

}

在绘图前,必须先访问文档数据、得到客户区大小、设置绘图颜色,然后再根据文档数据来绘制图形。可通过在OnDraw函数中自动生成的代码所得到的文档指针pDoc来访问文档类对象中的各种变量和数组,并根据这些数据来绘图。如

CWaveDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

... ...

for(i = 0; in; i++)

{

x = (int)(i * dx + 0.5);

y = h0 - (int)(pDoc->d[i] * dy + 0.5);

if(i == 0) pDC->MoveTo(x, y);

else pDC->LineTo(x, y);

}

绘图一般都是在视图窗口的客户区进行,而客户区的大小在运行时可由用户改变,为了使绘制的图形能随窗口大小自动改变,必须先得到当前客户区大小的数据(宽 w和高h)。获取客户区大小的方法有两种:使用类向导ClassWizard,在视图类中添加WM_SIZE消息的响应函数OnSize。该函数在窗口第一次显示或窗口大小被改变时会被 Windows系统调用。其输入参数中的cxcy就是客户区大小的宽和高,可将他们赋值给类变量(如wh)供绘图时使用。如

void CClassView::OnSize(UINT nType, int cx, int cy)

{

w = cx; h = cy;

}

 

可在绘图前,定义一个矩形变量crect,然后再调用函数GetClientRect得到当前客户区矩形的数据,其中的右(right)与底 (bottom)就是客户区的宽与高(其左left与顶top都为0,右right = 客户区的宽、底bottom =客户区的高),如:

RECT crect;

GetClientRect(&crect);

int w = crect.right, h = crect.bottom;

其中,表示矩形的结构RECT的定义为(windef.h)

 

typedef struct _RECT {

LONG left;

LONG top;

LONG right;

LONG bottom;

} RECT;

 

其对应的MFC类为CRect Windows中的颜色一般用4个字节表示(4B = 32b = 0BGR[高位在前] = RGB0[低位在前]),定义了一个专门表示颜色索引值的变量类型COLORREF(windef.h)

typedef DWORD COLORREF;

及由红绿蓝三原色构造颜色值的宏RGB(wingdi.h)

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))Windows中,像素(pixel)的颜色是直接由设备上下文类CDC的成员函数SetPixel来设置的,该函数的原型为:

COLORREF SetPixel( int x, int y, COLORREF crColor );

其中,xy分别为像素点的横坐标与纵坐标,crColor为像素的颜色值。在Windows中,线状图必须用笔(pen)来画,所以线的颜色就由笔色来确定。笔的创建与使用的步骤为:

创建笔对象:创建笔类CPen对象的方法有如下两种:

使用构造函数CPen

CPen( int nPenStyle, int nWidth, COLORREF crColor );

其中,nPenStyle为笔的风格,可取值: nWidth为笔宽,与映射模式有关,使用缺省映射时为像素数,若nWidth = 0,则不论什么映射模式,笔宽都为一个像素;crColor为笔的颜色值。例如

CPen* pGrayPen = new CPen(PS_SOLID, 0, RGB(128, 128, 128));

CPen grayPen(PS_SOLID, 0, RGB(128, 128, 128));

使用成员函数CreatePen

BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor );

如:

CPen grayPen;

grayPen.CreatePen(PS_SOLID, 0, RGB(128, 128, 128));

缺省的笔为单像素宽的实心黑色笔

将笔对象选入设备上下文:为了能使用我们所创建的笔对象,必须先将它选入设备上下文,这可以调用设备上下文类CDC的成员函数SelectObject来完成:

CPen* SelectObject( CPen* pPen );

返回值为指向原来笔对象的指针(一般将其保存下来,供下次在装入时使用)。如

pOldPen = pDC->SelectObject(&pen);

另外,Windows中有一些预定义的笔对象,可用CDC的另一成员函数SelectStockObject将其选入DC,其函数原型为:

virtual CGdiObject* SelectStockObject( int nIndex );

预定义的笔对象有BLACK_PEN(黑色笔)、WHITE_PEN(白色笔)、NULL_PEN(空笔/无色笔)。例如:pDC->SelectStockObject(BLACK_PEN);

使用设备上下文画线状图:画线状图所使用的是当前设备上下文中的笔对象。线状图有直线、折线、矩形、(椭)圆(弧)等,详见4(2)

将笔对象从设备上下文中放出:为了能删除使用过的笔对象,必须先将它从设备上下文中释放出来后,然后才能删除。释放的方法是重新装入原来的笔对象,如 pDC->SelectObject(pOldPen);

删除笔对象:为了能删除笔对象,必须先将其从设备上下文中释放。删除方法有

调用笔类CDC的成员函数DeleteObject,之后可再用成员函数CreatePen在笔对象中继续创建新的笔内容。如

pen.DeleteObject();

使用删除运算符delete将笔对象彻底删除,如delete pen;

自动删除:若笔对象为局部变量,则在离开其作用域时,会被系统自动删除

下面为一段较完整地创建与使用笔的代码: CPen pen, *pOldPen; for (int j = 0; j SelectObject(&pen); pDC->MoveTo(0, j); pDC->LineTo(40, j); pDC->SelectObject(pOldPen); pen.DeleteObject(); }Windows中,面状图必须用刷(brush)来填充,所以面的颜色就由刷色来确定。MFC中的刷类为CBrush,刷的创建与使用的步骤与笔的相似。

构造函数有3个:

CBrush( COLORREF crColor ); //创建颜色为crColor的实心刷

CBrush( int nIndex, COLORREF crColor ); //创建风格由nIndex指定且颜色为crColor的孵化(hatch)刷,其中nIndex可取孵化风格(Hatch Styles)值:符号常量数字常量风格 图案 HS_HORIZONTAL 0水平线 ----- HS_VERTICAL 1垂直线 ||||| HS_FDIAGONAL 2正斜线 \\\\\ HS_BDIAGONAL 3反斜线 ///// HS_CROSS 4十字线 +++++ HS_DIAGCROSS 5斜十字线 xxxxx n CBrush( CBitmap* pBitmap ); //创建位图为pBitmap的图案刷

与构造函数相对应,也有3个创建不同类型刷的成员函数:

BOOL CreateSolidBrush( COLORREF crColor );

BOOL CreateHatchBrush( int nIndex, COLORREF crColor );

BOOL CreatePatternBrush( CBitmap* pBitmap );

如:pDC->FillRect( &rect, new CBrush( RGB(r, g, b) ) );

预定义的刷对象有BLACK_BRUSH(黑刷)、DKGRAY_BRUSH(暗灰刷)、GRAY_BRUSH(灰刷)、HOLLOW_BRUSH(空刷)、LTGRAY_BRUSH(亮灰刷)、NULL_BRUSH(空刷)、WHITE_BRUSH(白刷)

缺省的刷为空刷Windows中,绘图一般在视图窗口的客户区进行,使用的是设备上下文类CDC中各种绘图函数。缺省情况下,绘图的默认映射模式为MM_TEXT,其绘图单位为像素(只要不打印输出,使用该模式就够了)。若窗口客户区的宽和高分别为wh,则其x坐标是从左到右,范围为0 ~ w-1y坐标是从上到下,范围为0 ~ h-1。参见下图:

缺省的Windows窗口坐标系画像素点就是设置像素点的颜色,从前面3(2)已知道这可由CDC的成员函数SetPixel来做,该函数的原型为:

COLORREF SetPixel( int x, int y, COLORREF crColor );

COLORREF SetPixel( POINT point, COLORREF crColor );

其中,xy分别为像素点的横坐标与纵坐标,crColor为像素的颜色值。如

pDC->SetPixel(i, j, RGB(r, g, b));

另外,表示点的结构POINT的定义为(windef.h)

typedef struct tagPOINT {

LONG x;

LONG y;

} POINT;

对应的MFC类为CPoint。在Windows中,线状图必须用笔来画(笔的创建与使用见前面的3(3)),下面介绍的是CDC类中可以绘制线状图的常用成员函数:

当前位置:设置当前位置为(x, y)point:(返回值为原当前位置的坐标)

CPoint MoveTo( int x, int y ); CPoint MoveTo( POINT point );

画线:使用DC中的笔从当前位置画线到点(x, y)point:(若成功返回非0值):

BOOL LineTo( int x, int y );BOOL LineTo( POINT point );

画折线:使用DC中的笔,依次将点数组lpPoints中的nCount(2)个点连接起来,形成一条折线:

BOOL Polyline( LPPOINT lpPoints, int nCount );

画多边形:似画折线,但还会将最后的点与第一个点相连形成多边形,并用DC中的刷填充其内部区域:

BOOL Polygon( LPPOINT lpPoints, int nCount );

画矩形:使用DC中的笔画左上角为(x1, y1)、右下角为(x2, y2)或范围为*lpRect的矩形的边线,并用DC中的刷填充其内部区域:

BOOL Rectangle( int x1, int y1, int x2, int y2 );

BOOL Rectangle( LPCRECT lpRect );

画(椭)圆:使用DC中的笔在左上角为(x1, y1)、右下角为(x2, y2)或范围为*lpRect的矩形中画内接(椭)圆的边线,并用DC中的刷填充其内部区域:

BOOL Ellipse( int x1, int y1, int x2, int y2 );

BOOL Ellipse( LPCRECT lpRect );

画弧:(x1, y1)(x2, y2)lpRect的含义同画(椭)圆,(x3, y3)ptStart为弧的起点,(x4, y4)ptEnd为弧的终点:(逆时针方向旋转)

BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );

BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

画弓弦:参数的含义同上,只是用一根弦连接弧的起点和终点,形成一个弓形,并用DC中的刷填充其内部区域:

BOOL Chord( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );

BOOL Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd );Windows中,面状图必须用刷来填充(刷的创建与使用见前面的3(4))。上面(2)中的PolygonRectangleEllipseChord等画闭合线状图的函数,只要DC中的刷不是空刷,都可以用来画对应的面状图。下面介绍的是CDC类中只能绘制面状图的其他常用成员函数:

画填充矩形:用指定的刷pBrush画一个以lpRect为区域的填充矩形,无边线,填充区域包括矩形的左边界和上边界,但不包括矩形的右边界和下边界:

void FillRect( LPCRECT lpRect, CBrush* pBrush );

画单色填充矩形:似FillRect,但只能填充单色,不能填充花纹和图案:

void FillSolidRect( LPCRECT lpRect, COLORREF clr );

void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr );

画扇形:参数含义同Arc,但将起点和终点都与外接矩形的中心相连接,形成一个扇形区域,用DC中的刷填充整个扇形区域,无另外的边线:

BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );

BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );为了能画移动的位置标识(如十字、一字)和随鼠标移动画动态虚线框,必须在不破坏原有背景图形的基础上移动这些图形。所用的方法为异或画图。绘图模式(drawing mode)指前景色的混合方式,它决定新画图的笔和刷的颜色(pbCol)如何与原有图的颜色(scCol)相结合而得到结果像素色(pixel)。可使用CDC类的成员函数SetROP2来设置绘图模式:(ROP = Raster OPeration光栅操作)

int SetROP2( int nDrawMode );

其中,nDrawMode可取值:符号常量作用 运算结果 R2_BLACK黑色 pixel = black R2_WHITE白色 pixel = white R2_NOP不变 pixel = pbCol R2_NOT反色 pixel = ~scCol R2_COPYPEN覆盖 pixel = pbCol R2_NOTCOPYPEN反色覆盖 pixel = ~pbCol R2_MERGEPENNOT反色或 pixel = ~scCol | pbCol R2_MERGENOTPEN或反色 pixel = scCol | ~pbCol R2_MASKNOTPEN与反色 pixel = scCol & ~pbCol R2_MERGEPEN pixel = scCol | pbCol R2_NOTMERGEPEN或非 pixel = ~(scCol | pbCol) R2_MASKPEN pixel = scCol & pbCol R2_NOTMASKPEN与非 pixel = ~(scCol & pbCol) R2_XORPEN异或 pixel = scCol ^ pbCol R2_NOTXORPEN异或非 pixel = ~(scCol ^ pbCol)其中,R2_COPYPEN(覆盖)为缺省绘图模式,R2_XORPEN(异或)常用。移动图形采用的是异或画图方法,移动图形的过程为:异或画图、在原位置再异或化图(擦除)、在新位置异或画图、...

pOldPen = pDC->SelectObject(pGrayPen); pDC->SetROP2(R2_XORPEN); if (erase) DrawCross(pDC, m_x0, m_y0); DrawCross(pDC, x0, y0); pDC->SetROP2(R2_COPYPEN); pDC->SelectObject(pOldPen); m_x0 = x0; m_y0 = y0;为了编写颜色调色板的程序,需要建立基于对话框的项目,并要在控件中画图,动态改变编辑框中的数据,还要在对话框中响应编辑消息和鼠标消息。编辑好对话框资源后,可以使用ClassWizard为对话框的控件(ID)添加(用于数据交换的)类数据成员,它们可以是不同的数据类型,如整数、浮点数、字符串等,还可以为它们设置初值和取值范围。在程序运行时可以调用对话框类的基类CWnd的成员函数:

UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const;

void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE );

int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;

int GetDlgItemText( int nID, CString& rString ) const;

void SetDlgItemText( int nID, LPCTSTR lpszString );

来动态获得和设置指定控件所对应的整数或字符串数据。如:

m_hue = GetDlgItemInt(IDC_EDIT_HUE);

SetDlgItemInt(IDC_EDIT_RED, m_red, false);

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC画图-2
MFC学习之 自绘入门
GDI(图形设备接口)
MFC绘图总结(4):画图 | 求索阁
visual c++中的画刷类CBrush使用实例
从CStatic派生新类,形成具有可以改变字体、背景颜色 和字体颜色的控件类
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服