| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3714 人关注过本帖
标题:MFC 窗口贴一个圆形图标有黑边,求高手帮忙看一下
取消只看楼主 加入收藏
Alexfource
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-12-13
收藏
 问题点数:0 回复次数:0 
MFC 窗口贴一个圆形图标有黑边,求高手帮忙看一下
大家受累帮忙看一下,主要是想做一个不规则的图形窗口,主窗口贴图后,把黑色区域给设置为透明了,然后把圆形PNG图贴到窗口上,但是要露到外面 请参考图片样式 但是圆形有黑边锯齿
程序代码:
BOOL CMFC111Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) ^ 0x80000);
    HINSTANCE  hInst = LoadLibrary(_T("User32.DLL"));
    if (hInst != NULL)
    {
        typedef BOOL(WINAPI *MYFUNC)(HWND, COLORREF, BYTE, DWORD);

        MYFUNC pFunc = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
        if (pFunc != NULL)
        {
            pFunc(m_hWnd, RGB(0, 0, 0), 255, LWA_COLORKEY);
        }
        FreeLibrary(hInst);
        hInst = NULL;
    }
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标
    CRect   temprect(0, 0, 420, 476);
    SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);
    // TODO:  在此添加额外的初始化代码    


    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CMFC111Dlg::OnPaint()
{
    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
    {
        //CBitmap FootballBMP;
    //    FootballBMP.LoadBitmap(IDB_BITMAP1);
        //CDC ImageDC;
        //CDC*pDC = GetDC();
        //ImageDC.CreateCompatibleDC(pDC);
        ///CBitmap *pOldImageBMP =ImageDC.SelectObject(&FootballBMP);
        //TransparentBlt(pDC->m_hDC, 0, 0, 420, 476, ImageDC.m_hDC, 0, 0, 420, 476, RGB(0, 0, 0));
        //ImageDC.SelectObject(pOldImageBMP);
        CPaintDC dc(this);
        CBitmap m_bitmap;
        m_bitmap.LoadBitmap(IDB_BITMAP1);
        CDC memdc;
        memdc.CreateCompatibleDC(&dc);
        memdc.SelectObject(&m_bitmap);
        int width, height;

        BITMAP bmp;
        m_bitmap.GetBitmap(&bmp);
        width = bmp.bmWidth;
        height = bmp.bmHeight;
        CRect rect;
        this->GetClientRect(&rect);
        dc.StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(),
            &memdc, 0, 0, width, height, SRCCOPY);
        
        CDialog::OnPaint();

        Graphics graphics(dc);
        Image image(L"icon.png");
        //graphics.SetSmoothingMode(SmoothingModeAntiAlias);
        graphics.DrawImage(&image, 20, 10);
        graphics.SetSmoothingMode(SmoothingModeAntiAlias);
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 应用程序 对话框 图片 
2015-12-13 20:03
快速回复:MFC 窗口贴一个圆形图标有黑边,求高手帮忙看一下
数据加载中...
 
   



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

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