MFC CDialog中画图问题

liren112 2012-07-27 03:24:08
我用Tab_control控件创建了2个Dialog的子对象,我想在其中的一个dialog子对象中画图,请问怎么画啊,
...全文
350 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-09
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
水瓶座雨夕 2012-07-28
  • 打赏
  • 举报
回复

.h 在这里增加
//{{AFX_MSG(CPUDIALOG)
afx_msg void OnPaint();
//}}AFX_MSG


.cpp增加
BEGIN_MESSAGE_MAP(CPUDIALOG, CDialog)
ON_WM_PAINT() //响应onpaint消息 这样就可以了
END_MESSAGE_MAP()
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
“用其他的自定义函数也可以画图。”

但不能重绘。即窗口被覆盖后不能回复
bj1298 2012-07-27
  • 打赏
  • 举报
回复
为什么一定要用OnPaint,用其他的自定义函数也可以画图。
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
"创建了个OnPaint()函数"?
用向导响应WM_PAINT消息。
liren112 2012-07-27
  • 打赏
  • 举报
回复
还是没解决,我是在子窗口中创建了个OnPaint()函数,然后在这个函数中写画图的代码,但是在运行的时候这个函数不调用啊,
东莞某某某 2012-07-27
  • 打赏
  • 举报
回复
调用 InvalidateRect UpdateWinwdow,刷新子窗口
liren112 2012-07-27
  • 打赏
  • 举报
回复
但是void CPUDIALOG::OnPaint()
{
CPaintDC dc(this);
dc.MoveTo(100,660);
dc.LineTo(800,660);
dc.MoveTo(100,50);
dc.LineTo(100,660);

//画箭头
dc.MoveTo(800,654);
dc.LineTo(800,666);
dc.LineTo(810,660);
dc.LineTo(800,654);

dc.MoveTo(94,50);
dc.LineTo(106,50);
dc.LineTo(100,40);
dc.LineTo(94,50);

}我定义的这个运行的时候无法调用啊
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
"然后我在主窗口的OnPait()中调用在子窗口的OnPait()?"
Onpaint 是不能调用的,调用OnPaint的其实是Invalidate().
"在其中的一个dialog子对象中画图"就可以了,与主对话框无关。
liren112 2012-07-27
  • 打赏
  • 举报
回复
为什么在子窗口中不显示画线的内容呢
liren112 2012-07-27
  • 打赏
  • 举报
回复
但是我是在子窗口中的OnPaint()中写的,void CPUDIALOG::OnPaint()
{
CPaintDC dc(this);
dc.MoveTo(100,660);
dc.LineTo(800,660);
dc.MoveTo(100,50);
dc.LineTo(100,660);

//画箭头
dc.MoveTo(800,654);
dc.LineTo(800,666);
dc.LineTo(810,660);
dc.LineTo(800,654);

dc.MoveTo(94,50);
dc.LineTo(106,50);
dc.LineTo(100,40);
dc.LineTo(94,50);
}
然后我在主窗口的OnPait()中调用在子窗口的OnPait()?
void CSQL_TOOLDlg::OnPaint()
{

if (IsIconic())
{
CPaintDC dc(this);
// 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
m_cpu.OnPaint();
}
}
这步骤对吗?
淡定的飘着 2012-07-27
  • 打赏
  • 举报
回复
可以在子对话框的OnPaint或者OnDraw中画
Jarrylogin 2012-07-27
  • 打赏
  • 举报
回复
在dialog子对象的OnDraw(CDC* pDC)画图
schlafenhamster 2012-07-27
  • 打赏
  • 举报
回复
可以在子对话框的OnPaint中画

15,978

社区成员

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

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