资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本文由h e w e n t a o 2003贡献d o c 1。VC 视频教程笔记! 第一课 1.MFC 生成的 C+源文件中都有 St d Af x .h , 此文 件包含了常用的 AFX 函数的声明, 其中有 a f x w i n .h ,此文件包含了 CRECT,CPo i n t , CWn d 等许多类及其方法的声明。 2.Pr o j e c t -Se t t i n g -De b u g 可以加入命令行参数 。 3.在 SDK 中要加入“w i n d o w s .h “和 s t d i o .h 。因为 Lo a d Cu r s o r ,Me s s a g e Bo x 等函数的声明在这个文件中。 4.创建一个完整的窗口的四个步骤 SDK,1 设计窗口类, 2 注册窗口类,3 创建窗 口,4 显示窗口 5.函数名可以代表函数代码的首地址,即 可作为函数指针。 6.要查看 VC 数据类型,可以在 MSDN 中输入“BOOL”然后选择“ DATA TYPE”。 7.a t o f 将字符串转化为 f l o a t ,a t o i 将字符串转化为 i n t 型。 8.所 有从 CWn d 类派生的类都有 m _h Wn d 句柄。 9.变量的生命周期:可以认为出了包含它 的大括号,这个变量的生命周期结束。 所以全局变量的声明位于所有大括号之外。但 是用 n e w 声明的变量和用 s t a t i c 声明的变量除外。 10.SDK 示范程序,见下面。 11.s p r i n t f 格式化字符,其头文件为 s t d i o .h ,在 MFC 中格式化字符用 CSt r i n g . F o r m a t 12.Ge t DC()与 Re l e a s e DC()要成对使用,否则会内存泄漏。同样,Be g i n Pa i n t () 与 En d Pa i n t ()。 13.Ge t St o c k Ob j e c t ()得到画笔、画刷、字体、调色板的句柄, 使用时必须用类 型转换。 14.什么时候用 NULL,什么时候用 0.答,对指针赋值时用NULL,对变量赋值时 用 0. 15.什么是野指针?答:将指针指向的变量的内存释放后 ,此指针即变成野指针! 如何避免野指针?答:将此指针指向 NULL 即可。p =NULL;16.SDK 代码流程: #i n c l u d e “w i n d o w s .h “/包含头文件 Lo a d Cu r s o r ,Te x t Ou t 等函 数 #i n c l u d e “s t d i o .h “/包含 s p r i n t f ,p r i n t f 等函数 LRESULT CALLBACK My Pr o c ( );/声明回调函数 i n t WINAPI Wi n Ma i n () WNDCLASS w n d c l s ;/设计窗口类 w n d c l s .h c u r s o r =Lo a d Cu r s o r ();/初始化 Re g i s t e r Cl a s s (/注册窗口 类 h w n d =Cr e a t e Wi n d o w ();/创建窗口 Sh o w Wi n d o w (.);/显示窗口 Up d a t e Wi n d o w (.); MSG m s g ;/定义消息结构体 w h i l e (Ge t Me s s a g e ()/消息循环 r e t u r n 0; LRESULT CALLBACK My Pr o c ()/实现回调函数 s w i t c h (u Ms g ) c a s e WM_CHAR: b r e a k ; 第2课 1.定义结构体和类时别忘记在 最后加入“;“号!例如 Cl a s s Po i n t i n t x ;i n t y ; ; 2.#i n c l u d e 与#i n c l u d e “x x x .h “的区别:In i t i n s t a n c e (); /初始化工作和注册窗口类,窗口显示和更新 p Th r e a d -Ru n ();/消息循环 而在 BOOL CTe s t Ap p :In i t In s t a n c e ()中的代码 CSi n g l e Do c Te m p l a t e * p Do c Te m p l a t e ; p Dp a g e 1o c Te m p l a t e = n e w CSi n g l e Do c Te m p l a t e ( IDR_MAINFRAME, RUNTIME_CLASS(CTe s t Do c ), RUNTIME_CLASS(CMa i n Fr a m e ), / m a i n SDI f r a m e w i n d o w RUNTIME_CLASS(CTe s t Vi e w ); Ad d Do c Te m p l a t e (p Do c Te m p l a t e ); 完成了将这三个类关联起来的工作。 4.如 何在单文档文件中显示一个 CBu t t o n 的对象? 在 CMa i n Fr a m e :On Cr e a t e ()中定义一 个 CBu t t o n 的对象 b t n ;然后调用 b t n .Cr e a t e (“维新“,WS_DISABLED | WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, CRe c t (0,0,300,100),/*Ge t Pa r e n t (),*/t h i s ,123); 注意点: (1).此处 b t n 不能是局部变量,否则它的生命周期太短,将不能显示。 ( 2).在 c r e a t e 函数的第二个参数中加入 WS_VISIBLE 参数才行。否则 必须调用 Sh o w Wi n d o w 也可以在 v i e w 的 On Cr e a t e 消息响应函数中加入 (3).CBu t t o n 类的定义头 文件在 a f x w i n .h 中,而 s t d a f x .h 包含了 a f x w i n .h ,所以可以直接使用。因为 MF C 中的每一个类中都有#i n c l u d e “s t d a f x .h “的声明。 5.CWn d 封装了窗口句柄 m _h Wn d 。 第4课 1.在单文档中 v i e w 挡在 Ma i n Fr a m e 的前面。此时如果编写针对 Ma i n Fr a m e 的 m o u s e Cl i c k 事件,将不会有反应。 2.消息响应会在 3 处修改代码,1 处 是在头文件中,/ AFX_MSG(CDr a w Vi e w ) a f x _m s g v o i d On LBu t t o n Do w n (UINT n Fl a g s , CPo i n tp o i n t ); a f x _m s g v o i d On LBu t t o n Up (UINT n Fl a g s , CPo i n t p o i n t ); a f x _m s g v o i dOn Mo u s e Mo v e (UINT n Fl a g s , CPo i n t p o i n t ); / AFX_MSG DECLARE_MESSAGE_MAP()另一处是 c p p 文件的 b e g i n Me s s a g e Ma p 和 En d Me s s a g e Ma p 之间, BEGIN_MESSA GE_MAP(CDr a w Vi e w , CVi e w ) / AFX_MSG_MAP(CDr a w Vi e w ) ON_WM_LBUTTONDOWN() ON _WM_LBUTTONUP() ON_WM_MOUSEMOVE() / AFX_MSG_MAP / St a n d a r d p r i n t i n g c o m m a n d s ON_COMMAND(ID_FILE_PRINT, CVi e w :On Fi l e Pr i n t ) ON_COMMAND(ID_FILE_PRI NT_DIRECT, CVi e w :On Fi l e Pr i n t ) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CVi e w :On Fi l e Pr i n t Pr e v i e w ) END_MESSAGE_MAP() 最后是要有函数实现的代码。 v o i d CDr a w V i e w :On LBu t t o n Do w n (UINT n Fl a g s , CPo i n t p o i n t ) / TOD Ad d y o u r m e s s a g e h a n d l e r c o d e h e r e a n d /o r c a l l d e f a u l t m _p t Or i g i n =m _p t Ol d =p o i n t ; m _b Dr a w =TRUE ; CVi e w :On LBu t t o n Do w n (n Fl a g s , p o i n t ); 3.画线:定义一个成员变量保存 m o u s e Do w n 的点 m _Po i n t 1)API 函数方法画线用 HDC 2)用 CDC 类成员函数画线。此时别 忘记 Re l e a s e DC 3)用 CCl i e n t DC 4)用 CWi n d o w DC,用它甚至可以整个屏幕区域画线。下面是上面 4 种方法的代码 /*HDC h d c ; h d c =:Ge t DC(m _h Wn d ); Mo v e To Ex (h d c ,m _ p t Or i g i n .x ,m _p t Or i g i n .y ,NULL); Li n e To (h d c ,p o i n t .x ,p o i n t .y ); :Re l e a s e DC(m _ h Wn d ,h d c );必须成对使用。*/ /*CDC *p DC=Ge t DC(); p DC-Mo v e To (m _p t Or i g i n ); p D C-Li n e To (p o i n t ); Re l e a s e DC(p DC);必须成对使用。*/ /CCl i e n t DC d c (t h i s ); /* CCl i e n t DC d c (Ge t Pa r e n t ();d c .Mo v e To (m _p t Or i g i n ); d c .Li n e To (p o i n t );此处不需要 Re l e a s e DC,因为 CCl i e n t DC 会自动释放 DC*/ /CWi n d o w DC d c (t h i s ); /CWi n d o w DC d c (Ge t Pa r e n t (); /*CWi n d o w DC d c (Ge t De s k t
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号