如何将Dialog上的控件透明?
我在Dialog上设置了背景图,可是标签栏,单选框控件的背景都是灰色的,如何能他们透明,就像是写在背景图上的一样?
已经设置了他们的ws_ex_transperant样式,不过没有效果。
问题点数:50、回复次数:16Top
1 楼snaill(com.chinaos.snaill)回复于 2002-07-29 17:48:14 得分 0
没人知道吗?Top
2 楼wwwllg(野蛮人)回复于 2002-07-29 18:07:28 得分 10
HBRUSH CLineSelDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)//其它控件一样
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(255,255,255));//此处你可以改成与你的对话框相同的背景色就可以了,我是这样做的,郊果很好。
}
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
return hbr;
}
Top
3 楼yy23rock(云云)回复于 2002-07-29 18:09:59 得分 5
很简单呀!
如:STATIC:
自己从CSTATIC类里派生一个CMYSTATIC类,在WM—PAINT消息映射函数里用用DRAWTEXT()函数来“画”它就行了!
以下代码共参考:
....
CRect rc;
GetWindowRect(rc);
ScreenToClient(rc);
pDC->SetTextColoor(RGB(0,0,0));
pDC->SetModel(1);
pDC->DrawText("THIS IS TRANSPARENT STATIC!",DT_CENTER);
return true;
...
}Top
4 楼yy23rock(云云)回复于 2002-07-29 18:12:16 得分 5
在OnCtlColor()里做的话在9X里没有问题,但是在2000下不起作用的,而且也只能改变背景颜色,不能实现透明背景,最好还是在WM—PAINT里自己“画”它!Top
5 楼siphonelee(sifone)回复于 2002-07-29 18:16:10 得分 0
upTop
6 楼anni(维生素C)回复于 2002-07-29 18:18:51 得分 0
upTop
7 楼snaill(com.chinaos.snaill)回复于 2002-07-29 18:23:20 得分 0
透明的单选框如何实现呢?Top
8 楼howtotell(从何谈起)回复于 2002-07-30 00:03:54 得分 10
加在OnInitDialog中整个窗体都透明了.win 2000下绝对可以.
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);
}Top
9 楼snaill(com.chinaos.snaill)回复于 2002-07-30 10:42:45 得分 0
满复杂的,我的程序要支持98的Top
10 楼masx(一条人)回复于 2002-07-30 13:53:07 得分 0
upTop
11 楼tigermount(智者爱山,仁者爱水)回复于 2002-07-31 12:54:20 得分 5
OnCtlColor()函数可以实现!Top
12 楼Dreamer7901()回复于 2002-07-31 14:39:15 得分 5
重载控件的自绘函数!Top
13 楼snaill(com.chinaos.snaill)回复于 2002-08-01 13:02:58 得分 0
OnCtlColor可以实现背景色,如何能让背景透明?
自绘函数如何实现?有具体的吗?
我copy了父窗体Button位置,可是只显示出灰色。(父窗体是贴有背景图的Dialog)为什么?Top
14 楼chenosaur(紫色海王星)回复于 2002-08-04 23:13:41 得分 10
响应WM_CTLCOLOR消息,如下所示:
如果需要全部的control都透明:
HBRUSH CYourDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
如果需要指定的control透明:
HBRUSH CYourDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(pWnd->GetDlgCtrlID() == ID_YOURCTRL) // ID_YOURCTRL是要透明的control的ID
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
else
{
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
Top
15 楼wq_quake(Paladin 象风一样的游侠)回复于 2002-10-09 23:43:08 得分 0
试都没试过就在那瞎写,骗谁呢!
写一段像样的代码出。别在那瞎嚷嚷!讨厌。Top




