mfc 在列表框里显示位图问题

mfc 在列表框里显示位图问题,第1张

你这个做法是实现不了列表框的背景图的。

你在对话框的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程序怎么点击按钮,然后位图就变成另外一幅等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10094204.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存