VC picture控件 背景透明
网上很经典的这个例子,《工控软件图形界面-控件实现(圆形仪表控件二)》,本来仪表盘控件的背景色是绿色的RGB(33,177,138),我想改为透明色的,在绘制仪表背景的函...
网上很经典的这个例子,《工控软件图形界面-控件实现(圆形仪表控件二)》,本来仪表盘控件的背景色是绿色的RGB( 33, 177, 138),我想改为透明色的,在绘制仪表背景的函数DrawMeterBackground里,原代码是 pDC->SetBkColor(m_BackColor); m_brushBack.CreateSolidBrush(m_BackColor); pOldBrush = (CBrush *)pDC->SelectObject(&m_brushBack); pDC->FillRect(rect, &m_brushBack); //绘制背景 pDC->Rectangle(rect); //绘制一个边框 pDC->SelectObject(pOldBrush); m_brushBack.DeleteObject(); 我把这段修改的方法一是: pDC->SetBkColor(TRANSPARENT); 改的本意是希望在picture控件上不绘边框,不填充颜色,直接设置成透明的,这样就只出现仪表盘,不出现绿色的背景,结果背景反倒变成黑色的了。 我又改的方法二是: pDC->FillRect(rect, CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)) 结果是一样的,背景还是黑色的,呜呜! 各位高手大侠们,请问怎么才能使仪表盘的背景透明,就是只显出圆盘,不要圆盘外面绿色的背景,让圆盘跟对话框很好的融合呢,多个绿色背景好郁闷人啊,呜呜,大侠救命啊!!!
展开
1个回答
2013-05-11
展开全部
在OnInitDialog()加入:
//加入WS_EX_LAYERED扩展属性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,128,2); FreeLibrary(hInst); }粗体的地方改为你要更改的颜色RGB
//加入WS_EX_LAYERED扩展属性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,128,2); FreeLibrary(hInst); }粗体的地方改为你要更改的颜色RGB
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询