求教怎样同步视图与对话框的内容? 视图与对话框的内容同步,比如偶在视图里拖动鼠标,画一个圆,在一个非模态对话框中也显示一个圆,望高手指点~~~~~~~~ 谢~~~~~~~~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在视图里拖动鼠标时,画点的时候同时向两个DC画是可以的啊,一个是视图DC,另外一个是非模态对话框的DC 下面是将一个窗口背景画成红色的函数,其中hdc就是窗口的设备描叙表,void On_COMMANDTIPHWND_WMPAINT(HDC hdc){ HDC hdcComp=CreateCompatibleDC(hdc); HBITMAP hbmSet = CreateCompatibleBitmap(hdc,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT); HBITMAP hbmPrev=(HBITMAP)SelectObject(hdcComp,hbmSet); BitBlt(hdcComp, 0,0,COMMANDTIP_WIDTH, COMMANDTIP_HEIGHT,hdc, 0,0, SRCCOPY) ; //draw out to the camp HDC HBRUSH hBrush,hBrushPrev; hBrush=CreateSolidBrush(RGB(255,0,0)); hBrushPrev=(HBRUSH)SelectObject(hdcComp,hBrush); Rectangle(hdcComp,0,0,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT); SelectObject(hdcComp,hBrushPrev); DeleteObject(hBrush); //draw back the BMP BitBlt(hdc, 0,0,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT,hdcComp, 0,0, SRCCOPY) ; hbmSet=(HBITMAP)SelectObject(hdcComp,hbmPrev); DeleteObject(hbmPrev); DeleteObject(hbmSet); DeleteObject(hdcComp); DeleteObject(hdc);}你现在要做的就是连续两次GetDC,并在这个DC上画画,就可以了,具体,你就修改一下这个函数的//draw out to the camp HDC 和 //draw back the BMP之间的部分,当然那些 高宽等参数也是需要修改的 就是说 , 首先在View中应该有这个非模式对话框的指针 , 比如m_pDlg ;你可以通过CDC* pDC = m_pDlg.GetDC();来获得对话框的DC . . .然后在CView里画图的时候 , 同时也在对话框里画图 , 例如: 你在CView里画一个矩形 . . . CRect rt ;pDC->Rectangle(rt); //首先在CView视图中画图CDC* pDlgDC = m_pDlg->GetDC(); //得到对话框DC指针 . .ConvertCoord(rt); //将CView中的坐标转换成对话框中坐标 . .pDlgDC->Rectangle(rt); //在对话框里画图 . . error C2182: “Buffer”: 非法使用“void”类型 如何在工作线程中获取/设置 界面控件 十六进制小算法 请问在vc怎样读取xml文件中<![CDATA[ ....]]>的内容呀? 获得光驱状态 如何在命令行程序中设置当前DOS窗口的环境变量? 怎么去掉窗口的标题栏压 rgn的边界填充问题。高手过来看看。 msdn里面是不是有很多的example,我怎么找到啊,谢了 为什么调用其他类里的公共成员变量会出错? 为什么我的ADO控件不能连接SQL 如何得到一个已经存在表的字段数目啊?我是VC+ADO +Access编程,有没有SQL语句可以用啊??
void On_COMMANDTIPHWND_WMPAINT(HDC hdc)
{
HDC hdcComp=CreateCompatibleDC(hdc); HBITMAP hbmSet = CreateCompatibleBitmap(hdc,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT);
HBITMAP hbmPrev=(HBITMAP)SelectObject(hdcComp,hbmSet); BitBlt(hdcComp, 0,0,COMMANDTIP_WIDTH, COMMANDTIP_HEIGHT,hdc, 0,0, SRCCOPY) ; //draw out to the camp HDC
HBRUSH hBrush,hBrushPrev;
hBrush=CreateSolidBrush(RGB(255,0,0));
hBrushPrev=(HBRUSH)SelectObject(hdcComp,hBrush); Rectangle(hdcComp,0,0,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT); SelectObject(hdcComp,hBrushPrev);
DeleteObject(hBrush); //draw back the BMP
BitBlt(hdc, 0,0,COMMANDTIP_WIDTH,COMMANDTIP_HEIGHT,hdcComp, 0,0, SRCCOPY) ; hbmSet=(HBITMAP)SelectObject(hdcComp,hbmPrev); DeleteObject(hbmPrev);
DeleteObject(hbmSet);
DeleteObject(hdcComp);
DeleteObject(hdc);
}
你现在要做的就是连续两次GetDC,并在这个DC上画画,就可以了,具体,你就修改一下这个函数的
//draw out to the camp HDC 和 //draw back the BMP之间的部分,当然那些 高宽等参数也是需要修改的
你可以通过CDC* pDC = m_pDlg.GetDC();来获得对话框的DC . . .然后在CView里画图的时候 , 同时也在对话框里画图 ,
例如: 你在CView里画一个矩形 . . . CRect rt ;
pDC->Rectangle(rt); //首先在CView视图中画图CDC* pDlgDC = m_pDlg->GetDC(); //得到对话框DC指针 . .
ConvertCoord(rt); //将CView中的坐标转换成对话框中坐标 . .
pDlgDC->Rectangle(rt); //在对话框里画图 . .