Windows 编程常用函数


一.    对话框操作

1.  Domodal ( ) 创建模态对话框

2.  GetDlgItem ( ) 获得对话框窗口上的控件

3.   GetDlgItemText() 获得指定控件上的文字

SetDlgItemText() 设置控件上的文字

4.  GetWindowText() 获得指定窗口上的文字

   GetDlgItem ( )-> GetWindowText() 获得指定控件上的文字信息

5.  GetDlgItemInt() 获得指定控件上的数字字符并将其转换为整形数字

6.  DoDataExchange()控件与某一变量相关联后,此函数用于该参数和控件交换数据

7.  UpData() DoDataExchange()共同使用,实现控件与变量的关联

8.  GetWindowRect() 得到窗口的矩形的大小

9.  IsRectNull()判断矩形窗口的大小是否为零

10.             SetWindowPos() 设定窗口的大小

11.             OnInitDialog() 当控件显示之前初始化对话框,使对话框和控件显示

12.             SetWindowLong() 当窗口创建完毕,重新设计窗口过程函数

13.             GetNextWindow() 得到当前窗口的下一个窗口的句柄

14.             GetWindow() 通过其参数也可以获得其上一个或下一个窗口句柄

15.             GetNextDlgTabItem() 得到下一个有Tab属性的窗口

16.             GetFocus()得到当前的活动窗口

17.             SetFocucs() 设置当前的活动窗口

二.    属性表单操作

1.  AddPage()将属性页对象添加到属性表单中

2.  DoModal()创建属性表单

3.  SetWizardMode()创建表单向导

4.  OnSetActive() 当创建向导后,某一属性页处于活动状态时将调用此函数,可在此函数中修改属性页。

5. SetWizardButtons()在OnSetActive()函数中修改当前属性页的按钮显示

6.AddString() 向列表框或者组合框添加表项

7. OnInitDialog()在对话框显示之前调用此函数,可在此函数中向列表框添加项

8. OnWizardNext()创建向导后,属性页上的按钮响应函数

总结:

1.  对对话框操作,都要对对话框资源创建相关联的类

2.  对对话框上的控件操作,可以对空间关联变量,对变量的操作就是对空间的操作,此工作是有DoDataExchange()函数完成的,但是系统不会自动调用此函数,此处必须记得调用UpDateDate()函数

3.  对话框在显示之前,会调用InitDialog()初始化对话框,可以在此函数中对对话框修改

4.  对对话框上控件的响应,是由窗口过程函数响应的,有时候需要修改系统的响应,可以重写窗口过程函数

5.  对于模态对话框,当点击OK按钮时,系统自动调用UpDate()函数获得对话框上控件的信息,但是点击CANCLE按钮,不会调用此函数。对于模态对话框,当单击OK按钮、CANCLE按钮、或者调用EndDialog()函数时,系统自动关闭对话框。

6.  对于非模态对话框,必须重写OnCancle()函数和DestoryWindow()函数,否则系统会调用EndDialog()函数,此时对话框只是看不到而没有关闭。同时必须重写PostNcDestroy()虚函数销毁this指针,因为非模态对话框一般都是用new创建的。

三、菜单栏操作

1GetMenu() 获得菜单栏指针

2GetSubMenu()获得菜单栏上的子菜单

3CheckMenuItem()对菜单项添加标记

4SetDefaultItem()设置缺省菜单项

5SetMenuItemBitmaps()为菜单项添加图形标记,首先创建位图资源,再用LoadBitmap()加载位图资源,然后才能用SetMenuItemBitmaps()函数对某一菜单项添加图形标记

6EnableMenuItem()设置某一菜单项灰色显示或者是否可用。

但是系统菜单项是否可用,是系统的消息映射机制实现的,单单调用此函数,不会改变系统的消息映射机制,这时必须在CMainFrame的构造函数中将变量m_bAutoMenuEnable=FALSE,这时将是系统的消息映射机制失效,但是这时系统所有的菜单的原始状态都会改变,所有菜单栏都需要自己来设置其是否可用等状态。菜单栏的消息映射机制是通过UPDATE_COMMAND_UI宏来实现的,所以真正正确而且简单的做法是为需要改变的菜单项添加此消息映射宏,用Enable()函数等来改变菜单项。

7SetMenu()用某一菜单栏和系统生成的菜单栏交换,如果此函数的参数为NULL的话,系统的菜单栏将不显示。也可以用一个CMenu对象,用LoadMenu()加载一个菜单栏,然后用SetMenu()和系统的菜单栏交换。如果这时的CMenu对象是局部变量的话,必须用该CMenu对象调用Detach()函数,使对象和他的句柄分离。否则系统会告知出错。当然,定义成员变量不会出错。

8TrackPopupMenu(),为窗口手动添加右键弹出菜单。要添加右键菜单,首先要有菜单资源,首先在资源视图中创建一个菜单资源,然后在OnRButtonDown()函数中响应TrackPopupMenu()函数,首先加载菜单资源,然后GetSubMenu()获得此子菜单,然后就可以TrackPopupMenu()了。系统自动添加的右键菜单也是这样添加的。

9、动态添加菜单或菜单项:以前的添加菜单是在资源视图中先创建菜单资源,动态添加菜单,当然也需要菜单资源,但是需要代码生成,因此首先创建一个CMenu对象,调用CreatePopupMenu()创建一个弹出菜单,然后就可以调用AppendMenuA()添加子菜单或者调用InsertMenuA()插入子菜单。通过AppendMenuA()和InsertMenuA()也可以添加菜单项。

10DeleteMenu()通过此函数也可以动态的删除子菜单或者菜单项。

11GetSystemMetrics()可以获得系统的各种对象的尺寸大小

12.字符串的Format()函数可以对字符串进行格式化输出。

总结:

1.  菜单的命令更新机制是通过UPDATE_COMMAMD_UI宏来实现的,因此我们如果想改变某一菜单项的命令更新机制,就可以为此菜单项添加 此消息映射宏,然后在此响应函数中修改即可。

2.  右键弹出菜单式通过TrackPopupMenu()函数实现的,我们也可以通过此函数手动添加右键弹出菜单。

3.  添加子菜单之前,首先要有菜单资源,可以通过资源视图自动添加,也可以用CreatePopupMenu()函数生成菜单对象,然后才能进行相应的操作。

4.  对于动态添加的菜单项,由于他的资源ID使我们自己随便写的,所以不能用ClassWizard()为其添加消息响应函数,我们可以手动添加消息响应函数,现在资源头文件中,为菜单项添加ID,然后在框架类的头文件和源文件中分别添加消息映射。如果不太熟悉,可以用ClassWizard为某一具体菜单项添加响应函数后,我们就可以参考添加的格式和位置。

四、绘图操作

绘图操作,首先要获得设备的上下文设备(即设备描述表),用设备描述表来控制绘图的显示。

1、          HDC  属于平台SDK的设备上下文,用平台SDK的设备上下文类构造一个对象时,必须调用系统的::GetDC() ::ReleaseDC()来获得上下文和释放上下文。

2、          MoveTo()移动到某一点

3、          Linto()从某一点到当前点画线,MoveTo()和LineTo()结合起来用来画线。

4、          CDCCWind封装的设备上下文类,但是这个类在构造对象时仍需要调用函数GetDC()和 ReleaseDC()

5、          CClientDC 最常用的是从CDC派生来的CClientDC类,这个类在构造对象时自动调用GetDC()在析构的时候自动调用ReleaseDC(),因此不用我们显式的自己再写此函数。

6、          CWindowDC 这个类也是从CDC派生而来的,也不用我们显式的调用GetDC()和ReleaseDC(),这个类的作用时当其父窗口用GetParent()时可以在菜单栏上绘图(即非客户区),当父窗口为GetDesktopWindow()时,可以在屏幕上绘图。

7、          CPen类,可以用CPen类构造一个画笔对象,修改画笔的颜色。

8、          CBrush类,可以构造画刷对象。当然也可以构造位图画刷。

9、          SelectObject(),将构造的画笔选入设备描述表,该画笔才能起作用

10、     FillRect()用指定画刷填充矩形区域。也可以构造位图画刷,用位图填充矩形区域。

11、     Rectangle()可以绘制矩形,但是矩形是有系统默认的白色画刷来填充,可以用GetStockObject()函数获得一个透明画刷

12、     FromHandle()可以将一个HGDI的句柄转换为CBrush的指针,方便使用。

注意:以上绘制的图形和线条都是直线,是在OnLeftButtonDown()中记录一个点,在OnleftButtonUp()中绘制线条。如果想绘制连续的线条,要在OnMouseMove()中捕获鼠标移动的消息,并不断改变保存的前一个鼠标位置。

五.文本操作

1.CreateSolidCaret()创建光标,光标的宽高由我们自己设置,我们可以得到字体的尺寸,让光标的大小和字体的大小一致。

2.对于文本的操作,必须弄清两个概念。TEXTMETRICS结构体的GetTextMetrics()获得当前字体的尺寸,包括高,平均宽度等。GetTextExtent()获得字符串的范围,即整个字符串的在屏幕输出的范围。

3.CreateCaret(),创建光标不仅可以创建基本的光标,通过此函数可以创建位图光标

4.ShowCaret()显示光标。无论创建的何种光标,初始是隐藏的,必须调用ShowCaret()将其显示出来。

5.TextOut()用于将字符串显示在制定的窗口位置。

6.LoadString()字符串显示之前,肯定要有字符串资源,有两种方法创建字符串资源,一种是用过CString类构造字符串对象,然后对字符串对象赋值,就可以显示了。第二种方法是资源面板添加字符串资源,并为其创建ID号,这样每次需要该字符串的时候,就可以加载该字符串资源。

7.BeginPath()和EndPath()用于创建路径层,BeginPath()用于打开路径层,EndPath()用于关闭路径层,可以在这两个函数之间用Rectangle()函数创建矩形路径层。

8SelectClipPath()创建的路径层正常状态下看不到变化,可以用此函数选择剪切路径,可以用过参数将当前路径层和屏幕进行互操作,显示特殊的显示效果。

9.进行文本操作的几个技巧:

1)、要在窗口中输出键盘输入,可以在WM_CHAR消息响应函数中处理。经每次输入的字符保存到CString  m_strLine对象中。为了动态显示输入的操作每次输入当前字符加上以前的字符。(例如:输入a,当输入b时,在屏幕上重新输出ab

2)、当在键盘上按下退格键是,要删除一个字符。可以先将文字用屏幕颜色输出,然后删掉一个字符,再用指定颜色输出,用人眼的视觉暂留现象,人眼看到动态删除字符的效果。具体操作如下:可以用GetBkColor()得到背景色,然后用SetTextColor()设置字体的颜色,接着用TextOut()函数用背景色输出字符串;m_strLine=m_strLine.Left(m_strLine.GetLength()-1);CString的成员函数Left()显示字符串左边的n个字符。GetLength()得到字符串中字符的个数。

3)、在输入删除字符的时候,要求光标对字符的输入而变化。我们可以在OnLeftButtonDown()函数中用m_TextCaret记录鼠标单击位置处的坐标,用SetCaretPos()设置光标的位置。当按下回车键的时候修改m_TextCaretde 纵坐标,这样就记录了回车和鼠标单击的光标位置。对于输入和删除后的光标位置,我们可以在字符串输出之前,再次用SetCaretPos()设置光标的位置,此时的位置可以用m_TextCaret的位置加上字符串的范围的得到。

10.CreatePointFont()用此函数设置输出的字体。

11.SetTimer()设置定时器

12.、在WM_TIMER的响应函数中响应定时器的消息。可以在此函数中实现卡拉OK字体变色效果。用DrawText()函数在某一矩形区域中显示字符串,可以让这一矩形不断的连续变化来达到字体现实的效果。可以设置一成员变量m_width,让矩形的宽度独断增加。矩形的左上角坐标和上边沿的坐标自己设置,高度可以用TEXTMETRICS的高度加上上边沿的高度来实现。当矩形的宽度增加到大于字符串的范围时可以让宽度变为零,并重新用另一种颜色输出字符串,表示该句话已经显示一遍了。

13.MFC为我们提供了CEditView类和CRichEditView类,可以让我们的视类从这两个类派生,那么我们的床后就有系统自动生成一些基本的文本编辑功能。

总结:

1、          对字体的操作,GetTextMetrics()和GetTextExtent()函数很重要,需要随时获得字体的有关信息。

2、          字体操作光标的位置很重要,要结合上述两个函数改变贯标的位置

3、          对字符的操作,有一些技巧可以应用,应掌握上面的一些技巧。

六、绘图操作

1.创建字体对话框:可以用MFC提供的CFontDialog类很方便的创建字体对话框。CFontDialog类中的m_cflpLogFont保存了关于字体的信息,比如大小,字体名称等一系列信息。

2.CreateFontIndrect()可以用LOGFONG指针创建一个字体。当用此函数创建一个字体后,CGdiObjectm_font就与创建的字体相关联了,如果想再次让m_font执行此函数创建另一字体,必须用m_font调用DeleteObject()删除此GDI对象与系统GDI的联系,才能创建新的字体资源。(示例代码:D\studio\Graphic\ CGraphicView::OnFont().

3.创建颜色对话框,也用MFC提供的CColorDialog类方便的创建。该类的成员变量m_cc保存了颜色的有关信息。M_ccrgbResult保存了用户选择的颜色信息。如果m_ccFlag参数设置CC_RGBINIT值的话,当创建对话框是就显示用户初始化的颜色信息。如果不设置值,每次创建对话框时都显示系统默认的黑色值。注意:此时虽然将Flag设置为CC_RGBINIT值,但是此时Flag已经保存有系统的默认值,如果直接赋值的话,会出错。必须用“|(或)”操作符赋值。

 4.创建一个组框,在组框中放置点、直线、虚线、点线。当单击选择某一单选按钮后,程序就记录我们的选择,当我们绘图的时候就会按照我们的选择的线型来绘图。可以为第一个单选按钮设置成组属性,并给他关联一个成员变量,当我们选择某一个单选按钮时,这个变量就会按顺序加一,记录我们的选择。(当用CColorDialog类创建一个颜色对话框时,不用再关联变量,因为颜色对话框的对象里面有一个m_CC的结构体里面保存了用户的选择)当用户点击OK按钮时,就把对话框变量保存的值赋给视类的成员变量。当我们在绘图的时候,就可以在创建画笔的函数中把这个参数传进去,响应用户的选择。线宽和颜色也是这样处理的。但是当我们再次打开设置对框框对绘图风格进行设置时,应该显示我们上次的操作,可以在对话框显示之前(即调用Domodel()函数之前)将视类的变量的值赋给对框框的变量,使其显示。

5.示例对话框的创建:当我们选择线型和线宽时,应该在对话框的下面显示用户的选择的示例。如果我们每选择一项,就在制定区域画出我们的选择,很麻烦。我们可以在单击此控件的响应函数中,调用Invalidate()函数,使窗口重绘,在WM_PAINT的响应函数中用用户选择的线型线宽颜色绘图。注意:这时绘图的坐标是屏幕坐标,需调用ScreenToClient()函数转换坐标。

6.WM_CTLCOLOR,当对话框创建完毕,显示之前会响应此消息,用系统设置的颜色绘制对话框,因此我们可以在此响应函数中修改对话框的颜色。我们可以构造一个画刷对象,让对话框以我们创建的画刷显示对话框。当然我们也可以根据ID号让其改变某一空间的颜色,其他位置仍用系统颜色绘制。我们也可以用SetTextColor()设置控件上字体的颜色。但是字体也有背景颜色,我们可以用SetBkMode()函数设置背景为透明。但是,控件上的按钮不能改变,我们可以将其设置OwnerDraw属性,使其成为自绘制按钮,然后从CButton类派生一个新的类,在此类中响应WM_DRAWITEM消息,让按钮关联一该类的成员变量,就可以在响应函数中修改按钮的颜色和字体。

7.在窗口中显示位图:显示位图分四步:(1)构造位图对象,加载位图资源——>2)用CDC类的CreateCompatibleDC创建兼容性设备描述表与当前设备描述表相关联——>3)将位图选入兼容性设备描述表,用以确定位图的大小——>4)用当前设备描述表表用BitBlt()

函数显示位图

8.BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );参数分别表示:当前显示图片的左上角坐标;当前要显示图像的窗口的宽高(用来设置显示位图的宽高);兼容DC;位图在兼容DC的左上角左边;复制类型

9.StretchBlt()用BitBlt显示位图,是将位图全部显示,如果窗口太小择显示不全,即没有缩放。用StretchBlt()函数可以将图像缩放显示。

10. BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );此函数多了两个参数,即位图在兼容DC的宽高,这个宽高可以用位图的宽高获得BITMAP结构体可以保存一副位图的相关信息,因此可以用位图对象调用GetBitmap()函数获得位图的信息。

注意:显示位图可以在视类的OnDraw函数中完成,但是在此函数中显示后,当窗口大小发生变化,窗口重绘时,屏幕会发生闪烁。解决的方法是:可以在是类中让其响应WM_ERASEBKGND消息,在擦除窗口背景是重绘,可以避免闪烁。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27660822/viewspace-775101/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27660822/viewspace-775101/

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值