精华内容
下载资源
问答
  • 近期项目中需要在一个MFC对话框...最开始的方案是在dlg上添加一个picture控件来加载背景图片,OnTimer事件中控制轮播;在picture上添加5个radio按钮,radio按钮用的是网上下载的一个类CxSkinButton,将圆圈图片添加到bi
    近期项目中需要在一个MFC对话框中轮播显示图片,效果如下:

    一共5张背景图,图上有5个小圆点轮流播放显示,并且小圆点加亮,右上角是关闭按钮,鼠标放上去按钮变红色。
    最开始的方案是在dlg上添加一个picture控件来加载背景图片,OnTimer事件中控制轮播;在picture上添加5个radio按钮,radio按钮用的是网上下载的一个类CxSkinButton,将圆圈图片添加到bitmap资源中,初始化对话框时设置按钮的图片,这个类将选中,未选中,鼠标移上,鼠标移开灯状态都处理好了,m_radioP1.SetSkin(IDB_BITMAP_LOGIN_NORMAL, IDB_BITMAP_LOGIN_CHECK, IDB_BITMAP_LOGIN_GREEN, IDB_BITMAP_LOGIN_NORMAL, 0, IDB_BITMAP_LOGIN_MASK, 0, 0, 0);
    轮播到当前图片时将对应的radio属性设置为SetCheck(1);右上角的关闭图片也用的bmp(这个类的缺点是不支持png格式),做完之后小圆点的效果还可以切换都没有问题,右上角的关闭按钮在图片切换时会漏出白底,初始化时没问题;因此就想换种方式显示。
    最终在看了网上的一些解决方案后,选择用GDI+直接在dlg上画图,右上角的关闭不用按钮也直接贴图,OnMouseMove中根据鼠标位置切换图片,当鼠标移动上去时显示红底图片,移开显示初始图片;
    具体实现代码如下:
    首先是添加gdi+
    1.在Stdafx.h头文件中添加如下代码
    #include <GdiPlus.h>
    #pragma comment(lib, "Gdiplus.lib")
    2.在C**App类中,添加两个变量,用于GDI+初始化函数。
    private :
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    3.在C**App::InitInstance()函数中添加如下代码
    // Initialize GDI+.
    Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    4.重载C**App的ExitInstance()函数,然后添加GDI+关闭函数。
    Gdiplus::GdiplusShutdown(gdiplusToken);
    5.OnPaint()函数中添加显示图片代码,适应DPI变化
    CDC *pDC;
    pDC = GetDC();
    CRect rect;
    GetClientRect(&rect); //获取客户区大小
    Graphics graphics(pDC->m_hDC);
    Image image(m_sPath, FALSE);
    graphics.DrawImage(&image, 0, 0, 428 * g_UI_dpix / 96.0, 182 * g_UI_dpiy / 96.0); //绘制背景

    Graphics graphics1(pDC->m_hDC);
    CString s;
    CZSTApp* p = (CZSTApp*)(AfxGetApp());
    s = p->GetPath();
    s = s + L"\\resource\\close1.png";
    Image image1(s, FALSE);
    graphics1.DrawImage(&image1, rect.Width()-25, 0, 25, 25); //绘制关闭按钮
    6. OnMouseMove()中添加代码实现鼠标移动的效果;
    CRect rectmain;
    GetClientRect(&rectmain); //获取客户区大小
    CRect rect(rectmain.Width() - 25, 0, rectmain.Width(), 25); //创建一个矩形区
    if (rect.PtInRect(point)) //判断该点是否在此矩形区内
    {
    CDC *pDC;
    pDC = GetDC();
    Graphics graphics1(pDC->m_hDC);
    CString s;
    CZSTApp* p = (CZSTApp*)(AfxGetApp());
    s = p->GetPath();
    s = s + L"\\resource\\close2.png";
    Image image1(s, FALSE);
    graphics1.DrawImage(&image1, rectmain.Width() - 25, 0, 25, 25); //绘制关闭按钮

    }
    else
    {
    CDC *pDC;
    pDC = GetDC();
    Graphics graphics1(pDC->m_hDC);
    CString s;
    CZSTApp* p = (CZSTApp*)(AfxGetApp());
    s = p->GetPath();
    s = s + L"\\resource\\close1.png";
    Image image1(s, FALSE);
    graphics1.DrawImage(&image1, rectmain.Width() - 25, 0, 25, 25); //绘制关闭按钮

    }
    7. OnLButtonDown()中添加代码实现鼠标点击叉号图片关闭对话框。

    CRect rectmain;
    GetClientRect(&rectmain); //获取客户区大小
    CRect rect(0, 0, rectmain.Width(), 25); //创建一个矩形区 鼠标左键按住移动窗口
    CRect rect1(rectmain.Width() - 25, 0, rectmain.Width(), 25); //创建一个矩形区 关闭按钮区
    if (rect1.PtInRect(point)) //判断该点是否在此矩形区内
    {
    OnCancel();
    }
    if (rect.PtInRect(point)) //判断该点是否在此矩形区内
    {
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
    }
    else // 其他位置点击调整到网页链接
    {
    ShellExecute(0, NULL, L"http://www.baidu.com", NULL, NULL, SW_NORMAL);
    }
    8.最后在ontimer轮播图片时记着要 Invalidate();
    最终效果:

    展开全文
  • MFC按钮背景图片

    2013-08-31 18:28:49
    在oninitdld()中加:还得设置按钮位图属性 ((CButton *)GetDlgItem(IDC_BUTTON1))-&gt;SetBitmap(::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)));

    在oninitdld()中加:还得设置按钮位图属性

    ((CButton *)GetDlgItem(IDC_BUTTON1))->SetBitmap(::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)));

    展开全文
  • MFC添加背景图片

    千次阅读 2019-06-19 09:22:13
    很长时间没有接触MFC相关的知识了,我大概是在大二时候...这篇文章主要是回顾以前的MFC基础知识,给对话框添加背景图片和给按钮button添加背景图片;希望此篇基础性文章对大家有所帮助!同时为下次做MFC相关知识提供...

      很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识。的确,任何知识一段时间过后都比较容易忘记,但回顾起来还是很有印象的。
            这篇文章主要是回顾以前的MFC基础知识,给对话框添加背景图片和给按钮button添加背景图片;希望此篇基础性文章对大家有所帮助!同时为下次做MFC相关知识提供点此时所想所感吧。内容比较简单,高手飘过~

    一. 对话框背景添加图片

            首先通过VS2012创建MFC对话框应用程序,项目名为RecoveryMovie;然后在资源视图中打开Dialog,即IDD_RECOVERYMOVIE_DIALOG,再编辑对话框删除默认内容。
            第二步右键“资源视图”中的项目名称,添加资源。

            第三步添加选择Bitmap导入图片,图片文件最好放在项目res目录中,同时是BMP格式图片。上传后的图片如下图所示IDB_BITMAP1。

      
            第四步打开“解决方案”中XXXDlg.cpp文件(该对话框对应的源文件),找到OnPaint()函数,修改else部分代码,如下:
      

      else
        {
            //注释该语句:防止重复调用重画函数
            //CDialogEx::OnPaint();
     
            //添加代码对话框背景贴图
            CPaintDC   dc(this);   
            CRect   rect;   
            GetClientRect(&rect);                                 //获取对话框长宽       
            CDC   dcBmp;                                           //定义并创建一个内存设备环境
            dcBmp.CreateCompatibleDC(&dc);                         //创建兼容性DC
            CBitmap   bmpBackground;   
            bmpBackground.LoadBitmap(IDB_BITMAP1);                 //载入资源中的IDB_BITMAP1图片
            BITMAP   m_bitmap;                                     //图片变量                
            bmpBackground.GetBitmap(&m_bitmap);                    //将图片载入位图中
            CBitmap   *pbmpOld=dcBmp.SelectObject(&bmpBackground); //将位图选入临时内存设备环境  
            //调用函数显示图片 StretchBlt显示形状可变
            dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcBmp,0,0,
                m_bitmap.bmWidth,m_bitmap.bmHeight,SRCCOPY);       
     
            /******************************************************/
            /** StretchBlt()                                     **/
            /** 参数x、y位图目标矩形左上角x、y的坐标值 居中      **/
            /** nWidth、nHeigth位图目标矩形的逻辑宽度和高度      **/
            /** pSrcDC表示源设备CDC指针                          **/
            /** xSrc、ySrc表示位图源矩形的左上角的x、y逻辑坐标值 **/
            /** dwRop表示显示位图的光栅操作方式                  **/
            /** SRCCOPY用于直接将位图复制到目标环境中            **/
            /******************************************************/
        }


            此时运行程序即可显示背景图片,同时你拉伸对话框时可能会出现闪动Bug。
            因此你可以设置Dialog的属性Border为Dialog Frame(对话框外框),默认的Resizing是可以调控大小的。
            注意:如果图像出现失贞,添加代码如下:
    dc.SetStretchBltMode(COLORONCOLOR);// 若不设置这个模式,图片会严重失真
    dc.StrtchBlt....

    二. 按钮BUTTON添加背景图片

            首先在“资源视图”中给Dialog添加3个按钮,分别为IDC_BUTTON1、IDC_BUTTON2和IDC_BUTTON3,如下图所示:
     
            第二步按照前面的方法添加资源:按钮背景图片,即“播放视频”图片。添加后在资源视图中选中图片资源,点击属性可以修改ID值。如下图所示,把IDB_BITMAP2修改为IDB_StartMovie1。
      
            第三步通过快捷键(Ctrl+Shift+X或视图->类向导)打开“类向导”,选择类名为CRecoverMovieDlg,在成员变量中点击添加变量,如下图添加3个按钮的成员变量。
     


            此时你会发现在XXXDlg.cpp中函数DoDataExchange()中会自动增加下面DDX_Control()的代码:

    void CRecoveryMovieDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_BUTTON1, m_buttonstart);
        DDX_Control(pDX, IDC_BUTTON2, m_buttonfix);
        DDX_Control(pDX, IDC_BUTTON3, m_buttonexit);
    }


            第四步在XXXDlg.cpp中找到初始化函数OnInitDialog(),在“// TODO:在此添加额外的初始化代码”中添加如下代码:
        // TODO: 在此添加额外的初始化代码
     
        //初始化窗口 设置窗口为500*500大小
        MoveWindow(0,0,500,500);  

     
        /*******************************************************************************/
        /* (重点知识:实现按钮位置设置)                                                 */
        /*    1.使用Ctrl+Shift+X打开类资源导向 增加开始\结束按钮的成员变量 Button型    */
        /*    2.使用函数SetWindowPos()设置两个按钮的位置                               */
        /*******************************************************************************/
     
        /*******************************************************************************/
        /* SetWindowPos()函数                                                          */
        /*        参数:const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags */
        /*      hwnd是窗口的句柄,x、y、cx、cy分别是窗口的x和y坐标、宽和高度           */
        /*      hWndInsertAfter用来指定窗口的Z位置,代表深度.这个参数接受5种值:         */
        /*  HWND_BOTTOM、 HWND_NOTOPMOST、HWND_TOP、HWND_TOPMOST或者另一个窗口的句柄   */
        /*      wFlags用来指定附加的选项                                               */
        /*******************************************************************************/
     
        //窗口句柄设置为NULL SWP_SHOWWINDOW显示窗口  SWP_NOSIZE保持当前大小忽略cx\xy故设置为0
        m_buttonstart.SetWindowPos(NULL,20,280,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);   
        m_buttonfix.SetWindowPos(NULL,20,325,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);  
        m_buttonexit.SetWindowPos(NULL,20,370,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);  
     
        //设置按钮属性 点击按钮背景图片变换
        m_buttonstart.LoadBitmaps(IDB_StartMovie1,IDB_StartMovie2);
        m_buttonfix.LoadBitmaps(IDB_StartMovie1,IDB_StartMovie2);
        m_buttonexit.LoadBitmaps(IDB_StartMovie1,IDB_StartMovie2);
     
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE


           此时你运行程序会出现如下错误:Error class "CButton"没有成员“LoadBitmaps”。函数LoadBitmaps()的功能是点击按钮实现两张背景图片的替换。
     

            第五步需要在XXXDlg.h头文件中把public成员变量CButton全部修改为CBitmapButton,如下图为修改第一个变量所示:
     

    // CRecoveryMovieDlg 对话框
    class CRecoveryMovieDlg : public CDialogEx
    {
    // 构造
    public:
        CRecoveryMovieDlg(CWnd* pParent = NULL);    // 标准构造函数
     
    // 对话框数据
        enum { IDD = IDD_RECOVERYMOVIE_DIALOG };
     
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
     
    // 实现
    protected:
        HICON m_hIcon;
     
        // 生成的消息映射函数
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    public:
        CBitmapButton m_buttonstart;
        CBitmapButton m_buttonfix;
        CBitmapButton m_buttonexit;
    };


            第六步:此时虽然你能运行程序,但是按钮背景依然没有,因为你还需要分别设置三个按钮的属性“Owner Draw”为True,它指定按钮为所有者描述的按钮。
            运行结果如下图所示:
     
            最后希望文章对大家有所帮助,如果文章中有不足之处或错误的地方,还请海涵!个人推荐初学者尤其很多老师布置作业需要用MFC完成的可以学习,没有什么语言流行,它们都是贯通的,都需要一步一个脚印的去学习。
            (By:Eastmount 2015-4-27 深夜3点   http://blog.csdn.net/eastmount/)
    --------------------- 
    作者:Eastmount 
    来源:CSDN 
    原文:https://blog.csdn.net/eastmount/article/details/45297399 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • MFC 按钮 增加背景图片美化美观
  • 添加两个按钮和一个编辑框,一个按钮用来直接更改背景颜色(MFCButton),另一个按钮用来加载背景图片(Button)。 1 针对MFCButton的操作。 给MFCButton添加一个变量,变量类型:CMFCButton m_button; 在...

    新建一个MFC工程。添加两个按钮和一个编辑框,一个按钮用来直接更改背景颜色(MFCButton),另一个按钮用来加载背景图片(Button)。

    1 针对MFCButton的操作。

    给MFCButton添加一个变量,变量类型:CMFCButton m_button;

    在OnInitDialog()函数中把MFCButton的背景颜色和字体颜色进行初始化:

    m_button.SetFaceColor(RGB(56,56,56));         //更改按钮背景颜色
    m_button.SetTextColor(RGB(177,177,177));      //更改按钮名称颜色

    更改完毕。

    2 针对Button的操作

    给Button添加变量,变量类型:CBitmapButton m_bitmap;

    把Button的属性 Owner Draw :False->True;

    给工程添加资源bitmap:IDB_BROWSE

    在OnInitDialog()函数中把Button的背景图片进行初始化:

    m_bitmap.LoadBitmaps(IDB_BROWSE);
    m_bitmap.SizeToContent();

    给Button添加处理程序,并在处理程序的首句添加:m_bitmap.EnableWindow();

    3 针对Edit Control的操作

    给edit control控件添加变量,变量类型:CEdit m_edit;

    在自定义一个画刷变量:CBrush m_brush;

    在XDlg.h中添加:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

    在XDlg.cpp中添加函数:

    //对话框背景颜色
    HBRUSH CBlog_ButtonDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);


    /* TODO:  在此更改 DC 的任何特性
    //更改静态文本颜色
    if(nCtlColor == CTLCOLOR_STATIC)
        {
            pDC->SetBkMode(TRANSPARENT);//设置背景透明
            pDC->SetTextColor(RGB(177,177,177));//设置字体为黄色
            return (HBRUSH)::GetStockObject(NULL_BRUSH);
         }


    */
      if(pWnd-> GetDlgCtrlID() == IDC_EDIT1)
    {
       pDC->SetBkColor(RGB(56,56,56));
       pDC->SetTextColor(RGB(177, 177, 177));
       return (HBRUSH)GetStockObject(NULL_BRUSH);


    }
     
    /*if (pWnd == this)
         {
            return m_brush;
         }*/


    // TODO:  如果默认的不是所需画笔,则返回另一个画笔
    return (HBRUSH)m_brush;
    }

    和ON_WM_CTLCOLOR()。

    结束。


    展开全文
  • VS2010/MFC 按钮控件添加bmp图片背景

    千次阅读 2015-03-03 15:48:25
    很简单。 在BOOL CMainPanelDlg::OnInitDialog()...//设置按钮背景图片 HBITMAP hBitmapCollection; hBitmapCollection = (HBITMAP)::LoadImage(NULL,L"res/collection.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_
  • MFC设置背景图片之二

    2018-11-27 14:17:15
    上面已经说过一种设置背景图片的方法,但那种方法只能显示指定大小的图片,不能契合窗口大小,这里提供第二种方法 添加资源 向MFC添加图片相信没问题了,上一篇主要就是说明如何向MFC资源中添加图片,现在我们的图片...
  • 很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC... 这篇文章主要是回顾以前的MFC基础知识,给对话框添加背景图片和给按钮button添加背景图片;希望此篇基础性文章对大家有所帮助!同时为下次做MFC相...
  • MFC添加背景图片,位图

    千次阅读 2016-05-05 10:21:21
    添加背景图片、Button位图
  • MFC中,应用CBitmapButton就可以实现图形按钮。CBitmapButton类继承自CButton类。你可以为图形按钮指定四张图片,分别对应按钮的四种不同状态: 正常显示(Up),鼠标按下(Down),获得焦点(Focused),不可用...
  • 网上看到的设置背景图片都是重载OnPaint(),我根本就找不到CTestDlg::OnPaint(),OnPaint是不是private还是protect的? 我自己写会提示说在CTestDlg中没有定义OnPaint(),还有图片按钮一般是怎么做的?我的是基于...
  • MFC 基础知识:对话框背景添加图片按钮Button添加图片.pdf
  • 对话框上放了个picture控件,背景图占据了对话框所有的背景,创建动态按钮的时候怎么把按钮置顶??
  • MFC:点击按钮改变MFC背景图片,不是改变button的背景图片,是MFC主窗口的背景图片。只有25分大神见谅
  • MFC 基础知识:对话框背景添加图片和按钮Button添加图片 很长时间没有接触MFC相关的知识了,我大概是在大二时候... 这篇文章主要是回顾以前的MFC基础知识,给对话框添加背景图片和给按钮button添加背景图片;希...
  • mfc程序背景图片

    千次阅读 2010-02-27 10:22:00
    先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中:CBrush m_brBk;//在public中定义TestDlg.cpp中:在初始化函数OnInitDialog()中加入:BOOL CTestDlg::OnInitDialog(){CDialog::OnInitDialog();CBitmap bmp;bmp....
  • 一、添加对话框背景图片 ①插入位图,把生成的空白位图进行替换(xxx.bmp图片的名称和格式与生成的空白位图保持一致) ②查看属性,得到位图ID ③编写代码: void CMFC_8Dlg::OnPaint() { if (IsIconic()) { ......
  • 一、添加背景图片 1、把你的图包含到程序的“Bitmap资源”里,提示说该资源使用了大于256色的调色板,在VC里无法编辑等等,点确定就可以  (一定要下载bmp格式的图片,可以把jpg。png等格式图片转换成bmp...
  • MFC 窗体背景图片设置 很多人在做MFC 界面的时候想要给对话框加入背景图片,很多人都会想到在OnPaint()里面来加一段代码来实现,其实这样做并不怎么科学,因为它会导致窗口不断重绘,在很多项目中窗口会闪烁...
  • 但是在给按钮上色的时候出了点问题。在网上找的方法基本上都不管用。说得跟真的一样,各种OnCtrlColor()和OnEraseBkground(),各种技术帝的方法看起来都很厉害,但是都不管用。 真正有用的办法是自定义button,...
  • 使用GDI+对按钮或对话框添加任意格式图片,不用加载资源,可以直接使用接口进行背景重绘。支持任意格式图片
  • MFC 图片按钮的实现

    2020-09-03 10:11:46
    MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true; CBitmapButton只用于添加bmp位图,其他图片会有一些兼容性问题,不会显示出来。具体原因没有深究,有空可自行深入学习。 LoadBitmaps...
  • MFC加载背景图片后变模糊的原因

    千次阅读 2016-06-14 21:20:42
    // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication1Dlg::OnPaint() { if (IsIconic()) { ...
  • MFC 添加背景图片并让控件背景透明

    万次阅读 2013-05-11 11:32:19
    /*添加背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此添加消息处理程序代码和/或调用默认值  CDialog::OnEraseBkgnd(pDC);  HBITMAP m_hBitmap;  HDC m_hBkDC;  m_hBitmap =...
  • 本人利用MFC按钮增加CBitmapButton按钮,发现按钮是灰颜色的,并且按钮不能下压,不起作用,但是另外页面的按钮是正常的,后来发现原因: 本人是自己增加的页面,添加的类,但是新添加的类没有OnInitDialog()函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,559
精华内容 1,423
关键字:

mfc按钮背景图片