⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_28230.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:28230 发表者:radargroup 发表日期:2003-01-19 17:24:20
<br>主题:这个方法为什么显示不出位图:(
<br>内容:程序运行的了,但是调试到hbitmap,发现返回hbitmap为空.可是,参数输入都挺好呀!<BR>怎么回事?<BR><BR>void CSplashWnd::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFile fbmp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Open("Sunset.bmp",CFile::modeRead|<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFile::typeBinary|CFile::shareExclusive);//打开文件<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Seek(54,CFile::begin);//位图文件头为54字节<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.ReadHuge(pBitsSrc,(long)(iW*iH*3));//读文件<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Close();//关闭文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmap=::CreateDIBitmap(dc.m_hDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(BITMAPINFOHEADER FAR*)&amp;(Info.Header),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBM_INIT,pBitsSrc,(LPBITMAPINFO)&amp;Info,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIB_RGB_COLORS);//建立位图<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HDC hMemDC=::CreateCompatibleDC(dc.m_hDC);//建立内存<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmapOld=SelectBitmap(hMemDC,hBitmap);//选择对象<BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;::StretchBlt(dc.m_hDC,0,0,iW,iH,hMemDC,0,0,iW,iH,SRCCOPY);//显示真彩位图<BR><BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;::DeleteObject(SelectObject(hMemDC,hBitmapOld));//删除位图<BR><BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:upstream 回复日期:2003-01-19 19:49:33
<br>内容:pBitsSrc,iW,iH等都是怎么定义的?<BR>我帮你 look look。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:radargroup 回复日期:2003-01-20 11:49:23
<br>内容:大体是这样的<BR>iw = 600; ih = 450;<BR>pBitsSrc = ::GlobalAlloc(GMEM_FIXED,sizeof(iw*ih*3));
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:booky 回复日期:2003-01-20 13:39:37
<br>内容:找一份BMP文件格式的文章看看。除了信息头和文件头之外,它的每行的的字节数必须是4的倍数,如果不能被4整除则补零
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:radargroup 回复日期:2003-01-20 17:20:58
<br>内容:代码如下:怎么改?<BR><BR>CSplashWnd::CSplashWnd()<BR>{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;iW=600;iH=450;//位图的宽度和高度<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Info.Header.biSize=sizeof(BITMAPINFOHEADER);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Info.Header.biWidth=iW;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Info.Header.biHeight=iH;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Info.Header.biPlanes=1L;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Info.Header.biBitCount=24L;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hBitsSrc=::GlobalAlloc(GHND,(long)(iW*iH*3));//分配内存<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pBitsSrc=(LPSTR)::GlobalLock(hBitsSrc);//加锁内存<BR>}<BR><BR>void CSplashWnd::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CFile fbmp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Open("Sunset.bmp",CFile::modeRead|<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFile::typeBinary|CFile::shareExclusive);//打开文件<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Seek(54,CFile::begin);//位图文件头为54字节<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.ReadHuge(pBitsSrc,(long)(iW*iH*3));//读文件<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;fbmp.Close();//关闭文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmap=::CreateDIBitmap(dc.m_hDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(BITMAPINFOHEADER FAR*)&amp;(Info.Header),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBM_INIT,pBitsSrc,(LPBITMAPINFO)&amp;Info,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIB_RGB_COLORS);//建立位图<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HDC hMemDC=::CreateCompatibleDC(dc.m_hDC);//建立内存<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmapOld=SelectBitmap(hMemDC,hBitmap);//选择对象<BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;::StretchBlt(dc.m_hDC,0,0,iW,iH,hMemDC,0,0,iW,iH,SRCCOPY);//显示真彩位图<BR> <BR>&nbsp;&nbsp;&nbsp;&nbsp;::DeleteObject(SelectObject(hMemDC,hBitmapOld));//删除位图<BR><BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:booky 回复日期:2003-01-20 19:25:13
<br>内容:关键部分是,结构体BITMAPFILEHEADER,BITMAPINFOHEADER的值是从文件中得到,而不是由你指定。其他的流程是对的。我写过的程序不在手边,明天如果记得带过来就贴出来。不过网上有很多的例子,应该好找。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lixiang 回复日期:2003-01-20 20:43:57
<br>内容:直接用LoadImage()就可以了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:吴澄埃 回复日期:2003-01-26 11:52:19
<br>内容:<BR>其实,这是从磁盘上载入一.bmp的文件并显示的问题。<BR>下面,我就以对话框里显示它为例子:<BR>1.首先,初始化。<BR>BOOL CLTBDlg::OnInitDialog()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnInitDialog();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Add "About..." menu item to system menu.<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// IDM_ABOUTBOX must be in the system command range.<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(IDM_ABOUTBOX &lt; 0xF000);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CMenu* pSysMenu = GetSystemMenu(FALSE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pSysMenu != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString strAboutMenu;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strAboutMenu.LoadString(IDS_ABOUTBOX);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!strAboutMenu.IsEmpty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_SEPARATOR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Set the icon for this dialog.&nbsp;&nbsp;The framework does this automatically<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;when the application's main window is not a dialog<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetIcon(m_hIcon, TRUE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set big icon<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetIcon(m_hIcon, FALSE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set small icon<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add extra initialization here<BR><BR>//==============下面就是我们要加入初始化的======<BR>&nbsp;&nbsp; HBITMAP m_hBmp = (HBITMAP)::LoadImage(0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"game.bmp",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_BITMAP,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;_ASSERT(m_hBmp!=NULL);<BR>&nbsp;&nbsp; m_pBmp = CBitmap::FromHandle(m_hBmp);<BR>//======================================<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;&nbsp;&nbsp;// return TRUE&nbsp;&nbsp;unless you set the focus to a control<BR>}<BR><BR>2.就是显示了。在OnPaint()函数加入:<BR>void CLTBDlg::OnPaint()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (IsIconic())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Center icon in client rectangle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int cxIcon = GetSystemMetrics(SM_CXICON);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int cyIcon = GetSystemMetrics(SM_CYICON);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int x = (rect.Width() - cxIcon + 1) / 2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int y = (rect.Height() - cyIcon + 1) / 2;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Draw the icon<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.DrawIcon(x, y, m_hIcon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>//=================下面就是我们加入的罗=============<BR>&nbsp;&nbsp; CPaintDC dc(this);<BR>&nbsp;&nbsp; BITMAP bm;<BR>&nbsp;&nbsp; CDC dcMem;<BR>&nbsp;&nbsp; VERIFY(m_pBmp-&gt;GetObject(sizeof(bm),(LPVOID)&amp;bm));<BR>&nbsp;&nbsp; dcMem.CreateCompatibleDC(&amp;dc);<BR>&nbsp;&nbsp; CBitmap *pOldBMP=(CBitmap *)dcMem.SelectObject(m_pBmp);<BR>&nbsp;&nbsp; //BitBlt(dc.m_hDC,0, 0, bm.bmWidth, bm.bmHeight, dcMem.m_hDC, 0, 0, SRCCOPY);<BR><BR>&nbsp;&nbsp; dc.StretchBlt(150, 100, 6*(bm.bmWidth),6*(bm.bmHeight), //rect.Width(), rect.Height(),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;dcMem,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 0, bm.bmWidth, bm.bmHeight,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SRCCOPY);<BR><BR>&nbsp;&nbsp; dcMem.SelectObject(pOldBMP);<BR><BR>//===================================================<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>就这么简单,载入并显示一个磁盘.bmp文件!给分呵 :)<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:radargroup 回复日期:2003-01-27 10:21:25
<br>内容:谢谢wucheng_ai,但是我只是想用另一种方法显出位图来,你的那种我会的。现在我已经把我的代码改了。但我想问一下,给分就是点接受你的答案,是吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:booky 回复日期:2003-01-27 17:00:24
<br>内容:里面是用API写的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:吴澄埃 回复日期:2003-01-27 19:47:48
<br>内容:对呀,给分就是点接受你的答案。你我都个好学的人呵,答案都是有多种的罗,钻研一下,真是好有乐趣。:)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -