我在dialog放了一副图片, 还有edit,listcontrol控件, 控件的背景是白色的和
对话框上的图片很不协调,有什么方法可以使这些控件的背景透明 (改背景颜色不行)
望具体指点!!
对话框上的图片很不协调,有什么方法可以使这些控件的背景透明 (改背景颜色不行)
望具体指点!!
解决方案 »
- 在MFC程序开发中,如何通过单击按钮来切换edit control的number=false or true?
- 修改后的软件提示“关键文件受损”如何解决?
- 程序怎样获得文件名?
- vc2005中插入多张图片!!!
- 怎么获得输入音频的频率,或者是波形?
- ####在选择程序工作目录的时候,如何在“BROWSEINFO”产生的“浏览文件夹”对话框中加入“新建文件夹”按钮??
- 数据库存取图片的问题
- 现在的问题是,是基于对话框的工程中,菜单命令如可能实现
- 如何在程序运行过程中改变静态控件或文本框的颜色啊
- 请问如何获取线程中创建的对象?
- 请问3721病毒是什么来的??
- 程序无法探测局域网上网,请问如何解决?
对listcontrol and edit 不行
edit里面能放图片进去么?
{
//
if(nCtlColor==CTLCOLOR_STATIC) {
pDC->SetBkMode(TRANSPARENT );
pDC->SetTextColor(RGB(255,0,0));
}
你的方法我用过但只对dialog上的static text管用
对我想要的edit和listcontrol就不行了
HBRUSH b;
a.LoadBitmap(IDB_zxj);\\IDC_zxj是想要的的资源背景图
b=::CreatePatternBrush(a);UINT nID =pWnd->GetDlgCtrlID();
return b;
HBRUSH b;
a.LoadBitmap(IDB_zxj);\\IDC_zxj是想要的的资源背景图
b=::CreatePatternBrush(a);UINT nID =pWnd->GetDlgCtrlID();if(nID==xxxxxx)//控件ID
return b;
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(NULL);
CBrush nbr;
nbr.CreateSolidBrush(RGB(255,255,128));
return nbr;
}
return hbr;
}
记住,一定要写在父窗口的OnCtlColor()里!
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,230,2);
FreeLibrary(hInst);
}
1.为控件设计一个拦截函数(如PreWndProc),其中检测是否为WM_ERASEBKGND消息,如是就放弃处理并返回,否则交与控件自身的WndProc处理;
2.在控件初始化时,用GetWindowLong获取控件的WndProc函数入口指针,并储存起来备用(PreWndProc中要用);用SetWindowLong把控件窗口处理函数的入口设置为你设计的拦截函数(PreWndProc)的入口。
这样就达到了拦截的目的。通过该方法可以拦截发送给控件的所有消息。这是控件二次开发时常用的方法。