VC++对话框加背景图片设置方法
VC设置对话框背景色、背景图片、背景音乐
一、设置背景颜色的三种方法:1、我们知道程序在运行的时候会调用OnPain函数,那么我们可以在这里设置背景颜色。
void CFlipCardsDlg::OnPaint(){if (IsIconic()){//保持不变}else{CRect rc;GetClientRect( &rc );// 获取客户区CPaintDC dc(this);dc.FillSolidRect(&rc, RGB(0,160,0)); // 填充客户区颜色CDialog::OnPaint();}}2、第二种方法只要一条语句,但是这里要注意这里绘制的颜色是针对程序中所有的对话框(如果是单文档的话,好像不行)SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));// 前一个RGB是背景色,后一RGB是文本颜色该函数放在工程的APP文件的初始化函数中。
3、第三种方法,利用ClassWizard 重载OnCtlColor(),即WM_CTLCOLOR消息在要着色的对话框中申明一个变量,CBRUSH m_hbrush;然后在项目的Dlg类初始化函数中给m_hbrush赋值。
m_brush.CreateSolidBrush(RGB(0, 255, 0));然后在OnCtlColor(...)返回该画刷就可以了,如下。
HBRUSH CFlipCardsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereswitch (nCtlColor){case CTLCOLOR_DLG:HBRUSH aBrush;aBrush = CreateSolidBrush(RGB(0, 150, 0));hbr = aBrush;break;}// TODO: Return a different brush if the default is not desiredreturn hbr;}这样为对话框着色就可以实现了。
在VC6中为CListCtrl单元格指定背景图
m_ListDisplay.InsertColumn(1,"性别",LVCFMT_LEFT,90);
m_ListDisplay.InsertColumn(2,"年龄",LVCFMT_LEFT,100);
没有网络线的CListCtrl控件
m_ListDisplay.SetExtendedStyle(LVS_EX_FULLROWSELECT);
保留全行选中的同时,去掉网格
去掉CListCtrl控件的表头:
m_ListDisplay.ModifyStyle(0,LVS_NOCOLUMtrl单元格指定背景图
创建一个对话框程序,在资源编译器上拖入一个CListCtrl控件,报表样式。
//用类向导绑定一个变量
CListCtrl m_ListDisplay;
在初始化时加入如下代码即可:
AfxOleInit();//必须有这个,否则不出图
m_ListDisplay.SetExtendedStyle(LVCFMT_IMAGE|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
m_ListDisplay.ModifyStyle(0,LVS_NOCOLUMNHEADER,0);
如果把上面的一句注释掉,就没有网格了:
// m_ListDisplay.SetExtendedStyle(LVCFMT_IMAGE|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
设置对话框背景色
{
…
CExampleDlgDlg dlg;
m_pMainWnd = &dlg;
//先于DoModal()调用,将对话框设置为蓝色背景、红色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//在这加一条是否为对话框的判断语句
if(nCtlColor ==CTLCOLOR_DLG)
return m_brush; //返加绿色刷子
return hbr;
}
---- 编译并运行即可。
CDC *dc = BeginPaint(&ps);
CDC memdc;
CRect rect;
CBitmap bitmap;
BITMAP szbitmap;
bitmap.LoadBitmap( IDB_QAM_MAIN );
bitmap.GetObject( sizeof(BITMAP),&szbitmap );
---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
VC设置对话框背景
VC设置对话框背景少将2014-11-20VC对话框默认的灰度背景实在是不美观,填充背景图成了改善用户界面的一个很好的选择。
首先在资源视图中添加一个位图资源,如命名为IDB_BMPBK。
在对话框中添加OnEraseBkgnd()事件处理函数,用于擦除背景进行重绘。
其中添加的代码如下:BOOL DialogClass::OnEraseBkgnd(CDC* pDC){//创建内存DCCDC MemDC;//CBitmap对象CBitmap Bitmap,*pOldBitmap;//BITMAP句柄BITMAP bm;//加载位图Bitmap.LoadBitmap(IDB_BMPBK);//将位图资源与句柄绑定Bitmap.GetObject(sizeof(BITMAP),&bm);//创建与内存兼容的DCMemDC.CreateCompatibleDC(pDC);//替换原位图pOldBitmap=(CBitmap*)(MemDC.SelectObject(&Bitmap));//获取绘制的区域CRect rcClient;GetClientRect(&rcClient);//绘制到客户区pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY);MemDC.SelectObject(pOldBitmap);MemDC.DeleteDC();return TRUE;}默认生成的OnEraseBkgnd()处理函数会有调用基类的处理函数然后再返回结果,要注意把这一句直接删除,然后直接返TRUE。
VC 绘制背景
VC—主框架窗口绘制背景使用VC进行项目开发,特别是简单的MIS系统开发中,通常在用户没有进行操作之前显示的是主框架的窗口(用户点击操作菜单项再弹出处理窗口)。
因此给主框架窗口提供一个背景图片就显得很有必要(例如一用户满意的LOGO等)。
但是对于主框架的背景的绘制不能简单地用ClassWizard重载OnEraseBkgnd(CDC*pDC)函数的方法实现。
多文档窗口应用程序中的主框架窗口的背景区是一个MDIClient类的窗口,因此改变背景与这个MDIClient类的窗口有关。
MDIClient类的窗口的句柄是m_hWndMDIClient(在CMDIFrameWnd中),可以通过以下步骤实现:Step 1:在资源中添加一个Bitmap资源,资源标志符为IDB_BKGOUND;Step 2:添加一个MDIClient类:Insert——>New Class,选择MFC Class,基类选择“generic CWnd”,类名为CClientWnd;Step 3:为CClientWnd添加OnEraseBkgnd(CDC*pDC),OnSize(UINT nType, int cx, int cy)函数的重载(Class Wizard),并添加虚函数WNDPROC* CClientWnd::GetSuperWndProcAddr():BOOL CClientWnd::OnEraseBkgnd(CDC* pDC){// TODO: Add your message handler code here and/or call defaultCRect rectbk; // 客户区的大小CDC dcMen; //内存设备描述表CBitmap bmbk; // 位图对象bmbk.LoadBitmap(IDB_BKGOUND); // 从资源加载位图bitmap// 得到位图bitmap的大小BITMAP stBitmap;bmbk.GetObject(sizeof(BITMAP),&stBitmap);CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);dcMen.CreateCompatibleDC(pDC);// 选入新的位图对象并保存旧的位图对象CBitmap *pold=dcMen.SelectObject(&bmbk);GetClientRect(&rectbk);// 从内存向屏幕复制位图对象pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMen,0,0,bmsize.cx,bms ize.cy,SRCCOPY);dcMen.SelectObject(pold);// 恢复旧的位图对象dcMen.DeleteDC();// 释放内存设备描述表//return CWnd::OnEraseBkgnd(pDC);return TRUE;}void CClientWnd::OnSize(UINT nType, int cx, int cy){CWnd::OnSize(nType, cx, cy);// TODO: Add your message handler code hereInvalidate(); //大小改变后重画}ClientWnd.h中添加:virtual WNDPROC* GetSuperWndProcAddr();ClientWnd.cpp中添加:NDPROC* CClientWnd::GetSuperWndProcAddr(){static WNDPROC NEAR pfnSuper = NULL;return &pfnSuper; // 返回函数指针}Step 4:为主框架添加背景:在MainFrm.h中添加:CClientWnd m_wndClient; (添加#i nclude “ClientWnd.h”头文件)在CMainFrame类的OnCreate()事项中添加:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if(!m_wndClient.SubclassWindow(m_hWndMDIClient)){TRACE("Fail to subclass MDI client windown");return -1;}//////省略}。
VC按钮添加图片的几种方法
if(lpDrawItemStruct->itemState & ODS_FOCUS)
{
//画虚框
CRect rtFocus = lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(3, 3);
dc.DrawFocusRect(&rtFocus);
3.在OnInitDialog函数中初始化按钮m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SetBitmaps(IDB_BITMAP1,RGB(0,0,0));
m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
pButton->SetBitmap(hBitmap);
感觉效果不是很好。因为图片不会自动拉伸。
第二种:
可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。
假设按钮ID为IDC_BUTTON1
1.添加成员变量
CButtonST m_btn;
2.添加位图资源,ID设为IDB_BITMAP1
dc.SetBkMode(TRANSPARENT);
CString sText;
m_HelloCFan.GetWindowText(sText);
dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText);
第一种:
Button属性页里Style的Bitmap点上
MFC对话框背景---图片背景---背景色
对话框的背景1、添加位图背景首先在资源视图中添加bmp图片:选择项目名右击---添加—添加资源---Bitmap---导入---选择res文件中的位图(如果res文件中无位图请提前添加),此时可以知道位图ID为IDB_BITMAP1(1)picture控件添加背景在对话框中添加picture控件,并修改其属性,选中picture控件在属性表中修改Type为Bitmap,Image为IDB_BITMAP1。
此时图片就显示在对话框中(2)在CPP文件中初始化显示位图添加位图后,在源文件XXXDlg.cpp的void C XXX Dlg::OnPaint()函数中添加初始化代码如下:void CbeijingDlg::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{CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpPri=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);}}2、设置纯色背景点击对话框添加成员变量CBrush m_brush,然后在源文件XXXDlg.cpp初始化位置添加如下代码:// TODO: 在此添加额外的初始化代码?m_brush.CreateSolidBrush(RGB(0,0,255)); /////添加的代码,用于创建蓝色画刷return TRUE; // 除非将焦点设置到控件,否则返回TRUE然后找到WM_CTLCOLOR消息,添加对应的函数OnCtlColor()添加如下代码:HBRUSH CbeijingsehewenziDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: 在此更改DC 的任何特return m_brush;// TODO: 如果默认的不是所需画笔,则返回另个画笔// return hbr;}这样运行后对话框背景色就变为蓝色。
vc窗口中添加位图
Visual C++提供的应用程序框架虽然可以自动生成多文档(MDI)的应用程序,但是程序的界面比较单调,如果能够在主框架中添加上彩色位图,一定能够大大改观程序的界面效果。
目前也有些编程资料涉及到如何在MDI应用程序的主框架中添加彩色位图,但具体实践过程中都有一些小问题,为此,本实例介绍了一种比较简单可行的方法,可以在程序中圆满地实现这种功能,程序运行后的界面效果:一、实现方法在多文档界面下,应用程序会自动生成一个新的子窗口,而一个实际的应用系统往往是由用户操作后再生成新的窗口。
为了去掉开始的子窗口,方便在主框架中添加彩色位图,可在应用程序文件分析命令行的语句CcommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);cmdInfo.m_nShellCommand=CcommandLineInfo::FileNothing;这时候编译运行程序就会反响去掉子窗口只剩下主框架窗口了。
因为在多文档界面中,系统生成两个菜单:一个是用户的菜单,另一个是系统主框架菜单。
通常用户工作在用户菜单。
为了保证菜单界面不变,可修改主框架菜单资源,使其与用户菜单保持一致。
下面我们进入正题,如何在主框架中添加位图。
首先要清楚对于一个MDI应用程序的主框架窗口来说,它包含一个特殊的子窗口,称为MDICLIENT窗口,应用程序的主框架类中有一个成员变量m_hWndMDIClient 指的就是MDICLIENT窗口。
MDICLIENT窗口负责管理主框架窗口的客户区。
直接对MDI客户窗口编程有一定的难度,原因是MDIFrameWnd的客户区完全被MDICLIENT窗口覆盖掉了。
正因为上述原因,MDI主窗口类MDIFrameWnd的背景色和光标都不起作用。
同时,微软的MFC并不支持将MDICLIENT窗口作为子类,MDICLIENT窗口只能使用标准的背景色和光标,所以对MDI客户窗口编程不能象对普通窗口那样简单地重载WM_PAINT的消息处理函数。
vc6对话框或控件上显示图片
VC中在对话框上显示图片用图片控件,好像图片最多色彩数不超过256色,也就是8位,但是用代码在里面写的方法就可以解决这个问题了.让一个对话框显示背景通常有两种做法:使用图片控件、在WM_PAINT消息中画图。
用图片控件非常简单,但功能功能不强大,不能对图片拉申等。
在WM_PAINT中画图,相对复杂,但可以做很多特殊处理(如对图片拉申、图片取反等等)。
那么下面就对两种方法略述。
1、用图片控件在对话框中加入Picture控件,属性页中General->Type设为Bitmap, Image中选中相关联的图片资源号。
这样就编译运行,你就会发现它己经可以了。
耶,不对,图片复盖了其它控件!怎么办?哈哈,这是由于你的Picture控件是后面放上去的。
这样它会显示在最上层,所以有些控件看不到了。
有两种方法可以解决:(1)、选中所有控件Ctrl+A, 然后取消对图片控件的选择,将其它控件剪切Ctrl+X,再粘帖Ctrl+C,编译运行或Ctrl+T看看,是不是可以了?(2)、在.rc文件中找到此对话框的定义,此处以例子中的一对话框为例。
(用记事本打开.rc 文件)IDD_DLG_USE_STA TIC DIALOGEX 0, 0, 266, 201STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_APPWINDOWCAPTION "DlgUseStatic"FONT 9, "宋体"BEGINCONTROL 129,IDC_STATIC,"Static",SS_BITMAP,0,0,266,201PUSHBUTTON "取消",IDCANCEL,210,23,50,14DEFPUSHBUTTON "确定",IDOK,210,7,50,14LTEXT "这是个通过图片控件来实现Dialog背景的",IDC_STATIC,13,106,156,8PUSHBUTTON "方法二>>",IDC_BUTTON1,215,104,50,14END在BEGIN至END中便是各个控件的定义和先后顺序,你可以随意调整它们的顺序,这样最先的,它将会显示在最底层(即可能被其它控件覆盖)。
VC改变对话框按钮字体颜色和背景的解决方案[整理]
VC改变对话框按钮字体颜色和背景的解决方案要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。
这可以通过定义一个以CButton为基类的新按钮类来实现。
以下为具体的实现方法:方法一:加入一个新类,类名:CButtonEx,基类:CButton。
在头文件 CButtonEx.h 中加入以下变量和函数定义:private:int m_Style; //按钮形状(0-正常,1-当前,2-按下,3-锁定)BOOL b_InRect; //鼠标进入标志CString m_strText; //按钮文字COLORREF m_ForeColor; //文本颜色COLORREF m_BackColor; //背景色COLORREF m_LockForeColor; //锁定按钮的文字颜色CRect m_ButRect; //按钮尺寸CFont* p_Font; //字体void DrawButton(CDC *pDC); //画正常的按钮// 接口函数public:void SetText(CString str);void SetForeColor(COLORREF color); //设置文本颜色void SetBkColor(COLORREF color); //设置背景颜色void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体在 CButtonEx.cpp 的构造函数中初始化变量:CButtonEx::CButtonEx(){m_Style = 0; //按钮形状风格b_InRect = false; //鼠标进入标志m_strText = _T(""); //按钮文字(使用默认文字) m_ForeColor = RGB(0,0,0); //文字颜色(黑色) m_BackColor = RGB(243,243,243); //背景色(灰白色)m_LockForeColor = GetSysColor(COLOR_GRAYTEXT); //锁定按钮的文字颜色p_Font = NULL; //字体指针}用ClassWizard添加下列消息函数:PreSubclassWindow();DrawItem();onMouseMove();OnLButtonDown();OnLButtonUp();在各函数内加入代码:void CButtonEx::PreSubclassWindow(){ModifyStyle( 0, BS_OWNERDRAW ); //设置按钮属性为自画式CButton::PreSubclassWindow();}PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。
VC++更改对话框背景色和字体颜色
VC++更改对话框背景色和字体颜色方法一:设置所有窗口的颜色MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);请注意,SetDialogBkColor函数并不是对Windows的某个API 的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。
这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中,添加一行代码就行了,写在domodal()的上一句:SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));注:前一个为背景色,后一个为字体颜色。
方法二:设置当前窗口改变对话框的背景颜色的原理很简单,就是响应WM_ERASEBKGND消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。
改变控件和字体的颜色同理,是响应WM_CTLCOLOR这一消息。
具体操作,方法如下:首先://消息映射BEGIN_MESSAGE_MAP(CHelloDlg, CDialog)//{{AFX_MSG_MAP(CHelloDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_CTLCOLOR() //字体颜色ON_WM_ERASEBKGND() //背景色ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()其次:定义两个函数afx_msg BOOL OnEraseBkgnd(CDC* pDC);afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);第三:重载OnEraseBkgnd和OnCtlColor其中预先定义:protected:CBrush m_brBkgnd;//设置对话框背景色方法一:可以实现(但有点问题)BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CRect rect;GetClientRect(&rect);m_brBkgnd.CreateSolidBrush(RGB(183,213,213)); //背景色pDC->FillRect(&rect,&m_brBkgnd);return TRUE;}方法二:可行BOOL CClientDlg::OnEraseBkgnd(CDC* pDC){CBrush back(RGB(220,215,254));CBrush* pold=pDC->SelectObject(&back);CRect rect;pDC->GetClipBox (&rect);pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);pDC->SelectObject(pold);return TRUE;方法三:也可行BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CBrush MyBrush;MyBrush.CreateSolidBrush(RGB(0,255,0));CBrush *pOldBrush=pDC->SelectObject(&MyBrush);CRect Rect;GetClientRect(&Rect);pDC->Rectangle(&Rect);pDC->SelectObject(pOldBrush);return TRUE;}//设置对话框中控件的字体颜色HBRUSH CHelloDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if(pWnd->GetDlgCtrlID() == IDC_EDIT_MULLINE) //多行edit 控件{pDC->SetT extColor(RGB(13,125,188)); //设置字体颜色return hbr;}else{pDC->SetBkMode(TRANSPARENT);pDC->SetT extColor(RGB(255,125,188));return (HBRUSH)m_brBkgnd; //因为CBrush类实现了HBRUSH 类型转换操作符}。
MFC添加背景图像的方法
MFC添加背景图像的方法:1.给按钮添加背景图像的方法:首先,切换“解决方案资源管理器”到“资源视图”,右击项目->添加资源->Bitmap->导入,导入所需的*.bmp图片,如下图,最后在资源视图里的生成新的文件夹Bitmap,如下图所示,特别要记住图片的ID号。
然后在源文件中的OnInitDialog()函数里添加代码,如下所示:HBITMAPhBitmap1=LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));CButton *pButton1=(CButton*)GetDlgItem(IDC_BUTTON_ZOOM_IN);pButton1->SetBitmap(hBitmap1);其中,IDB_BITMAP1为位图的ID号码,IDC_BUTTON_ZOOM_IN为按钮的ID号码。
运行起来即可见效果。
2.给对话框dailog添加背景图片的方法:<1>同样如上,先载入一张图片,如ID为IDB_BITMAP2<2>TestDlg.h中CBrush m_brBk;//在public中定义<3>TestDlg.cpp中在初始化函数OnInitDialog()中加入:BOOL CTestDlg::OnInitDialog(){CDialog::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP2);m_brBk.CreatePatternBrush(&bmp);bmp.DeleteObject();return TRUE; // return TRUE unless you set the focus to a control}<4>在打开类向导,找到WM_CTLCOLOR消息,就是点击对话框,然后在对话框的属性->消息->WM_CTLCOLOR消息,如下图所示,重载得对应函数OnCtlColor(),添加如下::HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd == this){return m_brBk;}return hbr;}如果此时出现如下的错误:VC2005:无法执行添加/移除操作,因为代码元素"***dlg"是只读的解决方法如下:1、重启VC2、打开Resource.h文件看看一看就知道了有些定义重复了可以手动改掉,保存,编辑器重新加载。
给CTREECTRL加背景图片
为了使界面更美观,给系统左边的树形控件加了一个背景图片,给树形控件加载背景图片的方法如下:①新建一个类CMyTreeCtrl从CTreeCtrl派生添加CBitmap m_bitmap;属性②在OnPaint()中重画树形控件背景,如下代码:CDC memdc;memdc.CreateCompatibleDC(&dc);CBitmap bitmap;bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());memdc.SelectObject( &bitmap );CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);CDC maskdc;maskdc.CreateCompatibleDC(&dc);CBitmap maskbitmap;maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);maskdc.SelectObject( &maskbitmap );maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,rcclient.left, rcclient.top, SRCCOPY);CBrush brush;brush.CreatePatternBrush(&m_bitmap);dc.FillRect(rcclient, &brush);memdc.SetBkColor(RGB(0,0,0));memdc.SetTextColor(RGB(255,255,255));memdc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left,rcclient.top, SRCAND);dc.SetBkColor(RGB(255,255,255));dc.SetTextColor(RGB(0,0,0));dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left,rcclient.top, SRCAND);dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &memdc,rcclient.left, rcclient.top,SRCPAINT);brush.DeleteObject();③处理树形控件的TVN_ITEMEXPANDING,TVN_ITEMEXPANDED消息响应在TVN_ITEMEXPANDING(节点展开时)消息响应中防止重画闪屏SetRedraw(FALSE);在TVN_ITEMEXPANDED(节点展开后)消息响应中强制重画更新背景Invalidate();SetRedraw (TRUE);④定义SetBKImage(UINT nIDResource)方法设置定义为背景的图片资源,实现如下:if( m_bitmap.m_hObject != NULL )m_bitmap.DeleteObject();if (!m_bitmap.LoadBitmap(nIDResource)){return FALSE;}⑤将树形控件改为从CMyTreeCtrl派生⑥CMyTreeCtrl的方法SetBKImage设置背景M_tree.SetBKImage(IDB_BITMAP1);。
在VC中设置Dialog背景图像
在VC中设置Dialog背景图像
佚名
【期刊名称】《家庭电脑世界》
【年(卷),期】2004(000)12X
【摘要】以下程序主要是用于处理背景擦除消息时,在DIALOG CLIENT区域画位图,具体代码如下:
【总页数】1页(P59)
【正文语种】中文
【中图分类】TP391.41
【相关文献】
1.Premiere中如何定制VCD的项目设置 [J],
2.VC环境下开发DialogBar [J], 戴家才;王光海
3.H.264/AVC码率控制中初始量化参数设置的一种改进算法 [J], 韩霜;林其伟;张伟龙;饶琴;张志刚
4.Dialogic语音卡在语音系统中的应用 [J], 王岱青
5.基于改进YOLOv5网络的复杂背景图像中茶尺蠖检测 [J], 胡根生;吴继甜;鲍文霞;曾伟辉
因版权原因,仅展示原文概要,查看原文内容请购买。
如何给Visual C++中的对话框增加位图背景
如何给Visual C++中的对话框增加位图背景
陈新运
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1999(000)010
【摘要】Visual C++是Microsoft至今最全面和最完善的程序开发产品之一,它提供了一组各种各样的为适应几乎每一种编程风格而设计的工具,在编程能力和方便性方面达到了空前的水平。
【总页数】2页(P46-47)
【作者】陈新运
【作者单位】无
【正文语种】中文
【中图分类】TP311
【相关文献】
1.Visual C++对话框中图形按钮的创建及两种实现方法的比较 [J], 吴建华;陈焕文;徐蔚鸿
2.利用Visual C++实现在对话框中浏览网页 [J], 姚彤
3.给Borland C++ Builder中的对话框增加位图背景 [J], 刘基宏
4.如何用Visual C++实现在对话框中打印数据 [J], 摆卫兵
5.Visual c++中不使用模板资源创建对话框应用 [J], 龚蔚青;于金彪;杨耀忠
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
方法一1、声明成员变量CBrush m_brush;2、在InitDialog中添加代码:CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加m_brush.CreatePatternBrush(&bmp);3、重载对话框的OnCtlColor,改最后的返回值:return (HBRUSH)m_brush;方法二:把下面这段代码加进OnPaint()里就行了CPaintDC dc(this);CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加CBrush brush;brush.CreatePatternBrush(&bitmap);CBrush* pOldBrush = dc.SelectObject(&brush);dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小dc.SelectObject(pOldBrush);方法三:使用StretchBlt()函数,具有图像自适应窗体功能CPaintDC dc(this);CBitmap m_bmpBK;m_bmpBK.LoadBitmap(IDB_BITMAP1);CRect rect;GetClientRect(&rect);//获得目标尺寸,即窗口客户区的坐标BITMAP bitMap;//位图结构体m_bmpBK.GetBitmap(&bitMap);//获得原图片尺寸CDC dcMem; //目标DCdcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DCdcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DCdc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SR CCOPY);函数参考:GetClientRect函数功能:该函数获取窗口客户区的坐标。
客户区坐标指定客户区的左上角和右下角。
由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect);在Visual Studio 2005中,该函数的原型为void GetWindowRect(LPRECT lpRect) const;参数:hWnd是程序窗口的句柄。
lpRect是一个指标,指向一个RECT型态的rectangle结构.该结构有四个LONG字段,分别为left,top,right和bottom.GetClientRect将这四个字段设定为窗口显示区域的尺寸。
left和top字段通常设定为0。
right和bottom字段设定为显示区域的宽度和高度(像素点数)。
StretchBlt函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。
函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);参数:hdcDest:指向目标设备环境的句柄。
nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。
nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。
nHeightDest:指定目标矩形的高度,按逻辑单位表示高茺。
hdcSrc:指向源设备环境的句柄。
nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。
nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。
nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。
nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。
dwRop:指定要进行的光栅操作。
光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。
参考BitBlt可了解常用的光栅操作码列表。
返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。
Windows NT:若想获得更多的错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。
演示代码:CYourView::OnDraw(CDC* pDC){CDC memDC;//定义一个兼容DCmemDC.CreateCompatibleDC(pDC);//创建DCCBitmap bmpDraw;bmpDraw.LoadBitmap(ID_BMP) ;//装入DDBCBitmap* pbmpOld=memDC.SelectObject(&bmpDraw) ;//保存原有DDB,并选入新DDB入DCpDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY) ;//将源DC中(0,0,20,20) 复制到目的DC(0,0,20,20)pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND);//将源DC中(0,0,20,20)和目的DC(20,20,40,40)中区域进行AND操作memDC.SelectObject(pbmpOld) ;//选入原DDB}CreateCompatibleDC函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。
函数原型:HDC CreateCompatibleDC(HDC hdc);参数:hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。
返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
注释:内存设备上下文环境是仅在内存中存在的设备上下文环境,当内存设备上下文环境被创建时,它的显示界面是标准的一个单色像素宽和一个单色像素高,在一个应用程序可以使用内存设备上下文环境进行绘图操作之前,它必须选择一个高和宽都正确的位图到设备上下文环境中,这可以通过使用CreateCompatibleBitmap函数指定高、宽和色彩组合以满足函数调用的需要。
当一个内存设备上下文环境创建时,所有的特性都设为缺省值,内存设备上下文环境作为一个普通的设备上下文环境使用,当然也可以设置这些特性为非缺省值,得到它的特性的当前设置,为它选择画笔,刷子和区域。
CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用GetDeviceCaps函数来确定一个设备是否支持这些操作。
当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。
ICM:如果通过该函数的hdc参数传送给该函数设备上下文环境(Dc)对于独立颜色管理(ICM)是能用的,则该函数创建的设备上下文环境(Dc)是ICM能用的,资源和目标颜色间隔是在Dc中定义。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
SelectObject函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);参数:hdc:设备上下文环境的句柄。
hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。
位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。
画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字体:CreateFont, CreateFontIndirect。
笔:CreatePen, CreatePenIndirect。
区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。
返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;SIMPLEREGION:区域由单个矩形组成;COMPLEXREGION:区域由多个矩形组成。
NULLREGION:区域为空。
如果发生错误并且选择对象不是一个区域,那么返回值为NULL,否则返回GDI_ERROR。
注释:该函数返回先前指定类型的选择对象,一个应用程序在它使用新对象进行绘制完成之后,应该用新对象替换原始的缺省的对象。
应用程序不能同时选择一个位图到多个设备上下文环境中。
ICM:如果被选择的对象是画笔或笔,那么就执行颜色管理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。