hur.cn - 华软网

 热门搜索

动态创建的按钮,如何将属性设为“透明”?

  作者:未知    来源:网络    更新时间:2010/12/7
哪一个大虾能帮帮助?我onpaint();函数中为对话框设置了背景图,但每次显示时就会把绘制在上面的按钮遮住?
代码以下:
void CjianjieDIALOG::OnPaint() 
{
    CBitmap bm,*pbm;
        BITMAP bmMe;
        bm.LoadBitmap(IDB_BITMAP183);
        bm.GetBitmap(&bmMe);
        CDC mdc;
        CDC *pdc;
        pdc=this->GetDC();
        mdc.CreateCompatibleDC(pdc);
        pbm=mdc.SelectObject(&bm);
        pdc->BitBlt(0,0,bmMe.bmWidth,bmMe.bmHeight,&mdc,0,0,SRCCOPY);
        mdc.SelectObject(pbm);
        bm.DeleteObject();
        mdc.DeleteDC();
        CDialog::OnPaint();
}
按钮创建的代码
myButton[0].Create(my[0],   WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|WS_CLIPCHILDREN,   CRect(245,225,580,280 ),   this,   IDC_BUTTON1); 
请问:我该如何修改,才能在有背景的对话框上显示按钮?
---华软 网友回答---
(1)WS_CLIPCHILDREN样式主要是用于父窗口,也就是说当在父窗口绘制的时候,父窗口上另有一个子窗口,那么设置了这个样式的话,子窗口区域父窗口就不负责绘制。

  (2)所有的overlapped和popup气概的窗口,都有WS_CLIPSIBLINGS 属性。也就是说这类气概的窗口,你是去不掉WS_CLIPSIBLINGS 属性的,不会在它重叠的兄弟窗口绘图;

  (3)更进一步说明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.)

  (4)WS_CLIPSIBLINGS实际上还需要和控件的叠放顺序(z order)配合运用,才能看出明显的效果。


给对话框加上WS_CLIPCHILDREN样式:在对话框的属性页中将clip children勾上。
---华软网友回复---
透明效果直接在WM_CTLCOLOR消息里做:


C++">HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor == CTLCOLOR_BTN)//所有的按钮都透明了
{
pDC->SetBkMode(TRANSPARENT);
return GetStockObject(NULL_BRUSH);
}
return hbr;
}

---华软网友回复---
引用 2 楼 varding 的回复:
透明效果直接在WM_CTLCOLOR消息里做:


C/C++ code
HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(nCtlColor == CTLCOLOR_BTN)//所有的按……

+1
---华软网友回复---
引用 3 楼 ionstorm2 的回复:
引用 2 楼 varding 的回复:

透明效果直接在WM_CTLCOLOR消息里做:


C/C++ code
HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor == ……

+-----------------------------------
+2
---华软网友回复---
不要用CDC
在OnPaint函数里用CPaintDC
不要调用CDialog默许的OnPaint
关于对话框背景你能够看看这篇博客提供的例子
http://blog.csdn.net/xianglitian/archive/2010/11/20/6023656.aspx
---华软网友回复---
1楼大侠你好,我增加了clip children属性,搞定了。多谢,不过编辑框控件刷新的时候会被遮住?这又是怎么回事
---华软网友回复---
5楼已经回答了
CBitmap bm,*pbm;
  BITMAP bmMe;
  bm.LoadBitmap(IDB_BITMAP183);
  bm.GetBitmap(&bmMe);
  CDC mdc;
  CDC *pdc;
 // pdc=this->GetDC();//OnPaint里面不应该用GetDC()的,要用CPaintDC dc(this),如果你一定要用指针的话能够在加上pdc = &dc;
  mdc.CreateCompatibleDC(pdc);
  pbm=mdc.SelectObject(&bm);
  pdc->BitBlt(0,0,bmMe.bmWidth,bmMe.bmHeight,&mdc,0,0,SRCCOPY);
  mdc.SelectObject(pbm);
  bm.DeleteObject();
  mdc.DeleteDC();
//  CDialog::OnPaint();这句不需要了

---华软网友回复---
myButton[0].Create(my[0],   WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|WS_CLIPCHILDREN,   CRect(245,225,580,280 ),   this,   IDC_BUTTON1); 
上面是动态创建的按钮,如何修改默许字体?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。