
你这个做法是实现不了列表框的背景图的。
你在对话框的DC中贴图,当然会被列表框覆盖了,这个只是做对话框背景图的一个方法。
列表框做背景图,有几个方案,最简单的,就是在对话框的OnCtrlColor中,用位图刷子代替控件的默认刷子。
不过这个做法,在列表框有文字之后,并不是很理想,要想得到理想效果,需要重载列表框,在OnDrawItem中绘制。
原型:
int WINAPI icePub_copyFormToClipboard(HWND hWnd)
输入:hWnd 窗体句柄,注意窗体不能最小化
输出:
原型:
int WINAPI icePub_formToClipboard(char strFormTitle)
输入:strFormTitle 窗体标题,注意窗体不能最小化
输出:
复制任何当前窗体(获得焦点的)到剪切板
原型:
int WINAPI icePub_copyForegroundFormToClipboard()
输入:
输出:
原型:
int WINAPI icePub_saveClipboardToBmpFile(char strBmpFilename)
输入:
输出:
返回值:屏幕图像的 HBITMAP
extern "C"
{
__declspec(dllexport)
int WINAPI icePub_saveClipboardToBmpFile(char strBmpFilename);
__declspec(dllexport)
int WINAPI icePub_copyFormToClipboard(HWND hWnd);
__declspec(dllexport)
int WINAPI icePub_formToClipboard(char strFormTitle);
__declspec(dllexport)
int WINAPI icePub_copyForegroundFormToClipboard();
}
#pragma comment(lib,"icePubDlllib")
icePub_copyFormToClipboard(m_hWnd);
icePub_saveClipboardToBmpFile("d:\\mebmp");
icePub_formToClipboard("与 行者 交谈中");
icePub_saveClipboardToBmpFile("d:\\qqbmp");
icePub_copyForegroundFormToClipboard();
icePub_saveClipboardToBmpFile("d:\\activebmp");
在按钮按下的时候触发一个事件,在该事件中添加位图(OFF),在d起那个事件中添加ON那个位图即可,然后声明事件。这是我做WTL的时候一些小经验,不过两者差不多方法也很相似。如果没办法的话可以去下载一个按钮重绘类,一般的按钮重绘类都会有位图更新 *** 作的。可追问
SendMessage(hwnd, WM_ERASEBACKGROUND,0,0) 发送消息吧,如果位图按钮没有这个消息你可以自定义消息,在消息中加载位图后,Invalidate(TRUE) 立即刷新即可。
实际上,你所指的地方并未出现问题。关键在于前面的ReleaseDC(pDC);这条语句已经把pDC释放掉了,你后面怎么还能对其引用??此外,第一句pDC=GetDC()显得多余,函数本来就传递过来一个CDC参数,你不用对其赋值。再者,bitmapLoadBitmap(1)、bitmapLoadBitmap(2)中的参数1和2是不是资源的ID?如果工程中没有出现1、2所代表的资源,程序初始化时也会出错
在OnPaint()中加入以下代码
//在对话框中直接显示图像
BITMAP bm;
CBitmap bmp;//定义CBitmap 类的对象
bmpLoadBitmap(IDB_BITMAP1);//装入ID号为IDB_BITMAP1的位图
CDC memdc;//定义CDC类的对象
CRect rect;
memdcCreateCompatibleDC(&dc);//创建与显示DC相兼容的内存DC
bmpGetBitmap(&bm);
CBitmap bmpold=memdcSelectObject(&bmp);//将选定的位图选入内存DC
this->GetClientRect(&rect);
//从内存DC向显示DC复制,rectleft,recttop为图像左上角的坐标,SRCCOPY表示直接将源位图拷贝到目的位图,不作修改
dcBitBlt(rectleft,recttop,bmbmWidth,bmbmHeight,&memdc,0,0,SRCCOPY);
memdcSelectObject(bmpold);
memdcDeleteDC();
bmpDeleteObject();
以上就是关于mfc 在列表框里显示位图问题全部的内容,包括:mfc 在列表框里显示位图问题、MFC将客户区保存为256色位图文件,求个可用的程序代码。、C++的MFC程序怎么点击按钮,然后位图就变成另外一幅等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)