`
jgsj
  • 浏览: 1051556 次
文章分类
社区版块
存档分类
最新评论

VC++问题集6

 
阅读更多

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++ windows运行环境合集(VC++2005-VC++2022)

    总的来说,VC++ Windows运行环境合集是解决程序运行依赖问题的有效工具,它使得开发者可以轻松地在各种Windows系统上部署和运行他们的C++程序,尤其是那些基于MFC框架的应用。正确地管理和使用这些运行库,能够保证...

    VC++允许库合集,解决未能加载文件或程序集CefSharp.Core.dll问题

    总之,"VC++允许库合集"是解决C++应用程序依赖问题的关键,而“未能加载文件或程序集CefSharp.Core.dll”通常是由于缺少运行库支持或配置不当所致。通过正确安装和配置VC++运行库,以及检查CefSharp的部署情况,通常...

    计算机问题集vc++ASP

    计算机问题集VC++ ASP是一个资源包,包含了初学者在学习VC++和ASP编程时可能会遇到的问题及解答。这个集合对于那些刚开始接触这两种技术的人来说是非常有价值的,因为它提供了实践中的常见问题和解决方案,帮助他们...

    VC++常用数值算法集

    在编程领域,尤其是在科学计算和工程应用中,...综上所述,"VC++常用数值算法集"涵盖的内容丰富多样,是解决各种数学问题和工程计算的强大工具箱。通过理解和掌握这些算法,开发者能够编写出高效且精确的数值计算程序。

    VC++各版本合集2005-2017

    此外,此版本引入了新的诊断工具,帮助开发者检测并修复性能问题。 **VC++2013**加强了C++14标准的支持,比如通用初始化语法、可变模板参数列表等。同时,它在调试和性能分析方面有所提升,提供更好的用户体验。 *...

    VC++皮肤(合集)

    6. **21840278VC++_VcExtend**:这可能是一个针对VC++的扩展库,不仅提供皮肤功能,还可能包含其他增强VC++功能的组件或工具。 7. **3970967changeskins**:这可能是一个皮肤切换工具或类,使得用户能够在运行时...

    VC++串口通信经典VC++源码合集

    VC++中的ReadFile和WriteFile函数分别用于接收和发送数据,这两个函数都是异步的,因此在实际应用中可能需要配合GetOverlappedResult或WaitForSingleObject等函数处理同步问题。 在这些源码中,还涉及到数据转换...

    vc++技巧集

    6. **调试技巧**:书中会教授如何使用Visual Studio的调试工具,包括设置断点、查看变量值、单步执行代码等,帮助开发者定位和解决问题。 7. **性能优化**:VC++允许进行底层优化,如使用inline函数、预编译头文件...

    VC++常见问题集—C++学习

    "VC++常见问题集—C++学习"这个资源正好为此目的而设计,它提供了一个关于C++编程的常见问题合集,帮助开发者解决实际编程过程中可能遇到的困扰。 首先,让我们探讨一些C++编程中常见的问题: 1. **编译错误**:...

    算法VC++程序集6

    顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。

    (VC++2015 合集

    总的来说,VC++2015 Redistributable Package是确保基于VC++2015编译的应用程序正常运行的基础,它提供了必要的运行时环境和库文件,解决了程序依赖问题,并且随着微软的安全更新,确保了系统的安全性。无论是用户...

    VC++运行库合集

    VC++运行库合集

    VC++ 合集 2023 年 6 月最新版

    VC++ 合集 2023 年 6 月最新版 一个文件选择性安装 所有的 VC++运行环境,截止 2023 年 6 月包括的 VC++版本如下 , VC++2005 ,VC++2008 ,VC++2010 ,VC++2012 ,VC++2013 ,VC++2022 .

    微软常用VC++运行库合集 v2018.06.30(32&64;位)最新版

    **微软常用VC++运行库合集详解** 微软的VC++运行库是开发人员在使用Microsoft Visual Studio编写基于C++的应用程序时所依赖的关键组件。这些运行库包含了Microsoft C++编译器生成的动态链接库(DLLs),它们提供了...

    VC++笔记-问题集

    **VC++笔记-问题集** 本笔记集合涵盖了VC++编程中的关键知识点,特别是关于多线程操作、进程通信以及自定义ActiveX控件制作的深入探讨。这些主题在实际开发中具有广泛的应用,理解并掌握它们对于提升软件工程能力至...

    算法VC++程序集5

    顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。

    vc++编程指南和VC常见问题集(中文.chm).rar

    《VC++编程指南和VC常见问题集》是一个针对微软Visual C++(简称VC++)开发者的参考资料集合。这个压缩包包含两个.chm文件,分别是"vc++ 编程指南.chm"和"VC常见问题集(中文).chm",它们提供了关于VC++编程的全面...

    VC++教学实践实例合集

    这里包含了若干本VC++实例教程及实例,对VC++学习很有帮助,希望大家能够喜欢。由于文件太大,分为五个部分。part5

    VC++深入详解(完整版)+所有源代码集

    《VC++深入详解(完整版)+所有源代码集》是一份全面探讨Microsoft Visual C++(简称VC++)编程技术的资源包,包含了书籍的详细内容和配套的源代码。这份资料旨在帮助开发者深入理解VC++的各个方面,从基础概念到高级...

    VC++运行库集合 6.0-2017

    随着时间的推移,微软不断更新和改进VC++运行库,引入了新的功能、优化了性能,并修复了已知的安全问题。例如,从VC++ 2005开始引入了.NET Framework的组件,使得C++开发者能够利用.NET平台的优势。在后续版本中,如...

Global site tag (gtag.js) - Google Analytics