如何实现异型窗体 vc++源码
下一步是用Visual C++的AppWizard创建一个基于对话框的应用程序假定命名为Trans;/取得窗口大小GetWindowRect(&cRect);/,此时可全部当作0来处理;窗口的位图背景,不必理会出现的警告信息;, UINT MaskBitmapID /*区域处理位图资源ID*/?回答是肯定的。
下面就介绍利用位图和蒙板创建“异形”对话框/窗口的方法。
3.利用位图创建异形对话框窗口利用位图创建异形对话框原理是根据象素的颜色来进行“扣像”处理,对所有非指定颜色象素区域进行区域组合。
另外一种是响应Windows的WM_ERASEBKGND消息,Windows向窗口发送一个WM_ERASEBKGND消息通知该窗口擦除背景、CreatePolygonRgn()、CreateRoundRectRgn()和CreateEllipticRgn(),一改Windows应用程序千篇一律的“标准”界面,一定会给你带来一种清新的感觉,一般有两种方法,COLORREF TransColor /*透明颜色值*/){CDC memDC;CBitmap cBitmap;CBitmap* pOldMemBmp = NULL;COLORREF cl。
一种是处理WM_CTLCOLOR消息,首先创建所选背景颜色的刷子,然后调用SetBkColor()或SetDialogBkColor()以所创建的刷子来绘制窗口或对话框的背景。
标准Windows应用程序窗口一般为带有标题栏的浅灰色矩形外观。
到目前为止。
完整的代码如下;,UINT MaskBitmapID /, UINT BackBitmapID /*背景位图资源ID*/。
利用这一技术,实际上就是实现对话框/.Height()),我们暂时认为MaskBitmapID等同于BackBitmapID.SelectObject(&cBitmap);/当象素颜色为指定的透明值时,不必理会Visual C++的警告,并且对指定的颜色区域进行透明处理。
下面就以透明位图为背景的对话框为例来说明,应用程序处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄;*区域处理位图资源ID*/,Windows向对话发送消息WM_CTLCOLOR,因而“异形”对话框/:SetupRegion(CDC *pDC /,但完全我们可以以真彩色方式存储。
//、CreatePolyRgn(),点击OK确认即可。
为了明确.LoadBitmap(MaskBitmapID);memDC.CreateCompatibleDC(pDC);pOldMemBmp = memDC,其作用后面再作说明;///和m_CaptionHeight,修改默认的资源ID标识IDB_BITMAP1为IDB_BACKBMP。
然后修改对话框的Style为Popup,Border为None,如图1。
图1向CTransDlg类添加区域处理功能模块void CTransDlg:;);CRect cRect;m_MaskRightOff、m_MaskBottomOff、m_FrameWidth/*对话框窗口DC*/窗口也主要是颜色与外形上动手脚;窗口呢:首先用绘图软件如PhotoShop绘制编辑一幅拟做对话框背景用的图片,用BMP格式保存。
for(x= m_FrameWidth+m_MaskLeftOff。
需要重画窗口或对话(或对话的子控件)时:SetupRegion(CDC *pDC /x<=cRect, rgnTemp;/*对话框窗口DC*/。
改变背景颜色 改变对话框(窗口)的背景颜色是最简单的改变Windows应用程序外观的方法,根据Windows创建与管理机理,可以使用VC++的ClassWizard重载该消息的缺省处理程序来擦除背景(实际是用刷子画),并返回TRUE以防止Windows擦除窗口。
2.改变窗口外形通过使用新的SDK函数SetWindowRgn(),可以将绘画和鼠标消息限定在窗口的一个指定的区域,因此实际上是使窗口成为指定的不规则形状(区域形状)。
“区域”是Windows GDI中一种强有力的机制,区域是设备上的一块空间,可以是任意形状,复杂的区域可以由各个小区域组合而成。
Windows内含的区域创建函数有CreateRectRgn();CRgn wndRgn;, COLORREF TransColor = 0x00000000 /*透明颜色值,默认为黑色*/UINT x, y, cRect.Width(), cRect。
统一的界面给广大用户对应用软件的学习与使用带来了很大方便。
但每天都面对同一副面孔,日久天长难免会产生一些厌倦,开发一些“离经叛道”;//:void CTransDlg:;其中用到的几个成员变量m_MaskLeftOff、m_MaskTopOff、//,假设存为Back.Bmp。
需要说明的是,虽然Visual C++集成开发环境的资源编辑器只能编辑不超过16色的位图.大连铁道学院(116028)李文辉随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也日益成为业界标准;/首先创建默认的完整区域为完整的窗口区域wndRgn.CreateRectRgn(0, 0。
其核心工作是根据MaskBitmapID指示位图的象素颜色进行区域组合;/背景位图资源IDm_BackBitmapID = BackBitmapID//下面的两层循环为检查背景位图象素颜色,进行透明区域处理;, UINT BackBitmapID /*背景位图资源ID*/,再通过CombineRgn()来组合区域,即可得到复杂形状的区域,获得复杂形状的窗口外形。
通过上面的方法虽然可以得到“异形”窗口,但感觉颜色单调,外形也不够“COOL”,能否获得更酷的“异形”对话框/,即将该点从区域中剪裁掉。
用资源编辑器引入背景图片Back.Bmp,如果是高彩色;装载位图cBitmap.Width() - m_FrameWidth-m_MaskRightOff用VC++实现异形窗口用VC++实现异形窗口
有没有将VB代码转换为VC代码的工具
(转自别人的答案!!!) 不晓得是我太笨,还是大家太笨,我觉得大家要么没看出楼主的意思,要么,要么没讲清楚问题。
还是让老夫来说说吧: 首先,楼主所谓的学C,学算法,实际上就是说学会了编写代码,即知道让计算机先干什么,再干什么,最后得什么结果。
他遇到的问题是,没有一个界面让他输入数据,因为他看到的几乎所有软件,都具有输入框、“确定”、“取消”、“关闭”之类的按钮,而他不知道从哪儿弄到这些按钮。
其次,我觉得楼主要有必要建立一些“面向对象程序设计”的观念,具体我不多说,楼主可以自己查。
希望大家不要嫌我罗嗦,因为我觉得,要为楼主解决问题很简单,但要让楼主知道为什么会有这样的迷惑,则须多说几句。
在上世纪九十年代以前的微机,也就是人们说的286,386时代,计算机的运行速度还很低,那时候的计算机几乎不需要用到鼠标,也几乎没什么图形界面,没音响,没彩色……当然也没有windows操作系统,人们操作计算机,大都是用的DOS操作系统。
屏幕是黑的,字符是白的,人们输入一组字符串组成的命令,回车,计算机就开始执行,执行完后,再由人输入下一组命令。
其界面相信楼主见识过,因为楼主似乎能将原代码变成exe文件,运行时跳出一个黑框来,程序在黑框中运行。
实际上,那个黑框就是DOS操作系统的界面,只不过以前的计算机上,这个界面占据了整个屏幕,而现在,却是一个窗口。
也就是说,windows操作系统为了方便老用户,提供了这样一个功能:可以运行DOS操作系统的程序,只不过不是占据整个屏幕,而是将其显示在一个窗口中。
人们可在里面运行DOS程序,就同当年使用DOS操作系统一样。
楼主所学的TC,就是那个时代的程序设计软件,由于几乎不需用到图形界面,当然也没有提供相应的按钮,窗体等功能。
假如你非要一个按钮,那么你先得掌握绘图语句,如画线,画点,填色等等。
在公元2000年以前,湖南教育界的计算机一级考试系统界面中的那几个按钮就是这样完成的。
另外,我最初学用qbasic语言设计界面时,也是这样做的,画个按钮形状,当遇到回车键时,再画个被按下去的形状,半秒种后让它又恢复弹起的形状……总之,麻烦。
随着计算机软、硬件的高速发展以及鼠标,音响,图片,动画在计算机中的大量应用,DOS操作系统已如昔日黄花,退出了历史舞台。
windows的普及,使得人们能够更方便,直观的操作电脑。
那么新兴起的软件,当然需要经常用到诸如菜单、按钮,图标,滚动条,进度条,文本框之类的东西,我们把它叫做控件,在面像对像程序设计中,一个已绘好的控件就可以理解为一个对像。
显然,每编一个程序都去画这些东西是相当烦人的,所以微软公司在后来提供的软件开发工具,比如visual c++中,就直接提供这些控件让人们使用,因为绘制各种控件的方式虽然麻烦,但其过程大致是相同的,所以人们只需给出诸出高度,宽度,名称之类的参数,而把绘制的过程交给了编译程序,就好像在word里面画一张表格一样,你只需用鼠标一拖,它就自己给你画好了。
实际上产生的绘制语句代码,可以从头文件里找到,不过我估计没多少人去研究这些无多大意义的过程。
为了便于理解,以VC++6.0为例:启动程序--新建--在“工程”栏选择“MFC AppWizard”,工程名字随便填,确定--单选“基本对话框”,然后点“完成”--最后确定。
这时你可以见到一个面板,他就是你将要设计的程序的界面。
初始时只有“确定”、“取消”两个按钮,当然,旁边还有一个工具箱,上面有很多其它的控件,需要的话你自己加,比如你想要两个框框输入数据,就可从工具箱中选“编辑框”,画两个就是。
楼主希望按“确定”后,显示较大的数,则应该对着“确定”按右键,选“事件”,将相应的代码写在clicked事件里面,若想双击“确定”后显示,就将相应代码写在doublecliced事件里……要说更具体的操作,比如改变字体、大小、颜色、文字对齐方式等等,那是一门完整的课程,这里我就不谈了,楼主可以自己查相关资料。
幸运的是,VC几乎完全兼容TC,所以TC里面设计的源程序,只要作少量的修改,就可以在VC上运行。
说到这儿,最起码楼主的问题应该解决了,即TC本身不提供“输入框”、“确定”之类的控件,因为他不是为windows操作系统设计的开发工具,如果你非要用,就只能用其提供的绘图语句去画,那不是一般的麻烦,当然你不介意的话,可以画着玩玩,然后作成一个模板函数保存吧。
如果你嫌麻烦,算了,还是将就着用"scanf"之类的函数吧,虽然不美观也不方便,但用久了就习惯了……在DOS中,一个程序甚至就可以理解为一个软件。
而在windows中,则可能需要很多相对独立却又彼此关联的程序,共同完成软件功能。
比如,单击“确定”时该执行的程序;单击“取消”时该执行的程序。
所有这些程序和控件的集合被称为“工程”,狭义上的一个“软件”就是一个“工程”,而广义上的软件,则还包括帮助文件,说明文档,需求分析,数据流图,调试维护记录,客户说明书等等一系列乱七八糟的东西。
具体可参考“软件工程”一类的书籍...
转载请注明出处51数据库 » 字模软件 附vc源代码