MFC OnDraw()函数 画图

画图

我们在MFC里面需要画图的时候,往往是改写的CxxxView类里面的OnDraw()函数。在这里面会得到
CDC* pDC.
这是MSDN上面的CDC类的文档
我翻译几个我自己常用的函数。
1.MoveTo()和LineTo()函数。它们的参数是点的坐标,因此除了用两个int型数据之外,还可以直接用POINT结构体。MFC还有一个CPoint类,这个与Point结构体类似。

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

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

2.重点介绍一下这个DrawText()函数。

//有这两种形式。
virtual int DrawText(
    LPCTSTR lpszString,
    int nCount,
    LPRECT lpRect,
    UINT nFormat);
int DrawText(
    const CString& str,
    LPRECT lpRect,
    UINT nFormat);

主要是这里的参数nFormat.它有很多的候选取值。

nFormat的候选参数

DT_BOTTOM
将文本对齐到矩形的底部。这个参数只与DT_SINGLELINE参数二者放在一起用。
DT_CALCRECT
确定矩形的宽度和高度。
如果有多行文本,则 DrawText()对应的矩形的宽度使用 lpRect 参数指向的矩形的宽度,并扩展矩形的底部以绑定最后一行文本。如果单行文本的长度比lpRect矩形宽,则扩展宽度。如果小于lpRect矩形的宽度,则减小宽度。
如果只有一行文本,则 DrawText 修改矩形的右侧,以便限制该行中的最后一个字符。
在这两种情况下,DrawText 返回格式化文本的高度,但不绘制文本。
DT_CENTER
将文本水平放置于矩形的中间。
DT_END_ELLIPSIS
对于显示的文本,如果字符串的末尾不适合矩形,则会截断该字符串并添加省略号。如果一个不在字符串末尾的单词超过了矩形的限制,它就会被截断而没有省略号。
除非指定了 DT_MODIFYSTRING 标志,否则不会修改字符串。
DT_PATH_ELLIPSIS
对于显示的文本,将字符串中间的字符替换为省略号,以便结果符合指定的矩形。如果字符串包含反斜杠()字符,则会在最后一个反斜杠之后尽可能保留文本。
除非指定了 DT_MODIFYSTRING 标志,否则不会修改字符串。
DT_LEFT
靠左边输出。
DT_MODIFYSTRING
修改指定的字符串以匹配显示的文本。这个值不会发挥作用,除非另外还指定了DT_END_ELLIPSIS或 DT_PATH_ELLIPSIS参数。
DT_RIGHT
靠右边输出。
DT_RTLREADING
当hdc中选择的字体是希伯来字体或阿拉伯字体时,为双向文本按从右到左的阅读顺序排列。所有文本的默认阅读顺序是从左到右。
DT_SINGLELINE
仅用一行展示文本。回车和换行不会导致移到下一行。
DT_TOP
将文本对齐到矩形的顶部。
DT_VCENTER
将文本竖直方向对齐,这个参数只与DT_SINGLELINE参数一起使用。
DT_WORDBREAK
分割文本。如果这一句话将要超出矩形的边界,这句话就会被自动的分割,从下一行开始继续显示。回车和换行也会分割一句话。如果没有使用这个参数的话,输出只会是一行。
DT_WORD_ELLIPSIS
截断任何不适合矩形的单词,并添加省略号。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针的值是地址

觉得还不错,我会继续努力的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值