再问:如何能最最简单的方法显示一张图片,能看见图片就成。 上贴:http://community.csdn.net/Expert/topic/3254/3254519.xml?temp=.3427393 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在View中,使用CDC来draw。不过,你需要一些图像库来显示它,免费的库有Paintlib,收费的有奥林岛的leadtools。 界面在MDI主框架窗口中添加位图 在MDI主框架窗口中添加位图(注意,不是在单个视中):首先要清楚对于一个MDI应用程序的主框架窗口来说包含一个特殊的子窗口称为MDICLIENT窗口,应用程序的主框架类中有一个成员变量m_hWndMDIClient 指的就是MDICLIENT窗口。MDICLIENT窗口负责管理主框架窗口的客户区,对MDI客户窗口编程有一定的难度。原因是MDIFrameWnd的客户区完全被MDICLIENT窗口覆盖掉了。这样,MDI主窗口类MDIFrameWnd的背景色和光标都不起作用。同时,微软并不支持将MDICLIENT窗口作为子类,MDICLIENT窗口只能使用标准的背景色和光标。所以,对MDI客户窗口编程不能象对普通窗口那样简单地重载WM_PAINT的消息处理函数。我们可以在主框架窗口截获关于MDICLIENT窗口的重画消息,然后加入自己设计的代码。我用PreTranslateMessage(MSG* pMsg) 截获MDI客户窗口WM_PAINT消息,在这个函数中向主框架窗口发送WM_PAINT消息,在该消息的处理函数中实现彩色位图的显示。我的具体实现如下:1、向程序添加256色彩色位图资源,命名为IDB_BITMAP1;2、用ClassWizard向主框架类添加函数CMainFrame::PreTranslateMessage(MSG* pMsg);3、用ClassWizard向主框架类添加函数CMainFrame::OnPaint();现给出两个函数的实现:BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT) PostMessage(WM_PAINT); return CMDIFrameWnd::PreTranslateMessage(pMsg); } void CMainFrame::OnPaint() { CDC dc, memdc; dc.m_hDC=::GetDC(this->m_hWndMDIClient); CRect rect; CBitmap bitmap; BITMAP szbitmap; bitmap.LoadBitmap(IDB_BITMAP1); bitmap.GetObject(sizeof(BITMAP),&szbitmap); CSize size(szbitmap.bmWidth,szbitmap.bmHeight); memdc.CreateCompatibleDC(&dc); CBitmap *oldbitmap=memdc.SelectObject(&bitmap); GetClientRect(&rect); StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(), memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY); memdc.SelectObject(oldbitmap); memdc.DeleteDC(); dc.DeleteDC(); CMDIFrameWnd::OnPaint(); } 按上述步骤就可以实现在MDI程序中显示彩色位图了,我举的例子用的是256色位图,你也可以实现真彩色位图的显示,具体方法我就不多说了,有兴趣的朋友可以试一试 CDC *mdc=new CDC;mdc->CreateCompatibleDC(&dc);CBitmap *bitmap;bitmap=new CBitmap; bitmap->m_hObject=(HBITMAP) ::LoadImage(NULL,path,IMAGE_BITMAP,clRect.Width(),clRect.Height(),LR_LOADFROMFILE);mdc->SelectObject(bitmap);dc.BitBlt(clRect.left,clRect.top,clRect.Width(),clRect.Height(),mdc,0,0,SRCCOPY);if(mdc) delete mdc; if(bitmap) delete bitmap; 对于bmp文件,MFC中已经有了CBitmap可以直接使用,如果你还要显示其他的图片,则需要一些图像库来操作了,我用过的paintlib,感觉还是很不错的! 好,做一个吧:ftp://221.226.192.6/test.rar 不管这样,我只想要一段能显示图片的代码,就用.BMP 的图片吧。 zhucde(【風間苍月】) 的让我搞定了,那个MM一定是假睡着,真的睡着了的人看起来都很傻的,一般都不会笑,有的还会流口水什么的。 如何获得对话框的最小化窗口消息? 散分!!!关于读取HTML中内容!(简单) 我写的自删除的代码,编译通过,但是执行的时候不能实现自删除 VC中奇怪的问题 关于SetTimer()的问题,谢谢!! VC 5.0 中实现SMTP的原代码——求救命 在vc7.0中如何在对话中添加鼠标MouseMove事件。 关于无模式对话框创建的问题,为何出现这样错误?(高分求助) 为什么用VC++的wizard编写数据库程序一定要选“文档/视”? c语言的一个问题 还是鼠标:如何使鼠标只能沿网格移动 网络数据传输的中文编码问题?
不过,你需要一些图像库来显示它,免费的库有Paintlib,收费的有奥林岛的leadtools。
在MDI主框架窗口中添加位图
在MDI主框架窗口中添加位图(注意,不是在单个视中):
首先要清楚对于一个MDI应用程序的主框架窗口来说包含一个特殊的子窗口称为MDICLIENT窗口,应用程序的主框架类中有一个成员变量m_hWndMDIClient 指的就是MDICLIENT窗口。MDICLIENT窗口负责管理主框架窗口的客户区,对MDI客户窗口编程有一定的难度。原因是MDIFrameWnd的客户区完全被MDICLIENT窗口覆盖掉了。这样,MDI主窗口类MDIFrameWnd的背景色和光标都不起作用。同时,微软并不支持将MDICLIENT窗口作为子类,MDICLIENT窗口只能使用标准的背景色和光标。所以,对MDI客户窗口编程不能象对普通窗口那样简单地重载WM_PAINT的消息处理函数。我们可以在主框架窗口截获关于MDICLIENT窗口的重画消息,然后加入自己设计的代码。我用PreTranslateMessage(MSG* pMsg) 截获MDI客户窗口WM_PAINT消息,在这个函数中向主框架窗口发送WM_PAINT消息,在该消息的处理函数中实现彩色位图的显示。我的具体实现如下:1、向程序添加256色彩色位图资源,命名为IDB_BITMAP1;2、用ClassWizard向主框架类添加函数CMainFrame::PreTranslateMessage(MSG* pMsg);3、用ClassWizard向主框架类添加函数CMainFrame::OnPaint();现给出两个函数的实现:BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT)
PostMessage(WM_PAINT);
return CMDIFrameWnd::PreTranslateMessage(pMsg);
} void CMainFrame::OnPaint()
{
CDC dc, memdc;
dc.m_hDC=::GetDC(this->m_hWndMDIClient);
CRect rect;
CBitmap bitmap;
BITMAP szbitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
bitmap.GetObject(sizeof(BITMAP),&szbitmap);
CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
memdc.CreateCompatibleDC(&dc);
CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
GetClientRect(&rect);
StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),
memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
memdc.SelectObject(oldbitmap);
memdc.DeleteDC();
dc.DeleteDC();
CMDIFrameWnd::OnPaint();
}
按上述步骤就可以实现在MDI程序中显示彩色位图了,我举的例子用的是256色位图,你也可以实现真彩色位图的显示,具体方法我就不多说了,有兴趣的朋友可以试一试
mdc->CreateCompatibleDC(&dc);
CBitmap *bitmap;
bitmap=new CBitmap;
bitmap->m_hObject=(HBITMAP)
::LoadImage(NULL,path,IMAGE_BITMAP,clRect.Width(),clRect.Height(),LR_LOADFROMFILE);
mdc->SelectObject(bitmap);
dc.BitBlt(clRect.left,clRect.top,clRect.Width(),clRect.Height(),mdc,0,0,SRCCOPY);
if(mdc) delete mdc;
if(bitmap) delete bitmap;