`
ukn660dm
  • 浏览: 15394 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

选择题自测小程序中的几个问题

 
阅读更多

选择题自测小程序中的几个问题
2012年01月02日
    一个小程序,用于进行选择题的自测。
  从一个题库中随机抽出100个题目,然后在程序界面上每道题每道题的显示给用户供用户回答。包含了多个界面,各个界面之间按照一定关联相互切换。主要界面――“答题界面”需要做背景,文本显示在背景图片上。几个编程过程中以前没遇到过的问题。
  第一:关于CDC的StretchBlt函数
  CDC类的StretchBlt函数能够缩放图片,但是在缩放的时候会有一定的失真。解决方法,在调用之前调用SetStretchBltMode函数对CDC进行设置。具体代码:
  CDC dc(this);
  dc->SetStretchBltMode(HALFTONE);
  dc->StretchBlt(0,0,800,500,&m_mdc,0,0,800,600,MERGECOPY);
  在网上查这个问题时看到的网页的摘要:
  ――――――――――――――――――――――
  在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。
    如果目的矩形比来源矩形小,那么StretchBlt在缩小图像时就必须把两行(或列)或者多 行(或列)的图素合并到一行(或列)。完成此操作有四种方法,它根据装置内容伸展模式属性来选择其中一种方法。您可使用 SetStretchBltMode 函数来修改这个属性。
  SetStretchBltMode (hdc, iMode) ;
  Mode 可取下列值:
  BLACKONWHITE 或者 STRETCH_ANDSCANS(内定):如果两个或多个图素得合并成一个图素,那么StretchBlt会对图素执行一个逻辑AND运算。这样的结果是只有全部的原始图素是白色时该图素才为白 色,其实际意义是黑色图素控制了白色图素。这适用于白背景中主要是黑色的单色点阵图。
  WHITEONBLACK 或 STRETCH_ORSCANS:如果两个或多个图素得合并成一个图素,那么StretchBlt 执行逻辑OR运算。这样的结果是只有全部的原始图素都是黑色时才是黑色,也就是说由白色图 素决定颜色。这适用於黑色背景中主要是白色的单色点阵图。
  COLORONCOLOR 或 STRETCH_DELETESCANS:StretchBlt 简单地消除图素行或列,而没有任何逻辑组合。这是通常是处理彩色点阵图的最佳方法。
  HALFTONE 或 STRETCH_HALFTONE:Windows根据组合起来的来源颜色来计算目的的平均颜色。
  ―――――――――――――――――――――――――
  第二个:窗口切换和隐藏
  各个窗口之间相互切换,有时候需要隐藏一些窗口,有时候需要显示一些隐藏的窗口,有时需要将一些窗口置顶。这些问题其实都是基本问题,只是以前没做过。
  隐藏某个窗口:调用窗口的ShowWindow(SW_HIDE)函数。
  将新弹出的窗口置于原窗口之上:
  这里我试过将原窗口(A窗口)作为新弹出窗口(B窗口)的父窗口,但是却没有效果。因也需要在B窗口中调用A窗口,所以我再B窗口中添加了一个CWnd的指针,自己写了一个Init函数将A窗口从Init函数在B窗口初始化后传入。于是就凑巧有了B窗口在A窗口之上的效果。不清楚具体原因,但方法可行。
  将新弹出的窗口置于原窗口之上并禁用原窗口:
  这个直接在现实新窗口的时候,需要禁用窗口调用EnableWindow(false)函数,在需要恢复的时候再调用EnableWindow(true)。这里我将原窗口的指针传到了新窗口中,并在新窗口关闭时恢复原窗口。
  第三个:从外部某文件夹中读入图片,并显示。
  这个我是在网上找了个别人写的类,原文网址丢失,标题为《使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像》。直接复制了他的代码,然后进行了一些修改,毫无压力的解决了图片的读取和显示。代码比较多,不贴了。
  不过读取的时候需要文件的文件名。于是添加了读取某个文件夹内所有需要的格式的文件的功能。我用了CFileFind类和一个CString数组完成功能。
  具体代码:
  //////////////////////////////h文件中///////////////////////////////
  vector m_ImageName;
  ///////////////////////////cpp文件中//////////////////////
  CFileFind finder;
  CString ImageName;
  finder.FindFile("Image\\*.*");
  while(finder.FindNextFile())
  {
  ImageName=finder.GetFileName();
  if(ImageName.Find(".bmp")!=-1||ImageName.Find(".jpg")!=-1||ImageName.Find(".JPG")!=-1||ImageName.Find(".BMP")!=-1)
  {
  ImageName="Image\\"+ImageName;
  m_ImageName.push_back(ImageName);
  }
  }
  /*********************/
  我只识别了jgp和bmp格式的文件。
  第四个:透明CStatic控件
  这个走了不少弯路。后来在网上找到一个帖子,(地址:http://www.codesky.net/article/doc/200310/2003103077003673.htm )重写CStatic类的OnPaint函数。具体代码:
  但是帖子中的代码无法解决我的问题,因此做了些的修改。开始是在重写的CStatic函数中绘制图片,能达到效果,但是由于重写的CStatic类没有占据整个窗口,所以效果很差。于是又再窗口中绘制图片,重写的CStatic调用DrawText绘制文字。然后就是各种弯路了。DrawText函数不分行显示文本,文本过多时就显示不全了,然后我又不知道可以设置成多行显示,所以又回到使用SetWindowText函数,可是SetWindowText函数没有透明效果,搞得我各种纠结,然后自己写了个分行的功能。采用一个CString类来保存需要显示的文本,然后根据每行的宽度和文字的宽度计算每行显示的文本数,显示完后删除这部分文本,可是CString类用2个保存一个汉字,所以删除时候采用删除偶数个,可是出现了各种乱码,一个汉字删了一半,跟着的都成了乱码,各种伤。后来查到DrawText的是可以设置成多行显示的,相当的无语。
  在CStatic里头加入的一个用于绘文字的函数,具体代码是:
  void CMyStatic::drawText(CString szText)
  {
  m_szText=szText;
  CClientDC dc(this);
  CRect client_rect;
  GetClientRect(client_rect);
  dc.SelectObject(&m_Font);
  dc.SetBkMode(TRANSPARENT);
  dc.SetTextColor(RGB(m_r,m_g,m_b));
  if(m_bCenter)
  dc.DrawText(m_szText, client_rect, DT_CENTER|DT_WORDBREAK);
  else
  dc.DrawText(m_szText, client_rect,DT_WORDBREAK);
  }
  m_szText是CMyStatic用来保存需要显示的文本的CString类。因为有些文本需要居中显示,有些不要,所以有了if语句和bool值m_bCenter。DrawText函数中DT_WORDBREAK参数就是表示多行显示。
  第五个:各种控件被绘制的图片覆盖
  窗口类是基于资源中窗口资源创建的窗口,然后一绘图就把原本在窗口上的控件都覆盖掉了。解决方法就是简单的在绘图完后每个控件都调用各自的SetFocus函数,重新获得一下焦点。
  第六个:窗口关闭消息获取
  窗口关闭时需要进行一些必要的处理,一些对话窗口可以通过按窗口上的某个按钮进行关闭,这个时候只要响应相应的按钮消息就行,不过在如果是按了窗口标题栏上的那个叉叉关闭的,不拦截下消息就无法进行处理。解决方法是在消息映射图中拦截WM_CLOSE消息。同时自己写一个响应这个消息的函数。具体代码:
  //消息映射图
  ON_MESSAGE(WM_CLOSE,Onclose)
  /**********************/
  这里的Onclose函数是自己添加的。
分享到:
评论

相关推荐

    网络安全选择题题库答案.docx

    网络安全选择题题库答案 网络安全选择题题库答案全文共6页,当前为第1页。网络安全选择题题库答案全文共6页,当前为第1页。 网络安全选择题题库答案全文共6页,当前为第1页。 网络安全选择题题库答案全文共6页,当前...

    计算机二级C语言考试题预测

    一、选择题 (1) 下面叙述正确的是(C) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都...

    网络安全选择题答案.docx

    网络安全选择题答案 2017年网络安全选择题答案 一、单选题 1.为了防御网络监听,最常用的方法是(B) A、采用物理传输(非网络)B、信息加密C、无线网D、使用专线传输 2.使网络服务器中充斥着大量要求回复的信息,消耗...

    语言程序设计课后习题答案

    采用二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简单;3.机器可靠性高;4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其他进制需要更多的位数。 1-9 请将以下十进制数值...

    ASP ISchool随机抽题考试系统

    1.修正几个安全性BUG 2.修正部分服务器无法上传文件的BUG 3.修改抽题主函数,提高了15%左右的抽题效率 4.增加后台默认目录修改提示 V3.1Sp2(20100220) 1.加强考生用户验证 2.加强选择题录入和导入格式检测 3.其他...

    JAVA面试题最全集

    5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb中的transaction机制 ...

    会计理论考试题

    A、生物病毒 B、细菌 C、被损坏的程序 D、特制的小程序 10.文字处理系统是一种 __C__ 。 A、系统软件 B、管理软件 C、应用软件 D、编辑程序 11.Visual Basic 5.0是一种 __C__ 。 A、自然语言 B、机器语言 C、汇编...

    软件工程-理论与实践(许家珆)习题答案

    软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。  硬件特征:价格贵、存储容量小、运行可靠性差。  软件特征:只有程序、程序设计概念,不重视程序设计方法。  ② 程序系统阶段。  硬件特征:速度、...

    java 面试题 总结

    创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ ...

    C语言入门经典(第4版)--源代码及课后练习答案

    书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程实例。本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。读者基本不需要...

    JAVA面试题JAVA面试题JAVA面试题JAVA面试题

    我们毕业生如何在面试前对以上几个方面多加了解和练习,一定会在面试中取得良好的效果,在求职中获得成功 ************************** end 1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与...

    “计算机应用基础”习题二.doc

    切换同时打开的几个程序窗口的操作方法有 。 A.单击任务栏上的程序图标 B.按Alt+Tab组合键 C.按Alt+Esc组合键 D.按Shift+Tab组合键 E.按Ctrl+Esc组合键 D.按Ctrl+Tab组合键 *11.可以隐藏的文件有 。 A.程序文件 B....

    汇编语言_期末考试_试题.

    一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称...

    算法导论(part1)

    一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的解。 在那些不太适合于本科生、更适合于研究生的章节和练习前面,都加上了星号(*)。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多...

    C 程序指导书及实践指导

    现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 4、为一个起泡排序程序设计测试用例,并测试之。 [分析讨论] 通过实验,分析定义与引用数组的区别。...

    C语言程序设计(谭浩强)第三版

    第4章:选择结构程序设计 4.1选择结构和条件判断  4.2用if语句实现选择结构  4.2.1用if语句处理选择结构举例  4.2.2if语句的一般形式  4.3关系运算符和关系表达式  4.3.1关系运算符及其优先次序  4.3.2关系...

    超级有影响力霸气的Java面试题大全文档

    创建了几个String Object? 两个 31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个...

    c++ 面试题 总结

    块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的...

    vc++ 开发实例源码包

    如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 1:综合FTP下载和HTTP(网络蚂蚁)(多线程). 2:FTP...

Global site tag (gtag.js) - Google Analytics