当前位置:文档之家› MFC Picture Control 自适应控件大小显示图片,失真和不失真

MFC Picture Control 自适应控件大小显示图片,失真和不失真

MFC Picture Control 自适应控件大小显示图片,失真和不失真
MFC Picture Control 自适应控件大小显示图片,失真和不失真

MFC Picture Control 自适应控件大小显示图片,失

真和不失真

StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像

一、StretchBlt

函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件)

BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );

x:逻辑单元x轴左上角坐标;(获取图像控件的DC后,该值一般设为0 )

y:逻辑单元y轴左上角坐标;(获取图像控件的DC后,该值一般设为0 )

nWidth:设备矩形宽度;(即是图像控件的宽度,通过int rcWidth = rc.right - rc.left;来获得,rc为保存了图像控件矩形区坐标信息)nHeight:设备矩形高度;(即是图像控件的高度,通过int rcHeight = rc.bottom - rc.top;来获得)

pSrcDC:源设备上下文;(就是我们定义的内存DC,然后取地址)

xSrc :源矩形x轴左上角坐标;(一般都是整幅图片拷贝,所以该值为0 )

ySrc:源矩形y轴左上角坐标;(一般都是整幅图片拷贝,所以该值为0 )

Specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.

nSrcWidth:源矩形宽度;(如果我们定义了一个结构体BITMAP 类型m_bmp保存位图信息,那么可以用m_bmp.bmWidth获取宽度)nSrcHeight:源矩形高度(如果我们定义了一个结构体BITMAP 类型m_bmp保存位图信息,那么可以用m_bmp.bmHeight获取宽度)dwRop:指定要进行的光栅操作。(这个有很多选择,我们一般选择SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。)

二、BitBlt函数

该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

CDC::BitBlt

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc,

int ySrc, DWORD dwRop );

BitBlt函数和上面的STretchBlt函数的参数基本上差不多,只是少了倒数第二个和倒数第三个参数:

nSrcWidth:源矩形宽度;

nSrcHeight:源矩形高度

前面四个参数也是和目标矩形(也即是我们的图像控件区域)相关的,如果是图像控件的话,起点坐标也是(0,0),终点坐标就是矩形区的宽度和高度;

对于源矩形区域(指内存DC中的位图),只需要给出拷贝的起点即可,BitBlt函数不会对原来的位图进行拉伸或压缩,只会根据我们给定的nWidth,nHeight 值来决定该有多少部分进行显示

CRect rect;

CWnd *pWin = GetDlgItem(IDC_pic11);

pWin->GetClientRect(rect);

//GetClientRect(rect);

DWORD nWidth = rect.Width();

DWORD nHeight = rect.Height();

CDC *dc = pWin->GetDC();

//CDC *dc = GetDC();

//dc->Rectangle(rect);

CDC memDc; //定义一个内存显示设备对象

CBitmap memBitmap; //定义一个位图对象

memDc.CreateCompatibleDC(dc); //建立与屏幕显示兼容的内存显示设备

memBitmap.CreateCompatibleBitmap(dc,pBitmap.bmWidth, pBitmap.bmHeight); //建立一个与屏幕显示兼容的位图,位图的大小

可选用窗口客户区的大小

CBitmap *pOldBit = memDc.SelectObject(&memBitmap); ////将位图选入到内存显示设备中,只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上

memDc.FillSolidRect(0, 0, nWidth, nHeight, RGB(255, 255, 255));

int i, j;

int pitch = bmp.bmpWidth % 4;

//绘图操作等在这里实现

for (i = 0; i < bmp.bmpHeight; i++)

{

int realpitch = i*pitch;

for (j = 0; j < bmp.bmpWidth; j++)

{

memDc.SetPixel(j, i, RGB(

bmp.pBmpBuf[((bmp.bmpHeight - i - 1)*bmp.bmpWidth + j) * 3 + 2 + realpitch],

bmp.pBmpBuf[((bmp.bmpHeight - i - 1)*bmp.bmpWidth + j) * 3 + 1 + realpitch],

bmp.pBmpBuf[((bmp.bmpHeight - i - 1)*bmp.bmpWidth + j) * 3 + realpitch]));

}

}

tchBltMode(STRETCH_HALFTONE); //设置缩放方式

if (pBitmap.bmWidth < nWidth && pBitmap.bmHeight < nHeight)

{

dc->BitBlt(0, 0, nWidth, nHeight, &memDc, 0, 0, SRCCOPY); //将内存中的图拷贝到屏幕上进行显示

}

else

{

float xScale = (float)nWidth / (float)pBitmap.bmWidth;

float yScale = (float)nHeight / (float)pBitmap.bmHeight;

float scaleIndex = (xScale <= yScale ? xScale : yScale);

//将内存中的图复制到屏幕上显示

//dc->BitBlt(0, 0, nWidth, nHeight, &memDc, 0, 0, SRCCOPY); //将内存中的图拷贝到屏幕上进行显示

//dc->StretchBlt(0, 0, (int)nWidth * scaleIndex, (int)nHeight * scaleIndex, &memDc,0, 0, (int)pBitmap.bmWidth,

(int)pBitmap.bmHeight, SRCCOPY); //不会失真

dc->StretchBlt(0, 0, (int)nWidth, (int)nHeight, &memDc, 0, 0, (int)pBitmap.bmWidth, (int)pBitmap.bmHeight, SRCCOPY); //会失真,但铺满整个控件大小

}

//绘图后的清理

memDc.SelectObject(pOldBit);

memBitmap.DeleteObject();

位图的大小不要和客户端一样了,不然会显示不全,在进行缩放之前一定要设置对应DC的缩放模式

mfc载入图片

我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,名为Ttest. 对话框类为CTestDlg (一) 非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张图片,ID为IDB_BITMAP2 然后在对话框上添加一个picture控件,右键点击打开属性, 将type下拉框选择BITMAP,紧跟着下面就出现一个

Image下拉框, 拉开就会看到所有已经载入好的图片, 选择你要的图片.运行程序即可看到. 方法2.通过背景图 同样如上,先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中 CBrush m_brBk;//在public中定义 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 } 在打开类向导,找到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; }

mfc中插入背景图片

1、添加背景图片到“Bitmap”资源里。方法为“插入——资源”,如果还没有Bitmap,则新建一个Bitmap,否则选择资源 类型为“Bitmap”后“引入”想要插入的背景图片,我加入的背景图片如图1,加入过程如图2。 图1

图2 说明:引入的图片可以插入256色、16位色或更高色的图片,若是其他格式图片可用PS打开再另存为BMP、24位windows格式就可 以了。提示说该资源使用了大于256色的调色板,在VC里无法编辑等等,点确定就可以了,没有影响的。 2、定位到void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码: else { //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect;

GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP); //IDB_BITMAP是你自己的图对应的ID ,由于我刚刚加入的位图资源 //被我命名成了IDB_Bg,因而我这句就是bmpBackground.LoadBitmap(IDB_Bg); 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); } 3、编译运行结果如图3。

几种视频文件的插入方法

几种视频文件的插入方法: 一、avi、asf、asx、mlv、mpg、wmv等视频文件的插入方法: 1、使用PoerPoint“插入”菜单中的“插入影片”命令法方法简单常用,在这里不再赘述; 2、使用PoerPoint“插入”菜单中的“插入对象”命令法; 3、使用插入控件法 使用这种方法必须保证系统中安装有Windows MediaPlayer或者RealPlayer播放器,首先将视频文件作为一个控件插入到幻灯片中,然后通过修改控件属性,达到播放视频的目的。 步骤如下: (1)运行PowerPoint程序,打开需要插入视频文件的幻灯片; (2)打开“视图”菜单,通过“工具栏”子项调出“控件工具箱”面板,从中选择“其他控件” 按钮单击; (3)在打开的控件选项界面中,选择“Windows Media Player”选项,再将鼠标移动到PowerPoint的幻灯片编辑区域中,画出一个合适大小的矩形区域,这个矩形区域会自动转变 为Windows Media Player播放器的界面; (4)用鼠标选中该播放界面,然后单击鼠标右键,从弹出的快捷菜单中选择“属性”命令, 打开该媒体播放界面的“属性”窗口; (5)在“属性”窗口中,在“URL”设置项处正确输入需要插入到幻灯片中视频文件的详细路径(绝对路径和相对路径都可以)和完整文件名,其他选项默认即可; (6)在幻灯片播放时,可以通过媒体播放器中的“播放”、“停止”、“暂停”和“调节音量” 以及“进度条”等按钮对视频进行自如的控制。 二、rm、ra、rmvb等视频文件的插入方法 使用Windows Media Player控件可以实现mpg、asf、avi、wmv等视频文件的播放,但它不支持RM视频文件的播放,那么如何在PowerPoint中实现RM视频文件的播放呢? 如果通过其他的视频转换软件把RM视频文件转换成A VI或MPG格式的文件再插入,速度慢且转换后的文件体积也大,我们同样可以通过利用PowerPoint中的“控件工具箱”来插 入RM格式的视频文件,方法如下: 1、打开PowerPoint幻灯片文件,打开需要插入视频文件的幻灯片;

MFC背景图片修改

MFC添加背景图片方法 此文系转载,忘了博客地址了 VC++中如何给对话框加背景图片(2010-03-22 16:57:59) 方法一: 1、声明成员变量CBrush m_brush; 2、在InitDialog中添加代码: CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是图片资源ID m_brush.CreatePatternBrush(&bmp); 3、重载对话框的OnCtlColor,改最后的返回值: 1 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 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);

MFC 在对话框显示图片的多种方法

MFC 在对话框显示图片的多种方法 我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,名为Ttest. 对话框类为CTestDlg (一) 非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张图片,ID为IDB_BITMAP2 然后在对话框上添加一个picture控件,右键点击打开属性, 将type下拉框选择BITMAP,紧跟着下面就出现一个

Image下拉框, 拉开就会看到所有已经载入好的图片, 选择你要的图片.运行程序即可看到. 方法2.通过背景图 同样如上,先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中 CBrush m_brBk;//在public中定义 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 } 在打开类向导,找到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; }

监控系统安装流程(视频监控安装教程)

监控安装指导与注意事项 A、线路安装与选材 1、电源线:要选“阻燃”电缆,皮结实,在省成本前提下,尽量用粗点的,以减少电源的衰减。 2、视频线:SYV75-3线传输在300米内,75-5线传输500米内,75-7的线可传输800米;超过500米距离,就要考虑采用“光缆”。另外,要注意“同轴电缆”的质量。 3、控制线:一般选用“带屏蔽”2*1.0的线缆,RVVP2*1.0。 4、穿线管:一般用“PVC管”即可,要“埋地、防爆”的工程,要选“镀锌”钢管。 B、控制设备安装 1、控制台与机柜:安装应平稳牢固,高度适当,便于操作维护。机柜架的背面、侧面,离墙距离,考虑到便于维修。 2、控制显示设备:安装应便于操作、牢靠,监视器应避免“外来光”直射,设备应有“通风散热”措施。 3、设置线槽线孔:机柜内所有线缆,依位置,设备电缆槽和进线孔,捆扎整齐、编号、标志。

4、设备散热通风:控制设备的工作环境,要在空调室内,并要清洁,设备间要留的空间,可加装风扇通风。 5、检测对地电压:监控室内,电源的火线、零线、地线,按照规范连接。检测量各设备“外壳”和“视频电缆”对地电压,电压越高,越易造成“摄像机”的损坏,避免“带电拔插”视频线。 C、摄像机的安装 1、监控安装高度:室内摄像机的安装高度以2.5~5米,为宜,室外以3.5~10米为宜;电梯内安装在其顶部。 2. 防雷绝缘:强电磁干扰下,摄像机安装,应与地绝缘;室外安装,要采取防雷措施。 3、选好BNC:BNC头非常关键,差的BNC头,会让你生不如死,一点都不夸张。 4、红外高度:红外线灯安装高度,不超过4米,上下俯角20度为佳,太高或太过,会使反射率低。 5、红外注意:红外灯避免直射光源、避免照射“全黑物、空旷处、水”等,容易吸收红外光,使红外效果大大减弱。 6、云台安装:要牢固,转动时无晃动,检查“云台的转动范围”,是否正常,解码器安装在云台附近。

MFC设置窗体背景图片(画刷)

MFC设置窗体背景图片(画刷) 先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中: CBrush m_brBk;//在public中定义 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 } 再打开类向导,找到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; } 按照上面的方法一路COPY下来运行,OK!并且由于图片是做为背景显示的,所以再添的按钮都能很好的显示出来,非常方便。 总结一下其中出现的变量和函数。 CBrush:类CBrush封装了Windows图形设备接口(GDI)中的画刷,画刷也就是采取什么方案填充图形的背景的工具。 OnInitDialog ( ):用于对对话框类的变量的初始化(注意:是在产生对话框之前就初始化),是WM_INITDIALOG消息产生的消息处理函数,覆盖该函数可改变对话框初始设置。 用法: virtual BOOL OnInitDialog();返回值指定对话框是否对它的一个控件设置输入焦点。如果OnInitDialog返回非零值,Windows 将输入焦点设在对话框的第一个控件上,只有在对话框明确将输入焦点设在某控件上,应用返回0。 CBitmap:类CBitmap封装了Windows图形设备接口(GDI)中的位图,并且提供操纵位图的成员函数。 LoadBitmap ( ):CBitmap类的一个成员函数,从应用的可执行文件中加载一个命名的位图资源来初始化位图对象。 用法:

MFC添加背景图片

问题 有的程序员希望在自己的应用程序中以有趣味的位图来代替对话框中令人讨厌的灰色背景,希望位图在对话框中看起来象墙纸而且并不影响对话框中的控制或静态文本的显示。 许多程序员找不到一个改变窗口背景的简单方法,是否有方法利用Windows API 函数来改变对话框的背景为某个位图呢? 方法 改变对话框的背景为某个位图并不困难,关键是需要清楚对话框和窗口是如何设置背景颜色的,以及程序员应该如何修改对话框和窗口改变显示的行为。 当Windows 准备改变对话框背景的颜色时,通常发送两个消息给对话框。第一个消息是WM_ERASEBKGND,此消息指示对话框绘制对话框的背景颜色,以“抹去”屏幕上对话框显示区域的任何显示。 第二个消息是WM_CTLCOLOR,发送此消息给对话框或窗口来表示Windows 需要知道对话框中控制的颜色。 在本节中,将重置对消息WM_ERASEBKGND 的处理,以便将位图绘制在窗口的背景上。另外,将重置对消息WM_CTLCOLOR 的处理,以避免对话框中的控制“剪补”位图。最后的结果是对话框的背景位图绘制在对话框背景上,控制在背景位图的“上面”。 步骤 按照下列步骤实现一个例子程序。运行此例子程序,选择菜单Dialog 和菜单项Bitmap Background,将弹出一个对话框,显示背景位图和几个控制。 实现例子程序的具体步骤如下: 1.在Visual C++中,利用AppWizard 创建新的项目文件,并命名此项目文件为 Ld145。 2.进入资源编辑器并创建新的对话框模板。在对话框中,添加几个静态文本域和编辑域,以及几个单选按钮和列表框。对话框的实际组成并不重要,只要能够覆盖部分位图就可以了。 3.选择ClassWizard,为刚创建的对话框模板创建对话框类,新类命名为 CBitma PB kgdDlg。 4.在资源编辑器中创建新的位图。 5.进入ClassWizard,从下拉列表中选择CBitmapBkgdDlg,从对象列表中选择对象CBitmapBkgdDlg,从消息列表中选择消息WM_INITDIALOG,点击按钮Add Function,在CBitmapBkgdDlg 的方法OnInitDialog 中添加下列代码: BOOL CBitmapBkgdDlg::OnInitDialog() { CBitmap * pBmpOld; RECT rectClient; VERIFY(m_brush=(HBRUSH)GetStockObject(HOLLOW_BRUSH)); VERIFY(m_Bitmap.LoadBitmap(IDB_BITMAP1)); m_Bitmap.GetObject(sizeof(BITMAP),&m_bmInfo);

MFC中picture控件显示图片

PictureBox控件的主要作用是为用户显示图片。实际显示图片由Picture属性决定。Picture属性包括被显示的图片的文件名(及可选的路径名)。注意窗体对象也具有Picture属性,通过设置该属性可直接在窗体背景上显示图片。 要在运行时显示或替换图片,可利用函数LoadPicture来设置Picture属性。提供图片文件名和可选路径名,由LoadPicture函数处理加载和显示图片的细节。 picMain.Picture = LoadPicture("VANGOGH.BMP") PictureBox控件具有AutoSize属性,当该属性设置为True时,PictureBox能自动调整大小与显示的图片匹配。如果要用AutoSize属性设置为True的PictureBox,设计窗体时就需要特别小心。图片将不考虑窗体上的其它控件而调整大小,这可能导致意想不到的后果,如覆盖其它控件。设计时应通过加载每一幅图片来检查是否有这种现象发生。 vc picture控件的分类进行拉总结, (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,名为Ttest. 对话框类为CTestDlg (一) vc picture控件非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张图片,ID为IDB_BITMAP2,然后在对话框上添加一个picture控件,右键点击打开属性,将type下拉框选择BITMAP,紧跟着Image下面就出现一个下拉框,拉开就会看到所有已经载入好的图片,选择你要的图片.运行程序即可看到. 方法2vc picture控件.通过背景图 同样如上,先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中 CBrush m_brBk;//在public中定义 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 } 在打开类向导,找到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; }

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(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,SR CCOPY); } }

MFC中设置对话框颜色、添加背景图片、添加音乐的方法

一、设置背景颜色的三种方法: 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 here switch (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 desired return hbr; } 这样为对话框着色就可以实现了。 二、给MFC添加背景图图片代码: 定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码: //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect);

MFC中更改背景图片

1.如果你建的是对话框应用程序,可以有以下方法改变对话框的背景色重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下: ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: class CExampleDlgDlg : public CDialog { ... protected: CBrush m_brush; ... }; ---- ②在OnInitDialog()函数中添加如下代码: BOOL CExampleDlgDlg::OnInitDialog() { ... // TODO: Add extra initialization here m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子 ... } ---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息):HBRUSH CExampleDlgDlg::OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); //在这加一条是否为对话框的判断语句 if(nCtlColor ==CTLCOLOR_DLG) return m_brush; //返加绿色刷子 return hbr; } 2.如果建立的是单文档程序 CDC* pDC = GetDC(); CRect rect; GetClientRect(&rect); //加载背景位图 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); //图片ID BITMAP bmp; bitmap.GetBitmap(&bmp);

视频监控系统控件安装(从IE访问)

使用IE访问监控设备的时候,会自动从设备上下载控件并自动注册。当控件HCNetVideoActiveX.cab没有下载或注册成功的时候,则不能正常访问设备。 安装HCNetVideoActiveX.cab控件的方法如下: 1.使用IE访问前的注意事项: 降低IE的安全级别,选择IE“工具”->“Internet选项”->“安全”->“自定义级别”,将涉及到控件下载运行和脚本运行的选项都设置成“启用”和“提示”。然后再打开监控的IP地址,会自动安装控件。 2.使用IE访问的时候提示“网页上有错误”或者有“×”的显示 出现该情况,很有可能是控件没有下载成功或则有残余的控件相关内容没有删除。可参考3.清除控件的方法进行清除处理后,在设置安全级别后进行访问。 3.清除控件的方法: 1.关闭IE,进入Windows系统目录下,找到Downloaded ProgramFiles文件夹中的相关控件信息是否还在,若在,将其删除。(HCNetVideoActiveX.cab对应HCNetVideoActiveX Control,NewHCNetActiveX.cab对应NewHCNetActiveX Control) 2.进入system32文件夹下,确认是否还有残留的相关文件,若存在将其删除。如果是XP 的操作系统,还需要将Windows下LastGood文件夹中的相关文件删除。 HCNetVideoActiveX.cab的相关文件是 HCNetVideoActiveX.ocx,HCNetSDK.dll,playm4.dllShowHCRemCfgWnd.dll RemoteCfgRes_CHI.dll,RemoteCfgRes_ENG.dll,RemoteCfgRes_TRAD.dll. NewHCNetActiveX.cab的相关文件是 newocx.ocx,HCNetSDK.dll, playm4.dll,langchg.dll,ShowHCRemCfgWnd.dll,RemoteCfgRes_CHI.dll, RemoteCfgRes_ENG.dll,RemoteCfgRes_TRAD.dll. 3.在“开始”的“运行”中输入:regedit进入注册表,在“我的电脑”下的第一个文件夹“HKE_CLASSES_ROOT”下查找相关内容,如果存在,则是控件手动注册后,没有手动注销掉,需要用手动注销控件方法将其销毁。 说明:该情况一般适用于有我们提供的控件包,并使用其进行手动注册的情况。具体方法见4.手动注册的方法。 4.如果完成上述步骤后,还是无法下载控件,建议重启下电脑或换台电脑测试。IE浏览涉及到的内容较多,系统其他的插件有可能造成OCX控件下载不成功。 4.手动注册的方法:

MFC 对话框 背景图片 以及消除 字体重影 字体重叠

很多人都想改变对话框的背景图,其实很简单,只需要一个函数就可以了,不过还是有问题的,下面讲述。 只需要响应WM_ERASEBKGND消息,然后重载OnEraseBkgnd(CDC*pDC)这个函数就可以,首先我们要添加消息响应,由于该消息不能用MFC ClassWizard添加,因为ClassWizard 没有该消息添加的选项,我们需要手动添加,只需要在消息响应MAP添加一下ON_WM_ERASEBKGND(),如下所示: BEGIN_MESSAGE_MAP(CSerialTestDlg, CDialog) //{{AFX_MSG_MAP(CSerialTestDlg) ON_WM_ERASEBKGND()//添加重绘背景消息响应 //}}AFX_MSG_MAP END_MESSAGE_MAP() 我们然后进行消息响应,添加消息响应函数,然后在对话框类的声明文件添加该函数的声明virtual BOOL OnEraseBkgnd(CDC*pDC);在实现文件中进行该函数的书写,如: BOOL CSerialTestDlg::OnEraseBkgnd(CDC*pDC) { CBitmap m_bitmap; m_bitmap.LoadBitmap(IDB_DLGBK);//加载背景图片,选择你对应的图片ID CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); dcCompatible.SelectObject(&m_bitmap); CRect rect; GetWindowRect(&rect); ScreenToClient(&rect);//选择客户区域 BITMAP bmp; m_bitmap.GetBitmap(&bmp); pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmW idth,bmp.bmHeight,SRCCOPY);//绘制BMP背景图 m_bitmap.DeleteObject(); return TRUE; } 但是这样做一般就可以,细心的人会发现字体有重叠,比如说静态文本框和EDIT控件,如果选择只读模式,作为输出,这时EDIT的背景是BMP背景图片,但是字体重叠,如下图,我这样就行消除。

mfc背景音乐与图片的实现

MFC播放声音文件 一.播放声音文件的简单方法 在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.WAV文件的路径和文件名,hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。例如播放C:\sound\music.wav可以用sndPlaySound ( "c:\\sound\\music.wav ",SND_ASYNC);或PlaySound( "c:\\sound\\music.wav ",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。 二.将声音文件加入到程序中 在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE 文件,实现无.WAV文件的声音播放。 要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为IDR_WAVE1。在播放时只需要调用下面的语句: PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_ RESOURCE|SND_NODEFAULT|SND_LOOP); 其中MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄, SND_RESOURCE是必须的标志。 作为资源的声音文件的第二种播放方法是把资源读入内存后作为内存数据播放。具体步骤入下:1.获得包含资源的模块句柄: HMODULE hmod=AfxGetResourceHandle();

Cinestyle(佳能插件)简介和前期安装详解

Cinestyle简介和前期安装详解 Cinestyle是由Technicolor公司发布的一个针对Canon单反视频用户开发的颜色分级工具。通过使用Cinestyle加上后期的LUT,可以让佳能单反相机拍摄的视频获得更大的动态范围,更平滑的明暗过渡,更多的画面细节,以及更少的噪点。Cinestyle是针对5D Mark II开发的,但同样适用7D,550D,60D等其它Canon单反,它可以明显有效的提升单反视频的画质,就像是Red 的HDRx,或Sony的S-Log。 自从几个月前Cinestyle发布以来,着实在单反视频的世界里引起了一场不小的轰动。现在再来讲Cinestyle似乎晚了点,网上到处都是相关的信息,很多朋友也已经熟知Cinestyle的使用了。不过最近还是连续有人来问我相关的问题,很多入门级的朋友希望能有更加简明的操作指南。为了节省这些朋友和我自己的时间,我现在把Cinestyle前后期的使用方法写在这里。 这个工具的使用方法是:先将Cinestyle文件作为一个画面风格档导入相机之中,前期使用该风格档拍摄,会得到一个非常“平”的画面,保留更多的细节,保留更大的动态范围。进入后期制作时,可以在编辑软件或调色软件中调用LUT文件或直接使用调色软件来进行调整,达到理想的画面效果。 前期安装详解: 1、免费下载的Cinestyle工具。先到 https://www.doczj.com/doc/a757060.html,/en/hi/theatrical/visual-post-production/digit al-printer-lights/cinestyle,填写一些信息后会进入下载页面。

如何给MFC对话框添加背景图片

如何给MFC对话框添加背景图片 2009年11月09日星期一 13:08 1、添加背景图片到“Bitmap”资源里。方法为“插入——资源”,如果还没有Bitmap,则新建一个Bitmap,否则选择资源 类型为“Bitmap”后“引入”想要插入的背景图片,我加入的背景图片如图1,加入过程如图2。 图1

图2

说明:引入的图片可以插入256色、16位色或更高色的图片,若是其他格式图片可用PS打开再另存为BMP、24位windows格式就可 以了。提示说该资源使用了大于256色的调色板,在VC里无法编辑等等,点确定就可以了,没有影响的。 2、定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码: else { //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP); //IDB_BITMAP是你自己的图对应的ID ,由于我刚刚加入的位图资源 //被我命名成了IDB_Bg,因而我这句就是bmpBackground.LoadBitmap(IDB_Bg);

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); } 3、编译运行结果如图3。

VC添加背景图

https://www.doczj.com/doc/a757060.html,/weiloujushi/blog/item/7a4 d1943f1561d159213c67a.html图解 https://www.doczj.com/doc/a757060.html,/s/blog_618b45a00100hu 9d.html VC++中如何给对话框加背景图片 (2010-03-22 16:57:59) 转载 分类:MFC/Windows 标签: it 方法一: 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; //目标DC dcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DC dcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DC dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SR CCOPY); 函数参考: GetClientRect

MFC单文档添加背景图片

MFC单文档添加背景图片 2009-05-08 10:50 改变视图单调的背景 1; 我们在用Visual C++写程序时,会看到她自动产生的界面背景非常的单调,我们可以自己来改变这个问题来实现美丽的背景,希望本文对初学者有所帮助。 本文代码运行效果图如下 下面来跟我做: 1.首先准备好一张美丽的图片,保存为BMP格式。 2.新建一个工程,命名为:test ,在资源编辑里用Import导入刚才准备好的位图文件.ID为IDB_BITMAP 如果位图是大于16色的,会出现无法显示的提示。不要紧,这并不影响程序最终的显示。 3.代码实现 3.1 我们为CTestView类添加一个变量 CBrush m_brushBackground;这个画刷就是用于画背景的。 3.2 我们在CTestView的构造函数中加入如下代码: CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP); ///加载位图 m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷 3.3 接着我们需要在OnDraw函数中画出来,代码如下: CRect rect; GetClientRect(rect);///取得客户区域 pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域 3.4 为了避免背景的闪烁,使显示更加完美,我们添加WM_ERASEBKGND消息的处理函数,并取消调用父类的处理函数,代码如下: BOOL CTestView::OnEraseBkgnd(CDC* pDC) {

相关主题
文本预览
相关文档 最新文档