BOOL CXBitmapDlg::OnInitDialog()
{
..................
..................         SetWindowRgn (m_rgn, FALSE);
ShowWindow(SW_SHOW);         m_btnOK.Create......
         m_btnCancle.Create......}
按纽的显示正常,但是点上去没有任何反映,由于这个对话框是DoModal的,只有把程序关了.注释掉SetWindowRgn后,就可以了,但是就没有圆角矩形的效果(这个效果是必须的).
各位高手帮我看看吧,谢谢了!

解决方案 »

  1.   

    点上去没有任何反映,由于这个对话框是DoModal的,只有把程序关了 m_btnOK,和cancel
    你这两个按钮的消息响应做了吗??
      

  2.   

    做了啊,如果把SetWindowRgn (m_rgn, FALSE);注释掉,一切正常(包括按纽)
      

  3.   

    BOOL CXBitmapDlg::OnInitDialog()
    能把这个函数全写出来吗?
      

  4.   

    BOOL CXBitmapDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        SetWindowText(_T("Hello"));
        BITMAP bmp;
        UINT cx,cy;
                    HBITMAP hBitmap=(HBITMAP)LoadImage( AfxGetInstanceHandle(),  
                    MAKEINTRESOURCE(m_uiImgID),
                    IMAGE_BITMAP,
                    0,
                    0,
                    0
                    );
                    CBitmap bitmap;
                    bitmap.Attach(hBitmap);
                    bitmap.GetBitmap(&bmp);
                    cx=bmp.bmWidth;
                    cy=bmp.bmHeight;
                    int x,y;
                    x = GetSystemMetrics(SM_CXSCREEN);
                    y = GetSystemMetrics(SM_CYSCREEN);
                    int height = cy;
                    int width = cx;
                    CDC dcImage;
                    dcImage.CreateCompatibleDC(NULL);
                    CBitmap bmBitmap;
                    bmBitmap.LoadBitmap(m_uiImgID);
                    dcImage.SelectObject(bmBitmap);
                    COLORREF color=RGB(0,255,0);
                    int m_x=0,m_y=0;
                    BOOL bBreak=FALSE;
                    CRgn m_rgn;
                    m_rgn.CreateRectRgn(0, 0, cx, cy);
    //把四个角去掉(四个角的颜色是(0,255,0))
                    for(m_y=0;m_y<15;m_y++)
                    {
                        for(m_x=0;m_x<15;m_x++)
                        {
                            if(dcImage.GetPixel(m_x,m_y)!=color)
                            {
                                if(m_x!=0)
                                {
                                    CRgn rgnAdd;
                                    rgnAdd.CreateRectRgn(0,m_y,m_x,m_y+1);
                                    m_rgn.CombineRgn(&m_rgn,&rgnAdd,RGN_DIFF);
                                }
                                else
                                {
                                    bBreak=TRUE;
                                }
                                break;
                            }
                        }
                        if(bBreak)
                            break;
                    }
                    bBreak=FALSE;
                    for(m_y=height-1;m_y>height-15;m_y--)
                    {
                        for(m_x=0;m_x<15;m_x++)
                        {
                            if(dcImage.GetPixel(m_x,m_y)!=color)
                            {
                                if(m_x!=0)
                                {
                                    CRgn rgnAdd;
                                    rgnAdd.CreateRectRgn(0,m_y,m_x,m_y+1);
                                    m_rgn.CombineRgn(&m_rgn,&rgnAdd,RGN_DIFF);
                                }
                                else
                                {
                                    bBreak=TRUE;
                                }
                                break;
                            }
                        }
                        if(bBreak)
                            break;
                    }
                    bBreak=FALSE;
                    for(m_y=0;m_y<15;m_y++)
                    {
                        for(m_x=width-1;m_x>width-15;m_x--)
                        {
                            if(dcImage.GetPixel(m_x,m_y)!=color)
                            {
                                if(m_x!=width-1)
                                {
                                    CRgn rgnAdd;
                                    rgnAdd.CreateRectRgn(m_x+1,m_y,width,m_y+1);
                                    m_rgn.CombineRgn(&m_rgn,&rgnAdd,RGN_DIFF);
                                }
                                else
                                {
                                    bBreak=TRUE;
                                }
                                break;
                            }
                        }
                        if(bBreak)
                            break;
                    }
                    bBreak=FALSE;
                    for(m_y=height-1;m_y>height-15;m_y--)
                    {
                        for(m_x=width-1;m_x>width-15;m_x--)
                        {
                            if(dcImage.GetPixel(m_x,m_y)!=color)
                            {
                                if(m_x!=width-1)
                                {
                                    CRgn rgnAdd;
                                    rgnAdd.CreateRectRgn(m_x+1,m_y,width,m_y+1);
                                    m_rgn.CombineRgn(&m_rgn,&rgnAdd,RGN_DIFF);
                                }
                                else
                                {
                                    bBreak=TRUE;
                                }
                                break;
                            }
                        }
                        if(bBreak)
                            break;
                    }
                    SetWindowRgn (m_rgn, FALSE);
                    ShowWindow(SW_SHOW);
                    MoveWindow((x-cx)/2, (y-cy)/2+2, cx, cy);
                    DeleteObject(hBitmap);                m_btnOK.Create(NULL, WS_CHILD|WS_VISIBLE, CRect(20,20,20+74,20+29), this, IDC_DIALOG_BTN_OK);
                    m_btnOK.LoadBitmaps(IDB_BK_YES_UP, IDB_BK_YES_DOWN);
                    m_btnOK.ShowWindow(SW_SHOW);                m_btnCancel.Create(NULL, WS_CHILD|WS_VISIBLE, CRect(100,20,100+74,20+29), this, IDC_DIALOG_BTN_CANCLE);
                    m_btnCancel.LoadBitmaps(IDB_BK_NO_UP, IDB_BK_NO_DOWN);
                    m_btnCancel.ShowWindow(SW_SHOW);
        return TRUE;  
    }
      

  5.   

    各位帮我看看啊,今天要release,圆角矩形的效果是必须的啊,真是急死人了