回 帖 发 新 帖 刷新版面

主题:在对话框中使用二级缓冲画图

我的想法是在主窗体上有一个菜单按钮,当单击后出现一个对话框,在对话框上绘制图。以下是我的代码:对话框初始化函数
BOOL OnInitDialog()
{
  m_pDC = new CClientDC(this);
  CWnd* pWnd = m_pDC->GetWindow();
  m_CDC = pWnd->GetDC();
  m_menCDC->CreateCompatibleDC(m_CDC);//进行到这就报错
  GetClientRect(m_rect); 
  m_bmpFace.CreateCompatibleBitmap(m_CDC,m_rect.Width(),m_rect.Height());
  m_pOldBmp = m_menhDC->SelectObject(&m_bmpFace);    
}
我跟踪一下,有可能是 m_CDC = pWnd->GetDC();这句没有得到CDC。请高手指点一下,如果才能得到对话框的句柄,以及CDC???

回复列表 (共5个回复)

沙发

上面的方法不太好,最好放在OnPaint里处理。

出错的可能是你的m_menCDC是声明成指针的,但使用时没有初始化。如果需要,我可以给一个简单的对话框画Bitmap图的例子

板凳

好啊,好啊。给我个例子吧。

3 楼

终于弄明白了。谢谢。我还有个问题,我要绘制的图片大于当前对话框,而我又不想改变对话框的大小。想把全部图片都显示出来。有什么方法???我想的是把内存DC的图片缩小一定的比例。不知道怎么处理。请高手提示一下。最好有代码。谢谢。

4 楼

请参考例子:

http://upload.programfan.com/upfile/200802131512165.rar

5 楼

要显示的图大于当前对话框的客户区域,我加了一个垂直滚动条,一个水平滚动条。当触发了滚动条事件后,图片能动,但是我的滚动条为什么箭头没了,但当我再点击箭头时又显示出来。滚动条还用单独处理一下吗???我在OnPaint()里让滚动条显示了。不是不行。请高手指点下。

我来回复

您尚未登录,请登录后再回复。点此登录或注册