对话框客户区画图未果求解

botmantom 2009-07-06 02:32:34
如题,想在对话框客户区画图,编译连接通过,执行时没画出来。。
设计的是按一个按钮然后开始画图:
void NewDialog::OnRadio1()
{
// TODO: Add your control notification handler code here

CRect picrect;
this->GetClientRect(&picrect);
//GetClientRect(&picrect);
//CWnd* dialogwnd=GetDlgItem(IDD_DIALOG1);
//if(dialogwnd!=NULL)
//dialogwnd->GetWindowRect(&picrect);
//ScreenToClient(&picrect);

//CClientDC dc(this);
PAINTSTRUCT pts;
CDC * cdc=BeginPaint(&pts);
HDC hdc=cdc->GetSafeHdc();
HBRUSH hbrush;
HPEN hpen;


hpen=(HPEN)GetStockObject(255);
hbrush=(HBRUSH)GetStockObject(255);
SelectObject(hdc,hpen);
SelectObject(hdc,hbrush);
Rectangle(hdc,0,picrect.bottom/2,picrect.right /2,picrect.bottom );





EndPaint(&pts);
DeleteObject(hpen);
DeleteObject(hbrush);

}
求大虾帮忙看看。。
...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
botmantom 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wozhaolala 的回复:]
不用调用OnPaint()如2楼所说
Invalidate(FALSE)就可以了
[/Quote]
谢谢提醒,我修改/添加了如下代码:
void NewDialog::OnRadio1()
{
Invalidate(FALSE);

}
void CMyView::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CWnd * dialogwnd=FindWindow("NewDialog","histogram");
if(dialogwnd!=NULL)
{
CRect picrect;
dialogwnd->GetWindowRect (&picrect);
PAINTSTRUCT pts;
CDC * cdc=BeginPaint(&pts);
HDC hdc;
hdc=(cdc->GetSafeHdc());
HBRUSH hbrush;
HPEN hpen;
hpen=(HPEN)GetStockObject(255);
hbrush=(HBRUSH)GetStockObject(255);
SelectObject(hdc,hpen);
SelectObject(hdc,hbrush);
Rectangle(hdc,0,picrect.bottom/2,picrect.right /2,picrect.bottom );
EndPaint(&pts);
DeleteObject(hpen);
DeleteObject(hbrush);
}
else
{
//OnPreparDC(&dc);
OnDraw(&dc);
}
// Do not call CView::OnPaint() for painting messages
}
也就是设置成了只要有这个对话框存在(由FindWindow()判断)便在对话框上面画图,但是运行结果还是没画图,这是什么原因?麻烦大虾看看。。谢谢
悟迟 2009-07-06
  • 打赏
  • 举报
回复
不用调用OnPaint()如2楼所说
Invalidate(FALSE)就可以了
botmantom 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wozhaolala 的回复:]
在OnPaint里面画吧,在OnRadio1里面置个标志位,NewDialog定义个成员变量作为标志
貌似在OnRadio1画,会被刷掉的。
[/Quote]
找到了。。
问一下需要在Radio1里面调用OnPaint吗,还是消息自动在发生单击Radio1的时候调用?
botmantom 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wozhaolala 的回复:]
在OnPaint里面画吧,在OnRadio1里面置个标志位,NewDialog定义个成员变量作为标志
貌似在OnRadio1画,会被刷掉的。
[/Quote]
多谢,OnPaint是哪里的函数,消息响应函数吗?是在View里面的吗?没找到啊。。谢了
Ryanwen 2009-07-06
  • 打赏
  • 举报
回复
绘图部分放在OnPaint或OnDraw中

OnRadio1中只要调用Invalidate即可

悟迟 2009-07-06
  • 打赏
  • 举报
回复
在OnPaint里面画吧,在OnRadio1里面置个标志位,NewDialog定义个成员变量作为标志
貌似在OnRadio1画,会被刷掉的。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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