51.定义一个对话框类,创建时根据其ID创建。
m_frame.Create(IDD_DIALOGFRAME);
m_frame.ShowWindow(SW_SHOW);
m_frame.ShowScrollBar(SB_VERT,false);//不显示滚动条
m_frame.ShowScrollBar(SB_HORZ,false);
m_picture.SetParent(&m_frame);//把一个位图控件与这个对话框相连
52.设置滚动信息
m_frame.GetClientRect(rect);
int xpos = m_frame.GetScrollPos(SB_HORZ);
if (xpos !=0)
m_frame.ScrollWindow(xpos,0); //恢复窗口的水平滚动区域
int ypos = m_frame.GetScrollPos(SB_VERT);
if (ypos !=0)
m_frame.ScrollWindow(0,ypos); //恢复窗口的垂直滚动区域
SCROLLINFO vinfo;
vinfo.cbSize = sizeof(vinfo);
vinfo.fMask = SIF_ALL;
vinfo.nPage = bmp.bmHeight/10;
vinfo.nMax= bmp.bmHeight-rect.Height()+bmp.bmHeight/10;
vinfo.nMin = 0;
vinfo.nTrackPos = 0;
vinfo.nPos = 0;
//设置垂直滚动条信息
m_frame.SetScrollInfo(SB_VERT,&vinfo);
vinfo.fMask = SIF_ALL;
vinfo.nPage = bmp.bmWidth/10;
vinfo.nMax= bmp.bmWidth-rect.Width()+bmp.bmWidth/10;
vinfo.nMin = 0;
vinfo.nPos = 0;
vinfo.nTrackPos = 0;
vinfo.cbSize = sizeof(vinfo);
//设置水平滚动条信息
m_frame.SetScrollInfo(SB_HORZ,&vinfo);
53.如何实现自定义滚动条
要实现自定义的滚动条控件,主要有三种方法。一是利用钩子技术重新绘制滚动条,
该方法实现起来比较复杂。
二是获得滚动条的显示区域,将其扣除,然后在该区域显示自定义的滚动条控件。
三是自定义一个滚动条控件,将其与对话框中的某个控件关联,在创建滚动条控件时,
将对话框中的某个控件隐藏,并在该控件的位置显示滚动条控件。
54.画图时最好先用pDC->SetViewportOrg(100,245);来设置一下坐标原点,不然会默认为最左上角的
一点为原点。
55.如何实现浮雕效果
浮雕效果实际上是将图片中每一点像素都进行了处理,首先循环遍历每一点的像素,
分别取出像素的R、G、B元素值把这些值减去相邻像素的元素值再加上128,
因为这些元素值的取值在0--255之间,所以计算后超出了255将元素值赋值为255,
小于0则赋值0.将这3个元素值重新组合赋予原来的像素。
56.如何使鼠标移到窗口前显示沙漏标。
可以通过调用BeginWaitCursor函数,去除沙漏标可以调用EndWaitCursor函数。
57.如何查找一个目录下的所有文件或文件夹。
我们来分析下面的代码吧
CString CBmpView::Search(CString curstr)//传当前路径名
{
long handle;//用来标识打开的文件
if(curstr.IsEmpty())//如果传过来的路径名为空
return "";
if(_getcwd( buffer, 1000)==NULL)//获取当前工作路径
{
AfxMessageBox("没有当前路径,请打开一个图像文件!");
return "";
}
CString m_sPartname;
int len = curstr.GetLength();
int i;
for(i = len-1;curstr[i] != '//';i--)
m_sPartname.Insert(0,curstr[i]);
i++;
while(i--<0)
buffer[i]=curstr[i];
if (_chdir(buffer) != 0)//改变当前的工作路径
return "";
bool b_notfinde=false;//先标识文件没找到
struct _finddata_t filestruct;//用于存放文件的信息
// 开始查找工作, 找到当前目录下的第一个实体(文件或子目录),
// ″*″表示查找任何的文件或子目录, filestruct为查找结果
handle = _findfirst("*", &filestruct);
do{
if((handle ==-1)) // 当handle为-1, 表示当前目录为空, 则结束查找而返回
break;
// 检查找到的第一个实体是否是一个目录
if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
{
continue ;
}
CString Filename=filestruct.name;
{
CString tailstr;
//获取文件扩展名
tailstr = Filename.Mid(Filename.GetLength()-3);
tailstr.MakeUpper();
Filename.MakeUpper();
m_sPartname.MakeUpper();
if(tailstr=="BMP")
{
if(b_notfinde==false)
{
if(m_sPartname==Filename)//标识为找到了,
//进入下一次循环找下一个文件。
b_notfinde=true;
}
else
{
_findclose(handle);
return Filename;
}
}
}
} while(_findnext(handle, &filestruct)==0);
_findclose(handle);
this->KillTimer(1);
AfxMessageBox("已经到达最后一个图像文件!");
return "";
}
58.滚动条的使用的示例代码
void CBmpDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int pos,min,max,thumbwidth;
SCROLLINFO vinfo;
GetScrollInfo(SB_HORZ,&vinfo);
pos = vinfo.nPos;
min = vinfo.nMin;
max = vinfo.nMax;
thumbwidth = vinfo.nPage;
switch (nSBCode)
{
break;
case SB_THUMBTRACK: //拖动滚动块
ScrollWindow(-(nPos-pos),0);
SetScrollPos(SB_HORZ,nPos);
break;
case SB_LINELEFT : //单击左箭头
SetScrollPos(SB_HORZ,pos-1);
if (pos !=0)
ScrollWindow(1,0);
break;
case SB_LINERIGHT: //单击右箭头
SetScrollPos(SB_HORZ,pos+1);
if (pos+thumbwidth <max)
ScrollWindow(-1,0);
break;
case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击,增量为6
SetScrollPos(SB_HORZ,pos-6);
if (pos+thumbwidth >0)
ScrollWindow(6,0);
break;
case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击,增量为6
SetScrollPos(SB_HORZ,pos+6);
if (pos+thumbwidth <max)
ScrollWindow(-6,0);
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
59.放大和缩小图片
可以使用StretchBlt,StretchBlt函数可以根据设置的比例大小重画图片。
60.如何获取位图大小?
获取位图大小,最简单的方法就是使用Picture空间,当Picture空间加载图像时,
会自动调整空间的大小,其大小就是图像的大小。
例如:
m_image.SetBitmap(m_hbitmap)//m_hbitmap是位图句柄
CRect m_bitrect;
m_image.GetWindowRect(m_bitrect);
还可以通过Cbitmap累的GetObject方法获取位图大小。
例如:
CBitmap bitmap;
BITMAPINFO bInfo;
bitmap.Attach(m_hbitmap);
bitmap.GetObject(sizeof(bInfo),&bInfo);
int x=bInfo.bmiHeader.biWidth;
int y=bInfo.bmiHeader.biHeight;
分享到:
相关推荐
VC++常用数值算法集 一些常用的数学算法
VC++皮肤合集,本人从网上收集,用于windows窗体皮肤的更换
VC++串口通信经典源码合集
VC++ windows运行环境合集,用于生成C++运行程序Exe(mfc等)后,在新电脑上部署运行环境,带注册Dll,实际项目已使用,亲测可用.
VC++各版本合集,包括VC++2005,VC++2008,VC++2010,VC++2012,VC++2013,VC++2015,VC++2017
顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。
初学vc++和ASP的一些问题集。里面的问题可能对一些人有益处。还属初浅。
VC++ 合集 2023 年 6 月最新版 一个文件选择性安装 所有的 VC++运行环境,截止 2023 年 6 月包括的 VC++版本如下 , VC++2005 ,VC++2008 ,VC++2010 ,VC++2012 ,VC++2013 ,VC++2022 .
VC++常见问题集:其中包含了c++编程时可能遇到的问题及解决问题的方法,对初学C++编程的同学很有帮助,可以下载!
微软常用VC++运行库合集 v2018.06.30(32&64;位)最新版
VC++图像处理算法合集
VC++运行库合集
顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。
这里包含了若干本VC++实例教程及实例,对VC++学习很有帮助,希望大家能够喜欢。由于文件太大,分为五个部分。part5
VC++运行库合集单文件安装包就一个exe文件,如果你的电脑缺少运行库可以用这个,默认会装基本所有运行库,离线运行不需要联网操作,亲测好用,能解决很多问题
VC++知识集:收录了若干程序员在进行VC++编程时遇到的实际问题,并给出了详细的讲解。希望对您有所帮助!
下载并安装微软VC++2015版运行库 (英文全称:Microsoft Visual C++ 2015 Redistributable Package)
VC++允许库合集,解决未能加载文件或程序集CefSharp.Core.dll问题
VC++串口通信串口软件程序18个经典源码合集: VC 串口通信程序.rar VC 读串口话是动态波形,非常好的应用程序,有源码.rar VC++ 串口实现双机互联 包含视窗加代码.rar VC++ 串口通信,可以收发数据,可选用TCPIP 通信....
编程语言,VC++6.0 工具主要为(OD1.1,CE5.4) 预计平均3天左右更新一课 大家好,我是郁金香老师:QQ150330575 欢迎大家参加梅州技术 VC++外挂编程VIP培训班。 在接下来的一段时间将由我和大家一起学习游戏外挂的分析...