hur.cn - 华软网

 热门搜索

MFC picture 控件上画图,不是load图

  作者:未知    来源:网络    更新时间:2011/1/14
MFC 程序中弹出的对话框中,加入PICTURE 控件,需要在上面绘图。
输入一些数据,然后在控件上显示数据措置惩罚之后画出的图片。

是绘图,不是LOAD图片。由于措置惩罚数据进程只是在内存DC中画出BMP图形数据,需要将这些数据在控件上显示成图片。

试过在对话框类的OnPaint()函数中实现绘图和显示,但在控件上不显示图片。

究竟是哪儿犯错了呢。望大侠们指教。

C++">
void CMyDlg::OnPaint()
{
//CDialog::OnPaint();
////////预览绘图
////CWnd* pPicwnd = GetDlgItem(IDC_PICTURE);
CPaintDC* picDC = (CPaintDC*)GetDlgItem(IDC_PICTURE)->GetDC();
CRect picRect;
GetDlgItem(IDC_PICTURE)->GetClientRect(&picRect);
memDC.CreateCompatibleDC(picDC);
bitmap.CreateCompatibleBitmap(picDC, picRect.Width(), picRect.Height() );
CBitmap* oldbmp = memDC.SelectObject(&bitmap); 

memDC.FillSolidRect(&picRect,RGB(0,0,0)); 
m_pdeal->Preview(&memDC,picRect);

picDC->BitBlt(0,0,picRect.Width(), picRect.Height(),&memDC, picRect.left, picRect.top, SRCCOPY);
bitmap.DeleteObject();
memDC.DeleteDC();
}

对话框中的picture控件不显示图形。

如果在 预览 按钮的点击事件中实现绘图和显示的话,点击预览按钮就能够显示图片。

是否是刷新对话框的时候出现了毛病呢?

---华软 网友回答---
从picture控件派生新的类,重载onpaint()方法。
---华软网友回复---
或:在你的代码后边,增加上更新PICTURE 控件的方法。
---华软网友回复---
你的意思是在dialog的OnPaint()函数里加刷新控件的方法?

详细是什么方法呢?

redrawwindow()用过,似乎不起作用……

在按钮事件中能做到的效果,在OnPaint里却不行。预计就是对话框刷新酿成的问题,但不知道详细是哪儿的更新有问题,而且不知道怎么更正……郁闷……
---华软网友回复---
CWnd类有个updata方法
---华软网友回复---
引用 3 楼 dingqihui83 的回复:
在按钮事件中能做到的效果,在OnPaint里却不行。预计就是对话框刷新酿成的问题,但不知道详细是哪儿的更新有问题,而且不知道怎么更正……郁闷……

要是这样的话,就是,onpaint没有执行。
你需要强制更新整个窗口。
---华软网友回复---
如何调用ONPAINT()函数呢?

我在DLG类中声明为VOID ONPAINT()照旧声明为 消息?


2)强制刷新窗口如何实现?是INVALIDATE()吗? 在那里增加方法?

谢谢帮助……
---华软网友回复---
CClientDC picDC(GetDlgItem(IDC_PICTURE));
或:CDC *pDC = GetDlgItem(IDC_PICTURE)->GetDC();
---华软网友回复---
// typical way painting in dialog.
CPaintDC dc(this);
m_Pic.Invalidate(FALSE);// do not erase background!
dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
  m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
// others
CDialog::OnPaint();


---华软网友回复---
下载我的资源“ScrollBitmap.rar”      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。