对话框上就一个按钮,怎么才能使对话框透明,而且按钮正常显示,就像按钮直接显示在屏幕上一样?或者有没有其他实现方法,就是加入控件上画了一幅图,然后能够直接显示在屏幕上,没有后面的对话框,多谢了。

解决方案 »

  1.   

    http://topic.csdn.net/u/20100405/13/97f377fc-615a-4732-9199-f3bbdbef028d.html
      

  2.   

    这是不可能的,控件只能跟窗口一起透明化,如果想达到你要的效果,只能用图片贴上去,使用UpdateLayeredWindow 来取代窗口的OnPaint函数进行窗口的刷新。
      

  3.   

    //实现对话框半透明
    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),
    GWL_EXSTYLE)^0x80000);//为窗口加入GWL_EXSTYLE扩展
    HINSTANCE hInst = LoadLibrary(_T("User32.DLL"));//加载动态链接库
    if (hInst)
    {
    //定义函数指针,用于获取系统调用函数SetLayeredWindowAttributes
    typedef BOOL (WINAPI * MYFUNC)(HWND, COLORREF, BYTE, DWORD); 
    MYFUNC fun = NULL; //取得SetLayeredWindowAttributes指针,其原型为:
    COLORREF clr(RGB(0, 0, 0));  //将进行透明处理的颜色
    fun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); 
    if (fun)
    fun(this->GetSafeHwnd(), clr, 220, LWA_ALPHA);//改一下相关参数应该就可以了
    FreeLibrary(hInst);//释放动态链接库
    }
      

  4.   

    上面,把 LWA_ALPHA改成LWA_COLORKEY ,clr设置成你对话框的背景色应该能满足要求了
      

  5.   

    可以
    方法:建立一个对话框
    动态建立几个按钮;主要是确定按钮位置
    在对话框初始化的地方这样处理
    CRgn r1,r2,r3,rn; //建立区域
    r1.CreateRectRgn(x11,y11,x12,y12); //按钮1的区域
    r2.CreateRectRgn(x21,y21,x22,y22); //按钮2的区域
    ........
    r1.CombineRgn(&r1,&r2,3);  //1和2区合并
    r1.CombineRgn(&r1,&r3,3);  //再合并3区
    ......
    SetWindowRgn(r1,true);好了,这就是你要的结果了其实还有很多方法可以达到你的想法,这是比较简单的一种
      

  6.   

    9楼方法不错,如果是不规则按钮需要用region
    colorkey也可以