精华内容
下载资源
问答
  • CBitmap是代表位图的一个类,包含着位图的属性及对位的操作,是对HBITMAP的封装; BITMAP是一个结构体,封装着位图的一些信息; HBITMAP是位图的句柄。 关联的方式是: CBitmap bitmap; HBITMAP hBitmap; bitmap...
    void CWinProcessDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		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;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		//CDialog::OnPaint();
    	}
    	///
    	//给对话框添加背景图片
    	CPaintDC   dc(this);
    
    	CBitmap bitmap;
    	bitmap.LoadBitmap(IDB_BITMAP1);
    
    	BITMAP bmp;
    	bitmap.GetBitmap(&bmp);   
    
    	CDC dcview;
    	dcview.CreateCompatibleDC(&dc);
    	dcview.SelectObject(&bitmap);
    
    	CRect rect;
        GetClientRect(&rect);
    
    	dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcview,
    		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
        /
    	
    }

    
    
    一、CPaintDC dc(this)中的this指针的含义解析

    答1:this是指当前窗体对象,dc用带有this指针的构造函数进行构造,是指当前窗口的dc。

    答2:用了this指针初始化后,你操作的dc就是当前窗体,也即当前窗体就是你的画布!

    答3:每个类都有一个默认指针this指向自己。

    答4:就是获取当前窗口的dc而已,可以用这个DC在当前窗口绘图。当然你也可以获取其它窗口的dc,只要传入其它窗口的指针就可以了。

    同理CClientDC dc(this);中的this也是这个意思。

    其实,控件就是一个子窗口,我们可以通过CClientDC在控件上绘图。参加下面代码:

    void CXXXXXDlg::OnBnClickedButton1()  
    {  
        // TODO: Add your control notification handler code here  
        CString sTemp;  
        sTemp="我们的爱";  
        CWnd* pWnd1;  
        pWnd1 = GetDlgItem(IDC_STATIC_SEX); //返回控件句柄
        CClientDC dc1(pWnd1);  
        dc1.TextOutW(0,0,sTemp);//在static控件上输出文字  
      
        CClientDC dc2(this);  
        dc2.TextOutW(0,0,sTemp);//在客户区上输出文字  
    }  

    从上面可以看出,往哪里输出,取决于dc指向,在上面的例子中,dc1指向控件(子窗口),dc2指向对话框窗口(父窗口)。

    其实CClientDC dc1(pWnd1);就相当于如下两条语句:

    CDC* dc1;

    dc1=pWnd1->GetDC();

     当然了,由于现在dc1被定义成指针变量,则dc1.TextOutW(0,0,sTemp);要改成dc1->TextOutW(0,0,sTemp);你懂的。


    二、CBitmap &&HBITMAP &&BITMAP

    CBitmap是代表位图的一个类,包含着位图的属性及对位图的操作,是对HBITMAP的封装;

    BITMAP是一个结构体,封装着位图的一些信息;

    HBITMAP是位图的句柄。

    关联的方式是:

    CBitmap bitmap;

    HBITMAP hBitmap;

    bitmap.LoadBitmap(ID);

    bitmap.Attach(hBitmap);

    BITMAP bm;

     //此函数获得位图的一些信息,并赋给bm结构体

    bitmap.GetBitmap(&bm);





    展开全文
  • 如何给对话框插入背景图片 VC++ MFC

    千次阅读 2013-09-17 18:53:27
    对于基于对话框的工程来说,给主对话框添加背景图片还是相对比较容易的,因为本人这两天也用到了这一点,下面简单来说一下: void CManageDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device ...
    对于基于对话框的工程来说,给主对话框添加背景图片还是相对比较容易的,因为本人这两天也用到了这一点,下面简单来说一下:
    
    void CManageDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		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;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    	
    		CPaintDC dc(this);
    		CRect rect;
    		GetClientRect(&rect);
    		CDC  dcMem;   
                      dcMem.CreateCompatibleDC(&dc);   
                      CBitmap  bmpBackground;   
                      bmpBackground.LoadBitmap(IDB_SHOUYE);  //此处的IDB_SHOUYE是你的bitmap,即要插入的图片
        	         BITMAP  bitmap;   
                      bmpBackground.GetBitmap(&bitmap);  
    		CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground);
    		dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);     
              // 	CDialog::OnPaint(); //此处一定要注意! 
    	}
    	}   else部分为添加的代码


    至于如何添加bitmap,在resource里面,在有文件夹的地方右键,然后选择Insert—>Bitmap,选择图片,图片必须是bmp格式,自己可以通过转换格式来实现,然后为它定义一个ID。

    但是,往往我们不止一个对话框,可能有很多其它插入的对话框,那该如何为他们插入背景图片呢?本人也是刚刚学会,要点如下:

    void CLoginDlg::OnPaint() 
    {
    	CPaintDC dc(this); // device context for painting
    	CRect rect;
    	GetClientRect(&rect);
    	CDC  dcMem;   
             dcMem.CreateCompatibleDC(&dc);   
             CBitmap  bmpBackground;   
             bmpBackground.LoadBitmap(IDB_LOGIN);
     	BITMAP  bitmap;   
             bmpBackground.GetBitmap(&bitmap);  
    	CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground);
     	dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); 
    	
    	// TODO: Add your message handler code here
    	
    	// Do not call CDialog::OnPaint() for painting messages
    }                
    同过比较两个OnPaint()函数,可以看出来差异。为插入的对话框创建的类是没有OnPaint()函数的,需要自己添加,就在建立类的那个面板里,在Messages里面选择WM_PAINT,添加即可。                                                                                                             
    展开全文
  • MFC对话框绘图

    千次阅读 2014-04-05 00:28:20
    1、在对话框上的一块区域绘制彩色线条。 2、窗口被覆盖后恢复时,图像自动重绘。 3、改变按钮颜色。 操作: 根据向导建立一个对话框程序。在资源中添加一个静态文本框,其ID为IDC_STATIC。 在...

    实现功能:

    1、在对话框上的一块区域绘制彩色线条。

    2、窗口被覆盖后恢复时,图像自动重绘。

    3、改变按钮颜色。

    操作:

    根据向导建立一个对话框程序。在资源中添加一个静态文本框,其ID为IDC_STATIC。

    在DialogXXXDlg.h 中加入如下内容

          CBrush m_brush;//用于自定义颜色
        CDC m_memDC;//屏幕DC兼容的内存DC
        CBitmap m_Bmp;//位图
        CWnd* m_pDrawWnd;//用于保存静态文本框的对象指针
        //
         // 初始化和双缓冲相关的数据
        void InitialDBB();
        //双缓冲内存上绘图
        void DrawOnMem();
        //在静态区域画图
        void DrawOnStaticArea();
        //更改颜色的消息响应函数
         afx_msg HBRUSH OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor);

    在DialogXXXDlg.cpp 中加入如下内容

    1、添加消息映射

    ON_WM_CTLCOLOR()

    2、OnInitDialog()中添加初始化代码

        // TODO: 在此添加额外的初始化代码
        m_brush.CreateSolidBrush(RGB(255,0,0));//初始化画刷
        m_pDrawWnd = GetDlgItem(IDC_STATIC);//获得静态窗口对象指针
        InitialDBB();// 初始化双缓冲相关的数据

    3、重写函数OnCtlColor()

    //改变按钮颜色
    HBRUSH CDialogDrawDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
    {
        HBRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
        //
        if(pWnd->GetDlgCtrlID()==IDOK || pWnd->GetDlgCtrlID()==IDCANCEL)
        {
             pDC->SetTextColor(RGB(255,0,0));//设置文本颜色
             pDC->SetBkMode(TRANSPARENT);//文字背景设为透明
             pDC->SetBkColor(RGB(255,0,0));//设置背景色
            return m_brush;
        }
        //
        return hbr;//m_brush;///hbr
    }

    4、添加头文件中声明的函数的定义代码


    // 初始化和双缓冲相关的要素
    void CDialogDrawDlg::InitialDBB()
    {
    CRect rt;
        m_pDrawWnd->GetClientRect(&rt);
        CDC* sDC = m_pDrawWnd->GetDC();
    // 为屏幕DC创建兼容的内存DC
        if(!m_memDC.CreateCompatibleDC(sDC))//
    {              
       ::PostQuitMessage(0);

        
    // 创建位图,不能是m_memDC,否则无颜色
    m_Bmp.CreateCompatibleBitmap(sDC, rt.Width(), rt.Height());//m_memDC
    // 相当于选择画布,m_pDrawWnd->
        ::SelectObject(m_memDC.GetSafeHdc(), m_Bmp); 
        m_pDrawWnd->ReleaseDC(sDC);
    }


    //双缓冲内存上绘图
    void CDialogDrawDlg::DrawOnMem()
    {
        CRect rect;
        m_pDrawWnd->GetClientRect(&rect);

        //COLORREF crl = GetSysColor(COLOR_3DFACE);
        //m_memDC.FillSolidRect(rect, crl); 
        //m_memDC.FillSolidRect(&rect, 0x00FFFFFF);// 白色填充, 注意,这次是画在内存设备环境上
        CPen pen(PS_SOLID,1,RGB(255,0,0));
        m_memDC.SelectObject(&pen);
       
        //画图部分
        m_memDC.MoveTo(rect.right,rect.bottom);
        m_memDC.LineTo(rect.left,rect.top);
    }
    //
    //在静态区域画图
    void CDialogDrawDlg::DrawOnStaticArea()
    {
        CWnd* pWnd = GetDlgItem(IDC_STATIC);//获得静态文本框的窗口对象
        CRect rect;
        pWnd->GetClientRect(&rect);    
        //
        CDC* pDC = pWnd->GetDC();//
        //
         DrawOnMem();
        // 一次性的将内存设备环境上绘制完毕的图形"贴"到屏幕上
        pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &m_memDC, 0, 0, SRCCOPY);
        pWnd->ReleaseDC(pDC);//
        //
    }

    5、OnPaint()函数中添加绘图代码(红色部分为添加内容)

    void CDialogDrawDlg::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
    {
       CDialog::OnPaint();
             //重绘图像区域
        PAINTSTRUCT ps;
        CRect rt;
        m_pDrawWnd->GetClientRect(&rt);    
         CDC* pDC=m_pDrawWnd->BeginPaint(&ps);
         DrawOnMem();
        pDC->BitBlt(0, 0, rt.Width(), rt.Height(), &m_memDC, 0, 0, SRCCOPY);    
        m_pDrawWnd->EndPaint(&ps);
    }
    }

    这里需要用BeginPaint()  EndPaint()函数获得DC。原因是主窗体在处理WM_PAINT消息的时候也需要绘制发送消息给各个控件有机会绘制自己;如果不用BeginPaint()  EndPaint()函数获得控件DC,该控件的消息队列中的WM_PAINT消息就不会被删除,控件就还会调用其自身的OnPaint()函数重绘控件,从而我们绘制的图像会被覆盖。

    说明:这里的DrawOnStaticArea()没有用到。这是用作扩展时在该区域绘图的,写在这里是方便日后扩展。如果这样的话,OnPaint()中就不需要DrawOnMem();这句,直接将前面绘好的图贴上来就是。

    展开全文
  • API编程:给对话框加上背景图案

    千次阅读 2007-02-08 00:11:00
    对话框加上背景图案应该怎么做?...其实一个很简单的方法,初始化对话框的时候创建一个画刷:HBITMAP bmp = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP));static HBRUSH brush = CreatePatternB

     给对话框加上背景图案应该怎么做?Load一个BITMAP进来,WM_PAINT消息里面横向和竖向两个循环,BitBlt图案铺满整个对话框?其实有一个很简单的方法,初始化对话框的时候创建一个画刷:

    HBITMAP bmp = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP));
    static HBRUSH brush = CreatePatternBrush(hbm);
    DeleteObject(bmp);//bmp已经没用了,释放

    然后响应WM_CTLCOLORDLG消息:
    case WM_CTLCOLORDLG:
       SetBkMode((HDC)wParam,TRANSPARENT);
       SetWindowLong(Wnd,DWL_MSGRESULT,(LONG)brush);
       return (LONG)brush;

    一切OK,不过对话框上面的static控件的背景仍然是灰色的,因此还要响应WM_CTLCOLORSTATIC消息使其背景透明:
    case WM_CTLCOLORSTATIC:
       static HBRUSH hbrushStatic = (HBRUSH)GetStockBrush(NULL_BRUSH);
       SetBkMode((HDC)wParam,TRANSPARENT);
       SetWindowLong(Wnd,DWL_MSGRESULT,(LONG)hbrushStatic);
       return (LONG)hbrushStatic;

    这样就万事大吉了。

    不过这个方法仅对模态对话框有效,对于非模态对话框就有点麻烦了,恩?好象一切正常,没什么麻烦嘛。你试试加个GroupBox上去,怎么样?在模态对话框表现是正常的,非模态对话框GroupBox区域却是白色的,没达到效果。这是因为系统对这两种对话框的处理是不同的。那该怎么办呢?GroupBox其实是按钮,处理WM_CTLCOLORBTN消息?很可惜,只有owner-drawn 的按钮这个消息才会有效,因此需要把GroupBox设置成自绘,然后自己画了。这就又麻烦了。不过有个变通的办法,就是创建两个非模态对话框,一个上面什么控件都不放,作为那个实际需要的对话框的父窗口,相同大小,画上背景作底,实际需要的对话框在资源编辑时需要设置其属性为透明(Extended styles->transparent打勾),上面的代码不变,然后就可以了。这是我能想到的最简便的方法了。如果有其他简单的办法,欢迎大家指正。

    非模态的这个问题困扰我好久,倒不是怕麻烦写groupbox的自绘,而是奇怪为什么会这样,想看看还有什么招没有,终于试出了这个办法,写篇文字以作备忘。

    展开全文
  • 对话框

    千次阅读 2014-12-08 05:05:51
    对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了。  创建对话框主要分两大步,第一,创建对话框...
  • MFC对话框绘制灰度直方

    千次阅读 2018-07-23 16:58:43
    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行回忆讲解,主要通过MFC单文档视图实现点击弹出对话框绘制BMP图片的灰度直方,再获取平均灰度、中指灰度和...
  • 【数字图像处理】四.MFC对话框绘制灰度直方

    万次阅读 多人点赞 2015-05-31 15:22:02
    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行回忆讲解,主要通过MFC单文档视图实现点击弹出对话框绘制BMP图片的灰度直方,再获取平均灰度、中指灰度和...
  •  使用模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建模式对话框
  • 自定义对话框:带下拉选择控件

    千次阅读 2017-10-13 16:22:57
    下拉选择控件的自定义对话框
  • python对话框

    2021-06-17 22:11:18
    python 创建对话框 注:今天讲的是easygui...首先,就像我们在电脑上见的对话框那样,就是个类似界面的东西,上头很多的功能键,文字啊、按钮啊、输入框啊等等。首先,我们要先创建一个界面,如所示: 导入easygu
  •  如果定制对话框样式的需求(只能修改h5模式对话框)可以在mui.css中修改.mui-popup类下的样式。如果需要修改DOM结构可以按照以下方式处理. //修改弹出框默认input类型为password mui.prompt('text','deftext'...
  • AS对话框

    2020-07-06 17:45:28
    (一)警告对话框 AlertDialog: 一个可以0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型. (二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. ...
  • 此篇文章参考qtcn论坛整理而...如所示,QT自带的标准对话框QFontDialog、QColorDialog。默认的文字全是英文的。 请问,如何可以把文字修改成中文或其他语言文字? 解决方案如下: 简体中文的解决思路是打开Qt安装目
  • 我有个对话框程序,使用图片做背景的,里面透明背景的static... 这个程序刚开始运行的时候都还好,可是到半小时左右开始就不重绘了,就是edit控件中的文字开始重叠显示,对话框的背景也不重绘了,alt+tab切换到别
  • 本文介绍Qt的标准对话框文件对话框,颜色对话框,字体对话框,分别定义了三个按钮点击可以弹出标准的对话框,再用网格布局对这些控件进行布局。 头文件: #ifndef STANDARDDIALOG_H #define STANDARDDIALOG_H #...
  • 要想这种改变反应到示例这个组框当中,也就是说我们就需要捕获用户它的这种改变这一事件,当用户在这种...任务:图形的绘制,设置对话框,颜色对话框和字体对话框的创建以及如何在一个窗口当中显示一幅位图。 1.我
  • Qt 标准对话框

    2021-02-24 21:25:43
    为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,用户无需再自己设计这些常用的对话框,这样可以减少程序设计工作量。 对话框 常用...
  • JS 点击每个图片弹出对话框

    千次阅读 2019-01-12 20:44:13
    HTML代码部分: &lt;img src="images/1.jpg" alt="" id="im1" /&gt; &lt;img src="images/2.jpg" alt="" id="im2"...im3
  • android对话框

    2012-08-24 12:35:45
    创建对话框  一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, ... 警告对话框 AlertDialog: 一个可以0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创
  • QFontDialog 文字对话框 QInputDialog 获取用户输入信息对话框 ptqt 中的几种窗口 QMainWindow 菜单 主窗口 QWidget 菜单 QDialog 对话框,无菜单 点击button显示对话框,以下是QDialog对话框,和 5种...
  • 锁定问题 1)是否修改过对话框Native的对话框代码?是否修改过对话框调用Weex的JS代码? 2)哪些手机能再现?哪些不能? 3)能再现该问题的手机 Weex的Playground的代码是否正常运行?该正常运行代码能否在自己工
  • 图形的绘制,设置对话框

    千次阅读 2013-08-04 15:21:46
    要想这种改变反应到示例这个组框当中,也就是说我们就需要捕获用户它的这种改变这一事件,当用户在这种编辑...任务:图形的绘制,设置对话框,颜色对话框和字体对话框的创建以及如何在一个窗口当中显示一幅位图。  
  • 对话框通知

    2012-05-13 21:32:37
    摘要: 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.Android API 支持...
  • GTK 对话框

    千次阅读 2014-07-17 23:15:03
    对话框 对话框是一类GtkWindow,它用于提供顶层窗口。它可以为用户提供消息,可以获得用户信息,或者提供一些简短的动作。  对话款构件被一个水平分割线分隔成两半。上半部放置的是用户界面的主要部分。下半...
  • 通常两种方式可以来创建标准消息对话框: 一种是采用“基于属性”的API,一种是使用QMessageBox的静态方法。 后者书写容易,但缺少灵活性,针对用户给出的提示的信息不够丰富,并且不能自定义消息对话框里面的按钮...
  • (3) 改对话框左上角描述文字(如“子对话框”) (4) 改对话框ID(如“CHILDDIALODG1”) 结果: 2、添加子对话框类 (1) 选中子对话框右键→添加类 (2)填写类名(如“test1”) 结果: 3、为子对话框类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,458
精华内容 28,583
关键字:

对话框里有图有文字