mfc弹出一个对话框,并在上面画图

uchiha_iTachi 2013-06-26 02:44:18
我想问一下,我现在做了一个测试程序,点击初始对话框上的按钮,弹出一个非模态对话,然后想在这个对话框上画图,可每次都会画到那个初始对话框上面,这是什么问题呢,有什么解决办法吗
这是那部分代码

void Ctest2Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
CDC *hdc = GetDC();
CDialog* pNewDlg = new CDialog;
pNewDlg->Create(IDD_DIALOG1,NULL);
pNewDlg->ShowWindow(TRUE);
//CRect rect;
//GetClientRect(&rect);
SetPixel(*hdc,10,10,RGB(255,0,0));
}
...全文
874 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQS@LY 2015-07-28
  • 打赏
  • 举报
回复
为什么我用23楼的方法会报错,本人小白。 C:\CSNR-binaryfile-decoding\Binaryfile_decoding\Binaryfile_decodingDlg.cpp(281) : error C2664: 'RedrawWindow' : cannot convert parameter 1 from 'const int' to 'const struct tagRECT *'
素事 2013-06-27
  • 打赏
  • 举报
回复
引用 25 楼 outvice 的回复:
看你获取的句柄是当前对话框的句柄,那显示当然是父对话框了。 获取你要显示的对话框的句柄就对了
呃,23L正解了。闪。
素事 2013-06-27
  • 打赏
  • 举报
回复
看你获取的句柄是当前对话框的句柄,那显示当然是父对话框了。 获取你要显示的对话框的句柄就对了
dzz10 2013-06-27
  • 打赏
  • 举报
回复
将画图代码写在IDD_DIALOG1的OnPanit下面
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 23 楼 schlafenhamster 的回复:
劳资一定要在 原对话框 里 对 新对话框 画图: void Ctest2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialog* pNewDlg = new CDialog; pNewDlg->Create(IDD_DIALOG1,NULL); pNewDlg->RedrawWindow(TRUE); HDC hdc = pNewDlg->GetDC(); SetPixel(hdc,10,10,RGB(255,0,0)); }
schlafenhamster 2013-06-26
  • 打赏
  • 举报
回复
劳资一定要在 原对话框 里 对 新对话框 画图: void Ctest2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialog* pNewDlg = new CDialog; pNewDlg->Create(IDD_DIALOG1,NULL); pNewDlg->RedrawWindow(TRUE); HDC hdc = pNewDlg->GetDC(); SetPixel(hdc,10,10,RGB(255,0,0)); }
sup_ace 2013-06-26
  • 打赏
  • 举报
回复
你可以 先给IDD_DIALOG1 创建一个类 比如说是 CTestDlg 然后CTestDlg *pNewDlg= new CTestDlg; pNewDlg->Create(IDD_DIALOG1, this); pNewDlg->ShowWindow(SW_SHOW); 在IDD_DIALOG1对应的类CTestDlg 中的onpaint 中画图 这样就可以了
wanglu343280746 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 liyuanhong13 的回复:
来人帮帮忙啊
在你新弹出的对话框的OnPanit函数里画就行了
sup_ace 2013-06-26
  • 打赏
  • 举报
回复
对啊 因为showwindow虽然触发了 onpaint 但是pNewDlg的onpaint中什么都没有做 即使你先画了 onpaint 又把你画的东西给 刷掉了
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 16 楼 u010588063 的回复:
怎么会不行呢,把你QQ给我我来帮你看看,我这边就好好的,已经画好了。
834429516
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 17 楼 sup_ace 的回复:
我感觉这样做是有问题的 pNewDlg->ShowWindow(TRUE); SetPixel(*hdc,10,10,RGB(255,0,0)); 你先把对话框show出来 然后在画 没有刷新是显示不上去的 如果调用pNewDlg->Invalidate(FALSE);触发了pNewDlg的onpaint 但是pNewDlg的onpaint中什么都没有做 所以画不出来 我是这么想的。。不知道对不对
我先画之后再showwindow还是不行……
sup_ace 2013-06-26
  • 打赏
  • 举报
回复
我感觉这样做是有问题的 pNewDlg->ShowWindow(TRUE); SetPixel(*hdc,10,10,RGB(255,0,0)); 你先把对话框show出来 然后在画 没有刷新是显示不上去的 如果调用pNewDlg->Invalidate(FALSE);触发了pNewDlg的onpaint 但是pNewDlg的onpaint中什么都没有做 所以画不出来 我是这么想的。。不知道对不对
u010588063 2013-06-26
  • 打赏
  • 举报
回复
怎么会不行呢,把你QQ给我我来帮你看看,我这边就好好的,已经画好了。
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 13 楼 sup_ace 的回复:
引用 9 楼 liyuanhong13 的回复:
[quote=引用 5 楼 u010588063 的回复:] 以上代码我已经帮你试过了,没有问题,你就放心的用吧。都放在莫泰对话框所在的类里面。
嗯,非常感谢你,一下写了这么多,可能是我没描述清楚,害得你白费劲了。不过还是很感谢
CDC *pDC = pNewDlg->GetDC(); [/quote]我觉得这么改应该对,但是还是出问题了,改了之后,只有对话框,没有圆……
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 12 楼 u010588063 的回复:
我的意思你让你放在非模态对话框的onpaint函数里面
我那个非模态对话框是再点击确定之后直接new出来的,并不是事先创建好的,所以也就没有OnPaint函数了,你看我一楼贴上去的代码,就是响应确定按钮的函数。那个pNewDlg就是那个非模态对话框
sup_ace 2013-06-26
  • 打赏
  • 举报
回复
引用 9 楼 liyuanhong13 的回复:
引用 5 楼 u010588063 的回复:
以上代码我已经帮你试过了,没有问题,你就放心的用吧。都放在莫泰对话框所在的类里面。
嗯,非常感谢你,一下写了这么多,可能是我没描述清楚,害得你白费劲了。不过还是很感谢
CDC *pDC = pNewDlg->GetDC();
u010588063 2013-06-26
  • 打赏
  • 举报
回复
我的意思你让你放在非模态对话框的onpaint函数里面
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 10 楼 u010588063 的回复:
不知道可否把画圆的代码直接放在莫泰对话框的Ondraw或者Onpaint里面,这样点击按钮的时候,莫泰对话框一弹出来就有个圆在上面;
放在初始对话框的onpaint里面的话,效果的确是创建的时候就有圆,但是这是在初始对话框上面画的,我是想让圆显示在非模态对话框上面,而且是点击确定之后,创建非模态对话框的同时在上面画圆,所以放在OnPaint中也不行
u010588063 2013-06-26
  • 打赏
  • 举报
回复
不知道可否把画圆的代码直接放在莫泰对话框的Ondraw或者Onpaint里面,这样点击按钮的时候,莫泰对话框一弹出来就有个圆在上面;
uchiha_iTachi 2013-06-26
  • 打赏
  • 举报
回复
引用 5 楼 u010588063 的回复:
以上代码我已经帮你试过了,没有问题,你就放心的用吧。都放在莫泰对话框所在的类里面。
嗯,非常感谢你,一下写了这么多,可能是我没描述清楚,害得你白费劲了。不过还是很感谢
加载更多回复(8)

15,979

社区成员

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

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