如何在对话框上画图?

sunguanzhong 2004-09-27 08:28:51
我想在一个对话框上通过cdc类来画几条线条。我知道可以在ctlcolor消息处理中实现,但我在wm_paint消息处理中却无效。我想问一下:
1。wm_paint消息是干什么的?什么时候起作用,为什么在里面画画不显示?
2。对话框程序没有ondraw()函数,它是通过什么来显示的?
3。如何通过cdc类来画图,在对话框背景上?
...全文
402 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
try876 2004-09-28
  • 打赏
  • 举报
回复
建议你去看看《深入浅出MFC》,了解一下MFC的内部机理,只是了解
try876 2004-09-27
  • 打赏
  • 举报
回复
1.wm_paint消息是用来通知画图用的,当窗口被别的窗口挡住,后又显示时窗口就要重画,wm_paint消息就是通知其重画的
2.你可以认为OnPaint与OnDraw的功能是一样的,你要看不到OnPaint,就会看到OnDraw,在这两个里面写代码是一样的
3.如上
54783szg 2004-09-27
  • 打赏
  • 举报
回复
CPaint是系统的,OnDraw是程序的,你可以自己写画图函数,但OnDraw多用于打印!
Atomictry 2004-09-27
  • 打赏
  • 举报
回复
void MyDlg::OnPaint()
{
CPaintDC dc(this);
CPen newPen, *oldPen;
newPen.CreatePen(PS_SOLID, 1, RGB(0,255,0));
oldPen = dc.SelectObject(&newPen);
dc.MoveTo(0, 0);
dc.LineTo(100, 100);
dc.SelectObject(oldPen);
}
可以画的出来。
思危 2004-09-27
  • 打赏
  • 举报
回复
if (IsIconic()) 表示在窗口最小化时绘制任务栏上的图标
思危 2004-09-27
  • 打赏
  • 举报
回复
加到19行后并注释掉20行
老夏Max 2004-09-27
  • 打赏
  • 举报
回复
wm_paint那几种情况下会被发送?
sunguanzhong 2004-09-27
  • 打赏
  • 举报
回复
在通过想到生成的对话框程序中wm_paint中有如下内容
1。 if (IsIconic())
2。 {
3。 CPaintDC dc(this); // device context for painting
4
5 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
6
7 // Center icon in client rectangle
8 int cxIcon = GetSystemMetrics(SM_CXICON);
9 int cyIcon = GetSystemMetrics(SM_CYICON);
10 CRect rect;
11 GetClientRect(&rect);
12 int x = (rect.Width() - cxIcon + 1) / 2;
13 int y = (rect.Height() - cyIcon + 1) / 2;
14
15 // Draw the icon
16 dc.DrawIcon(x, y, m_hIcon);
17 }
18 else
19 {
20 CDialog::OnPaint();
21 }
请问这段待吗是什么作用?我在第16行后面加上如下代码,没有显示,请问这是怎么回事?
dc.MoveTo(0, 0);
dc.LineTo(100, 100);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧