如何在弹出的对话框中绘图

SKzhinengjiagong 2011-10-10 07:29:08
CPaintDC dc(this); // device context for painting
CRect rect;
// CWnd *pWnd;
CWnd* pWnd=this-> GetDlgItem(IDC_PAINT);
//CWnd *p = (CWnd*)GetDlgItem(IDC_PAINT);
//CDC *pDC = p->GetDC();
CDC* pDC=pWnd-> GetDC();
GetClientRect(&rect);
CDC memdc;
CBitmap memBitmap;
memdc.CreateCompatibleDC(&dc);
memBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());
memdc.SelectObject(&memBitmap);
。。。。。。。。。。。。
picture控件没起作用,整个图全画在对话框上了
...全文
126 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKzhinengjiagong 2011-10-11
  • 打赏
  • 举报
回复
高手 我把绘图程序全贴上来了
void CSampleDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
CWnd *p = (CWnd*)GetDlgItem(IDC_PAINT);
CDC *pDC = p->GetDC();
GetClientRect(&rect);
CDC memdc;
CBitmap memBitmap;
memdc.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height());
memdc.SelectObject(&memBitmap);

memdc.SetMapMode(MM_ANISOTROPIC);
memdc.SetWindowOrg(0,0);

memdc.SetWindowExt(rect.Width(), -rect.Height());
memdc.SetViewportOrg(rect.left, rect.bottom);
memdc.SetViewportExt(rect.Width(), rect.Height());

// background fill
memdc.FillSolidRect(&rect,RGB(0,0,0));
memdc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));



DrawGrid2(&memdc);



// DrawDataX(&memdc);
// DrawDataY(&memdc);
// DrawDataZ(&memdc);
//************************************//

memdc.SetMapMode(pDC->GetMapMode());
memdc.SetViewportOrg(pDC->GetViewportOrg());
memdc.SetViewportExt(pDC->GetViewportExt());
memdc.SetWindowOrg(pDC->GetWindowOrg());
memdc.SetWindowExt(pDC->GetWindowExt());

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);

memBitmap.DeleteObject();
memdc.DeleteDC();

}
SKzhinengjiagong 2011-10-11
  • 打赏
  • 举报
回复
我顶上去
carter10004 2011-10-11
  • 打赏
  • 举报
回复
是没试过
screentoclient()
这个函数?
Eleven 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skzhinengjiagong 的回复:]

我改成pDC还是不管用CPaintDC dc(this); // device context for painting
CRect rect;

CWnd *p = (CWnd*)GetDlgItem(IDC_PAINT);
CDC *pDC = p->GetDC();

GetClientRect(&rect);
CDC memdc;
CBi……
[/Quote]
你最后pDC->BitBlt/StretchBlt呢?把你的代码写完整
向立天 2011-10-10
  • 打赏
  • 举报
回复
用自定义控件绘图
你可以参考这篇文章
http://blog.csdn.net/xianglitian/article/details/6100767
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
我改成pDC还是不管用CPaintDC dc(this); // device context for painting
CRect rect;

CWnd *p = (CWnd*)GetDlgItem(IDC_PAINT);
CDC *pDC = p->GetDC();

GetClientRect(&rect);
CDC memdc;
CBitmap memBitmap;
memdc.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height());
memdc.SelectObject(&memBitmap);

memdc.SetMapMode(MM_ANISOTROPIC);
memdc.SetWindowOrg(0,0);

memdc.SetWindowExt(rect.Width(), -rect.Height());
memdc.SetViewportOrg(rect.left, rect.bottom);
memdc.SetViewportExt(rect.Width(), rect.Height());

// background fill
memdc.FillSolidRect(&rect,RGB(0,0,0));
memdc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));
schlafenhamster 2011-10-10
  • 打赏
  • 举报
回复
memdc.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height());
呔妖怪来嘛 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
memdc.CreateCompatibleDC(&pDC);
memBitmap.CreateCompatibleBitmap(&pDC, rect.Width(),rect.Height());
----------------
你这里的dc应该用picture控件窗口的pDC吧
[/Quote]
部长都说了。。你试试先
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
高手 能说的明白些吗 我是想画在控件上面
Eleven 2011-10-10
  • 打赏
  • 举报
回复
memdc.CreateCompatibleDC(&dc);
memBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());
----------------
你这里的dc应该用picture控件窗口的pDC吧
呔妖怪来嘛 2011-10-10
  • 打赏
  • 举报
回复
CPaintDC dc(this); // device context for painting
你这是对话框的dc 当然画在对话框上喽
Eleven 2011-10-10
  • 打赏
  • 举报
回复
你是想把图画在picture上吗?
一.数字地质图的拓扑关系 数字地质图的点是有特定的位置,主要有: 数字地质图的线有如下特征: 建立统一的工程文件; 9.★建立统一的系统库: ③系统库之间的拷贝:★图例板的制作: ★影像图的镶嵌配准、矢量化图的误差校正 (1).影像图的镶嵌配准:矢量化图的误差校正: 由MAPGIS主选单→误差校正,双击弹出画面(MAPGIS误差校正系统),点击“文件→打开文件”打开文件“实际矢量化的含内图框的网格文件与理论的含内图框的网格文件”。 ①点击“显示→复位窗口”弹出“选择文件名” 对话框,只选择实际矢量化的含内图框的网格文件将其点蓝。 ④点击“控制点→选择采集文件”弹出“选择要采集控制点的文件名” 对话框,将实际矢量化的含内图框的网格文件点蓝并点击“确定”。 随后点击“文件→保存控制点” 弹出对话框后点击“确定”。 ③点击“控制点→选择采集文件”弹出“选择要采集控制点的文件名”对话框,将理论的含内图框的网格文件点蓝并点击“确定”。 ⑤若一一对应,点击“文件→保存控制点” 弹出对话框后点击“确定”。⑥点击“显示→复位窗口”弹出“选择文件名” 对话框,只选择实际矢量化的含内图框的网格文件将其点蓝之后,点击“数据校正→进行线文件校正转换”,再次点击“显示→复位窗口”弹出“选择文件名”对话框,选择新生成的线文件NEWLIN. 另一种是装入文件平移后的主要是内图框的所有文件,分别点击“数据校正→依次进行线文件校正转换、点文件校正转换、面文件校正转换”,进行校正转换完毕,点击“文件→另存文件” 分别将NEWLIN. 建立正确的面拓扑关系,应注意的问题 在“投影变换系统”界面下,点击“投影转换→成批文件投影转换”弹出对话框,如右图所示,①点击“投影文件/目录”选择要投影的所有文件;②点击“当前投影参数”弹出相应的对话框,在对应的位置处输入已知的参数;③点击“结果投影参数”弹出相应的对话框,在对应的位置处输入目的参数;Ⅱ单个文件投影:在“投影变换系统”界面下,点击“文件→打开文件(装入需要校正的文件)”利用“投影转换”“进行投影变换”弹出对话框,如右图所示,此时的“当前投影参数”与打开文件是一致,只需要输入“结果投影参数”弹出相应的对话框,在对应的位置处输入目的参数;文件。 Ⅲ用户文件的投影变换: 可分工程裁剪与及文件裁剪两种,重点是工程裁剪,传统的文件裁剪-图形裁剪; ①首先建立一个新文件夹,存放裁剪后的文件,因裁剪后的文件名继承了源文件的名称; ④进入“编辑子系统→打开新形的工程文件”。Ⅱ传统的文件裁剪-图形裁剪 ②在“文件”分别装入点、线、面文件→“编辑裁剪框→装入裁剪框”; ⑤在对话框依次将文件裁剪框的点,线、面文件点蓝,点击“浏览”选择路径输入“结果文件名”,点击“增加”→“KO” ⑥在“裁剪工程→裁剪”。①工程裁剪的裁剪框是面文件而传统的文件裁剪-图形裁剪的裁剪框是线文件; ③拓扑裁剪与制图裁剪的区别:拓扑裁剪前若文件的点、线、面的拓扑关系正确,那么拓扑裁剪后的所有点、线、面文件的点、线与线、线与面、面与面之间仍保留良好拓扑关系,符合建库的要求,而制图裁剪前对文件的点、线、面的拓扑关系不要求,制图裁剪后的所有点、线、面文件的点、线与线、线与面、面与面之间也就谈不上拓扑关系,只用于制图。 ③在“影像处理”的“影像分析”→“文件”“打开影像”→“镶嵌融合”的“打开参照文件”“参照区文件(面文件裁剪框)” ①弹出“图例文件不存在,是否新建”的对话框→点击“是”,又弹出“是否从工程的所有文件提取图例”的对话框点击“是”。再次弹出右图对话框→点击“确定”; ②点击“工程图例信息”对话框“退出”→弹出“工程关联图例文件已修改,是否保存”的对话框→点击“是”。 ③回到显示工作台内空白处点击鼠标右手键(弹出对话框)→点击对话框“关联图例文件”(弹出对话框)→点击“工程图例信息”的“修改图例文件”,打开已存的“裁剪文件图例板”文件→点击“确定”; 修改数字地质图易出现的问题 1.双线河与以河岸为界的地质体之间的关系 (2).地质体与断层之间的关系 2.打折弧段的处理 4.计算机制图过程应注意的问题→影像图的镶嵌配准、矢量化图的误差校正→套用标准图框:

15,979

社区成员

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

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