标题:请大家给看看问题出在哪了? 问什么静态文本框不透明 还是初始灰色的窗口?
只看楼主
dick327
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-10-27
 问题点数:0 回复次数:4 
请大家给看看问题出在哪了? 问什么静态文本框不透明 还是初始灰色的窗口?
我用这个给附上背景
void CDlgLogin::OnPaint()
{
    PAINTSTRUCT ps;   
    CDC *dc=BeginPaint(&ps);   
    CDC memdc;   
    CRect rect;   
    CBitmap bitmap;   
    BITMAP szbitmap;  
    bitmap.LoadBitmap(IDB_IMG_LOGINBG);                    //背景图片ID
    bitmap.GetObject(sizeof(BITMAP),&szbitmap);   
    CSize size(szbitmap.bmWidth,szbitmap.bmHeight);   
    memdc.CreateCompatibleDC(dc);   
    CBitmap *oldbitmap=memdc.SelectObject(&bitmap);   
    GetClientRect(&rect);   
    dc->StretchBlt(0,0,rect.Width(),rect.Height(),   
        &memdc,0,0,size.cx,size.cy,SRCCOPY);   
    memdc.SelectObject(oldbitmap);   
    memdc.DeleteDC();   
    EndPaint(&ps);

    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();    
    }
}

在给上面的静态文本进行透明化
HBRUSH CDlgLogin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{  
    if(pWnd->GetDlgCtrlID() == CTLCOLOR_STATIC)   //   ID_YOURCTRL是要透明的control的ID   
     {   
         pDC->SetBkMode(TRANSPARENT);   
         return (HBRUSH)GetStockObject(NULL_BRUSH);   
     }   
     else   
     {   
         return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);   
     }   
}   

但是运行后只有主窗口有背景,而静态文本等都还是原来的灰色窗口,没有透明显示主窗口背景,请教这是怎么回事?
搜索更多相关主题的帖子: 文本 静态 灰色 窗口 
2008-11-06 16:09
zhangyafei4353
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-11-28
得分:0 
我按照你提供的代码自己编写了一个程序,可以实现静态文本框透明。。。
    ‘if(pWnd->GetDlgCtrlID() == CTLCOLOR_STATIC)’  ,你确定CTLCOLOR_STATIC是透明的control的ID 吗?按照你的标注,CTLCOLOR_STATIC换成ID_YOURCTRL应该就好了,试试看,可能原因在这里。。。
2008-11-30 17:42
沼泽
Rank: 4
等 级:业余侠客
威 望:8
帖 子:291
专家分:228
注 册:2008-9-15
得分:0 
pWnd->GetDlgCtrlID() 得到的是具体的控件的ID号,而CTLCOLOR_STATIC是指控件的类型,所以if(pWnd->GetDlgCtrlID() == CTLCOLOR_STATIC)有问题;
可以这样if(nCtlColor== CTLCOLOR_STATIC)
或者想楼上所的那样
2008-12-01 10:20
zhangyafei4353
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-11-28
得分:0 
我是根据代码试出来的,现在才知道:
pWnd->GetDlgCtrlID() 得到的是具体的控件的ID号
CTLCOLOR_STATIC      是指控件的类型
学习
2008-12-01 10:29
dick327
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-10-27
得分:0 
已经解决了  代码没有问题 换一台电脑就可以使用了
2008-12-01 18:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-242770-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015289 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved