61.图片反色处理。
·要实现图像的反色处理可以有多种实现方法。例如可以获取图片中每个像素点的颜色值,
然后对颜色值进行取反。如下代码:
CDC* pDC = m_image.GetDC();
CRect m_rect;
m_image.GetClientRect(m_rect);
BYTE r,g,b;
for (int i=1; i<]m_rect.Width();i++)
for (int j=1;j<m_rect.Height();j++)
{
COLORREF clr= pDC->GetPixel(i,j);
r = GetRValue(clr);
g = GetGValue(clr);
b = GetBValue(clr);
r = abs(255-r);
g = abs(255-g);
b = abs(255-b);
pDC->SetPixel(i,j,RGB(r,g,b));
}
也可以调用CDC类中的InvertRgn方法,该方法将制定区域的颜色取反。
如下示例代码:
CDC* pDC = m_image.GetDC();
CRect m_rect;
m_image.GetClientRect(m_rect);
CRgn m_rgn;
m_rgn.CreateRectRgn(m_rect.left,m_rect.top,m_rect.right,m_rect.bottom);
pDC->InvertRgn(&m_rgn);
62.如何在VC++ 中显示JPG图片。
·在Visual c++中,MFC类库没有提供相应的控件显示JPG图像。
JPG图像采用压缩形式存储,存储结构复杂。为了简单化,可以采用流的形式读取JPG文件。
首先利用CFile对象读取JPG文件,获取JPG文件的长度,然后利用GlobalAlloc函数在堆中
划分一个和文件大小相同的区域,接着调用GlobalLock函数锁定该区域,返回一个指向堆
的指针,将文件数据写入该区域中,最后调用CreateStreamOnHGlobal函数在堆中创建流
对象,调用OleLoadPicture函数根据流对象创建图像对象IPicture,调用IPicture的
Render方法将如下显示在指定的画布上。
如下示例代码:
void CShowJPGDlg::OnOK()
{
//定义打开文件的对话框,获取文件的路径
CFileDialog m_dlg(TRUE,"JPG",NULL,NULL,"JPG(*.jpg)|*.JPG|gif|*.gif",this);
if (m_dlg.DoModal()==IDOK)
{
CString m_filename =m_dlg.GetPathName();//获取文件路径
m_dir.SetWindowText(m_filename);
CFile m_file(m_filename,CFile::modeRead );//定义文件流对象
//获取文件长度
DWORD m_filelen = m_file.GetLength();
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.ReadHuge(pvdata,m_filelen);
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
m_picture->get_Width(&m_width);
m_picture->get_Height(&m_height);
CDC* dc = GetDC();
m_IsShow = TRUE;
CRect rect;
GetClientRect(rect);
SetScrollRange(SB_VERT,0,(int)(m_height/26.45)-rect.Height());
SetScrollRange(SB_HORZ,0,(int)(m_width/26.45)-rect.Width());
m_picture->Render(*dc,1,50,(int)(m_width/26.45),(int)(m_height/26.45),
0,m_height,m_width,-m_height,NULL);
}
}
63.如何通过一个点坐标知道点所处在的窗口?
我们可以通过ChildWindowFromPoint函数来实现。
ChildWindowFromPoint Windows API 函数。
函数原型:HWND ChildWindowFromPoint (HWND hWnd, LONG xPoint, LONG yPoint);
函数功能:返回父窗口中包含了指定点的第一个子窗口的句柄。
函数参数:hWnd 父窗口的句柄
xPoint 点的X坐标,以像素为单位
yPoint 点的Y坐标,以像素为单位
返回值:发现包含了指定点的第一个子窗口的句柄。如未发现任何窗口,则返回hWnd(父窗口的句柄)。如指定点位于父窗口外部,则返回零。
64.如何实现旋转的文字?
要实现字体的旋转,首先创建一个字体,在创建字体时指定倾斜角,然后利用设备上下文
选中字体,最后输出文字就可以了。文字就会在某一位置按照字体指定的角度倾斜。
创建一个字体可以调用CFont类的CreateFont方法。
65.如何获取当前系统字体列表。
Windows操作系统提供了一个EnumFontFamiliesEx函数,该函数用于获取系统字体列表。
具体语法请查阅MSDN。
如下示例代码:
CStringList fontlist;
//下面是定义的一个回调函数
int CALLBACK EnumFontList (const ENUMLOGFONTEX *lpelfe, const NEWTEXTMETRICEX *lpntme, unsigned long FontType, LPARAM lParam)
{
POSITION pos = fontlist.Find(lpelfe->elfLogFont.lfFaceName);
if (pos == NULL)
fontlist.AddTail(lpelfe->elfLogFont.lfFaceName);
return 1 ;
}
LOGFONT m_logfont;//定义一个用于描述字体信息的LOGFONT结构体指针。如果设置
memset(&m_logfont,0,sizeof(m_logfont));//LOGFONT结构的lfCharset成员为DEFAULT_CHARSET
m_logfont.lfCharSet = DEFAULT_CHARSET;//函数将列举所有字符的字体,否则只列举
//指定的字符集字体。
m_logfont.lfFaceName[0] =NULL;
EnumFontFamiliesEx(dc->m_hDC,&m_logfont,(FONTENUMPROC)EnumFontList,100,0);
66.让一个矩形向中心缩小
要让一个矩形向中心缩小指定的像素我们可以调用GetClientRect函数,此函数的具体使用
方法请查阅MSDN。
如下示例:
m_demo.GetClientRect(m_rect);//两个变量都是矩形
m_rect.DeflateRect(1,1,1,1);
67.如何实现空心文字?
Windows提供了一个空心字体---华文彩云,该字体在设备上输出时是空心的,效果比较好。
现在我们来实现宋体空心文本。
要实现字体的空心显示,可以利用设备上下文CDC类的通道方法。CDC类提供了多个通道方法,
其主要方法如下:
1)BeginPath//该方法用于开始一个通道。
2)EndPath//该方法用于结束一个通道。
3)StrokePath//该方法用当前的画笔绘制一个通道。
示例程序如下:
CDC* pDC = GetDC();
CRect m_rect;
GetClientRect(m_rect);
m_font.CreateFont(-32,-28,0,0,600,0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,"宋体");
pDC->BeginPath();
pDC->SelectObject(&m_font);
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(100,70,"明日科技");
CPen pen(PS_SOLID,1,RGB(255,0,255));
pDC->SelectObject(&pen);
pDC->EndPath();
m_font.Detach();
pDC->StrokePath();
68.如何提取并保存应用程序图标
提取应用程序的图标可以利用ExtractIcon API函数来实现。具体语法请查看MSDN。
函数返回一个图标的句柄。
保存应用程序的图标会比较复杂,需要了解图标的结构。图标文件由三部分组成,
第一部分
是图标文件头,结构如下:
typedef struct
{
WORD idReserved; //保留,(必须是0)
WORD idType; //资源类型(1标识ICON)
WORD idCount; //文件所含图片的数量
ICONDIREDTRY idEntries[1]; //每个图片的入口
}ICONDIR,*LPICONDIR;
一个图标文件可以包含多个图标,成员idCount用于确定文件包含的图标数量。
第二部分是图标资源索引目录,结构如下:
typedef struct
{
byte bwidth; // 图像宽度,以像素为单位
byte bheight; // 图像高度,以像素为单位
byte bcolorcount; //图像中的颜色数,如果是大于8的位图,此值为零
byte breserved; //保留,必须为零
WORD wplanes; //位面数,一般为1
WORD wbitcount; //每像素所占位数
DWORD dwbytesinres; // 资源的字节数
DWORD dwimageoffset; //图像数据距离资源开始处偏移位置
} icondirentry, *lpicondirentry;
第三部分是图标数据,结构如下:
typedef struct
{
LPBITMAPINFO icheader; // 位图信息头,可参照上节的位图头信息结构
RGBQUAD iccolors; //色彩表,同位图的色彩表。
LPBYTElpXOR;
LPBYTElpAND;
// AND掩码
} iconimage, *lpiconimage;
69.创建状态栏并显示相关信息?
如下示例为创建具有4个窗口的状态栏
UINT array[5];
for (int i=0;i<5;i++)
{
array[i] = 1001+i;
}
先定义状态栏变量 CStatusBar m_statusbar;
调用Create函数,m_statusbar.Create(this); //创建状态栏窗口
m_statusbar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板
for (int n = 0; n<4;n++)
{
m_statusbar.SetPaneInfo(n,array[n],0,155);//设置面板宽度
}
m_statusbar.SetPaneInfo(3,array[3],0,700);
//设置状态栏中显示的信息
CTime time;
time=time.GetCurrentTime();
CString stime;
stime.Format("当前时间:%s",time.Format("%y-%m-%d %H:%M:%S"));
m_statusbar.SetPaneText(0,stime);
...
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);重新定位
70. Windows Media Player 控件的主要方法
1.GetMute 获得静音属性
2.GetPlayState 获得播放状态
3.GetVolume 获得音量
4.Open 打开播放文件
5.Pause 暂停
6.Play 播放
8.SetShowControls 设置十分显示控制面板
分享到:
相关推荐
总的来说,VC++ Windows运行环境合集是解决程序运行依赖问题的有效工具,它使得开发者可以轻松地在各种Windows系统上部署和运行他们的C++程序,尤其是那些基于MFC框架的应用。正确地管理和使用这些运行库,能够保证...
总之,"VC++允许库合集"是解决C++应用程序依赖问题的关键,而“未能加载文件或程序集CefSharp.Core.dll”通常是由于缺少运行库支持或配置不当所致。通过正确安装和配置VC++运行库,以及检查CefSharp的部署情况,通常...
标题“vc++6.0win7可用”表明这个问题已经得到了解决,这意味着有一个经过调整或修改的版本,使得VC++6.0可以在Windows 7上顺利运行,且在过去两年内持续稳定使用,没有出现任何问题。这对于那些依赖于VC++6.0的...
计算机问题集VC++ ASP是一个资源包,包含了初学者在学习VC++和ASP编程时可能会遇到的问题及解答。这个集合对于那些刚开始接触这两种技术的人来说是非常有价值的,因为它提供了实践中的常见问题和解决方案,帮助他们...
此外,此版本引入了新的诊断工具,帮助开发者检测并修复性能问题。 **VC++2013**加强了C++14标准的支持,比如通用初始化语法、可变模板参数列表等。同时,它在调试和性能分析方面有所提升,提供更好的用户体验。 *...
在编程领域,尤其是在科学计算和工程应用中,...综上所述,"VC++常用数值算法集"涵盖的内容丰富多样,是解决各种数学问题和工程计算的强大工具箱。通过理解和掌握这些算法,开发者能够编写出高效且精确的数值计算程序。
7. **3970967changeskins**:这可能是一个皮肤切换工具或类,使得用户能够在运行时动态更换应用程序的皮肤。 在使用这些皮肤资源时,开发者需要了解如何在VC++项目中引入外部库,配置编译环境,以及如何调用相应的...
VC++中的ReadFile和WriteFile函数分别用于接收和发送数据,这两个函数都是异步的,因此在实际应用中可能需要配合GetOverlappedResult或WaitForSingleObject等函数处理同步问题。 在这些源码中,还涉及到数据转换...
7. **性能优化**:VC++允许进行底层优化,如使用inline函数、预编译头文件等。书中可能涉及这些优化策略以及如何利用Visual Studio的性能分析工具进行代码调优。 8. **多线程编程**:VC++支持多线程开发,书中会...
"VC++常见问题集—C++学习"这个资源正好为此目的而设计,它提供了一个关于C++编程的常见问题合集,帮助开发者解决实际编程过程中可能遇到的困扰。 首先,让我们探讨一些C++编程中常见的问题: 1. **编译错误**:...
总的来说,VC++2015 Redistributable Package是确保基于VC++2015编译的应用程序正常运行的基础,它提供了必要的运行时环境和库文件,解决了程序依赖问题,并且随着微软的安全更新,确保了系统的安全性。无论是用户...
VC++运行库合集
**微软常用VC++运行库合集详解** 微软的VC++运行库是开发人员在使用Microsoft Visual Studio编写基于C++的应用程序时所依赖的关键组件。这些运行库包含了Microsoft C++编译器生成的动态链接库(DLLs),它们提供了...
**VC++笔记-问题集** 本笔记集合涵盖了VC++编程中的关键知识点,特别是关于多线程操作、进程通信以及自定义ActiveX控件制作的深入探讨。这些主题在实际开发中具有广泛的应用,理解并掌握它们对于提升软件工程能力至...
顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。
《VC++编程指南和VC常见问题集》是一个针对微软Visual C++(简称VC++)开发者的参考资料集合。这个压缩包包含两个.chm文件,分别是"vc++ 编程指南.chm"和"VC常见问题集(中文).chm",它们提供了关于VC++编程的全面...
这里包含了若干本VC++实例教程及实例,对VC++学习很有帮助,希望大家能够喜欢。由于文件太大,分为五个部分。part5
7. **调试技巧**:VC++的IDE内置了强大的调试工具,如调试器,用于跟踪代码执行、查看变量状态、设置断点等。熟练掌握调试技巧可以帮助开发者快速定位和修复问题。 8. **源代码实践**:书中提供的源代码集是理论...
随着时间的推移,微软不断更新和改进VC++运行库,引入了新的功能、优化了性能,并修复了已知的安全问题。例如,从VC++ 2005开始引入了.NET Framework的组件,使得C++开发者能够利用.NET平台的优势。在后续版本中,如...
VC++串口通信20个经典源码合集: .\VC 串口通信程序.rar .\VC 读串口话是动态波形,非常好的应用程序,有源码.rar .\VC++ 串口实现双机互联 包含视窗加代码.rar .\VC++ 串口通信,可以收发数据,可选用TCPIP 通信.rar ....