首页 VC++入门教程

VC++入门教程

举报
开通vip

VC++入门教程查看完整版本: [-- [转]VC++入门教程(windows入门程序详解) --] ★广海社区★ - ghoffice.com -> ::::C++交流:::: -> [转]VC++入门教程(windows入门程序详解) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题 菜鸟学挂 2010-01-21 11:27 p ~x   gle_~es'K   我们既然用C语言进行,就选第一项"An empty project"...... K8ecSs}}J   cAC]%~orx   ......好累,这...

VC++入门教程
查看完整版本: [-- [转]VC++入门教程(windows入门程序详解) --] ★广海社区★ - ghoffice.com -> ::::C++交流:::: -> [转]VC++入门教程(windows入门程序详解) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题 菜鸟学挂 2010-01-21 11:27 p ~x   gle_~es'K   我们既然用C语言进行,就选第一项"An empty project"...... K8ecSs}}J   cAC]%~orx   ......好累,这篇就写这么多吧,但愿对你有帮助,也建议多给我提意见,你的反馈是我最大的动力渊源...... Gp6|M2Vu_5   讲的不错吧~,还是比较好懂的.下面接着看. 要自己动手. &CV%+   pF,e​ gaC [%M   r=Od %   第二只小板凳 Y0;66bfh}   ]wHXrB8vx   打开VC,file-->new-->progects-->win32 application,并在project name 中输入hello.顺路走下来,选择第二项。在编辑器中输入以下程序覆盖向导产生的代码: yP*oRV%​uX   t+IrQf,P[   #i nclude "stdafx.h" //注意,这个向导产生的头文件不能去掉 =`/ GB T$   Y #bCzWg   Pw/$ }Q9X   WNDCLASS wc ; U~_G *0   9B2`FJ   by*​ v($   wc.style = CS_HREDRAW | CS_VREDRAW ; d​;E (^l   !y7w~UVs   wc.lpfnWndProc = WndProc ; Hg`2- Nl   7&*d]#&~j   wc.cbClsExtra = 0 ; c2Up<#t   L; 'C5#GN   wc.cbWndExtra = 0 ; 28=L9q   ~[`*)(4E   wc.hInstance = hInstance ; \!!1​o+#1j   y];@ M<6u=g,   {GM8}M~D&   if (!RegisterClass (&wc)) |q*s)8   D‑sH`I %w{   { 1[r;   I l,^/qvIY   MessageBox (NULL, TEXT ("This program requires Windows NT!"), x   b1`(f "&l   szAppName, MB_ICONERROR) ; uS *Gm6l   vciO={M   } z l.b   g[L}puN             int nCmdShow     // show state %~ k9d \z        int cbClsExtra ;       //窗口类附加数据 Qgxp q{y   i2X%xYv ^        int cbWndExtra ;       //窗口附加数据 h N​x#x   PAS0 D #        HINSTANCE hInstance ;    //拥有窗口类的实例句柄 nj6‑|WJ   ​|: ,i        HICON hIcon ;        //最小窗口图标 x`JhNAO>   rObg:(z&\        HCURSOR hCursor ;      //窗口内使用的光标 >*Ctp +X@   0$=w8tP)​        HBRUSH hbrBackground ;   //用来着色窗口背景的刷子 T 7?cnK"   !![‑HR6"Q        LPCSTR lpszMenuName ;    //指向菜单资源名的指针 |OBh:d_B]   74fE %;F        LPCSTR lpszClassName ;   // 指向窗口类名的指针 9i+.iuE%Bu   |vtj0 ,[​      } %/w%A:y#&   cf,^7,-`"   在VC6.0里面,把光标定位在WNDCLASS上,按F1,即可启动MSDN,在MSDN里你可看到这个结构原形.在下节讲解这些参数在本程序中的具体用法. B3&C=*y   /~3kkM(Ty   (2)注册窗口类 _~bG[lX!   ?H!QV;ku   (1)第一个参数:成员style控制窗口的某些重要特性,在WINDOWS.H中定义了一些前缀为CS的常量,在程序中可组合使用这些常量.也可把sytle设为0.本程序中为wc.style = CS_HREDRAW | CS_VREDRAW,它表示当窗口的纵横坐标发生变化时要重画整个窗口。你看:无论你怎样拉动窗口的大小,那行字都会停留在窗口的正中部,而假如把这个参数设为0的话,当改动窗口的大小时,那行字则不一定处于中部了。 t&Jrch k   6cX Z3;a   (2)第二个参数:lpfnWndProc包括一个指向该窗口类的消息处理函数的指针,此函数称为窗口过程函数。它将接收Windows发送给窗口的消息,并执行相应的任务。其原型为: =0mn6b9-=   J+m1d\lBu   long FAR PASCAL WndProc(HWND ,unsigned,WORD,LONG);并且必须在模快定义中回调它。WndProc是一个回调函数(见第五节),如果暂时无法理解这个模糊的概念意味着什么,可先放过,等到讲消息循环时再详谈。 `\yQn7 Oq   1!;4I@W(I)   (3)第三,四个参数:cbWndExtra域指定用本窗口类建立的所有窗口结构分配的额外字节数。当有两个以上的窗口属于同一窗口类时,如果想将不同的数据和每个窗口分别相对应。则使用该域很有用。这般来讲,你只要把它们设为0就行了,不必过多考虑。 @​T%8EiV   r*UE>_3J   (4)第五个参数:hInstance域标识应用程序的实例hInstance,当然,实例名是可以改变的。wc.hInstance = hInstance ;这一成员可使Windows连接到正确的程序。 mD7kOOMY   0Gmr   (7)第八个参数:wc.hbrBackground域决定Windows用于着色窗口背景的刷子颜色,函数GetStockObject返回窗口的颜色,本程序中返回的是白色,你也可以把它改变为红色等其他颜色.试试看 wQYW5X     (8)第九个参数:lpszMenuName用来指定菜单名,本程序中没有定义菜单,所以为NULL。 D!mx&O9   mXI'=Vo!S   (9)第十个参数:lpszClassName指定了本窗口的类名。 ;0 -R"c)-   ' ^(qlCI   当对WNDCLASS结构域一一赋值后,就可注册窗口类了,在创建窗口之前,是必须要注册窗口类的,注册窗口类用的API函数是RegisterClass,注册失败的话,就会出现一个对话框如程序所示,函数RegisterClass返回0值,也只能返回0值,因为注册不成功,程序已经不能再进行下去了。 Esf \Bo‑"   m2[J5n?zLL   在本程序中注册窗口类如下: =lL)g"x X‑   {/i&o   if (!RegisterClass (&wc)) { \pXo~;E\   \ lK `          MessageBox (NULL, TEXT ("This program requires Windows NT!"), _gQ_ixu   l_pf9 a{X   (三)显示和更新窗口 tgUh T   ^P`I"T ​d   主窗口显示出来了,WinMain就开始处理消息了,怎么做的呢? ca[*#xiJ   ssmJ?sl   Windows为每个正在运行的应用程序都保持一个消息队列。当你按下鼠标或者键盘时,Windows并不是把这个输入事件直接送给应用程序,而是将输入的事件先翻译成一个消息,然后把这个消息放入到这个应用程序的消息队列中去。应用程序又是怎么来接收这个消息呢?这就讲讲消息循环了。 7w\!3pv   !Wy&+‑H*0   应用程序的WinMain函数通过执行一段代码从她的队列中来检索Windows送往她的消息。然后WinMain就把这些消息分配给相应的窗口函数以便处理它们,这段代码是一段循环代码,故称为"消息循环"。这段循环代码是什么呢?好,往下看: Ko "JH=<   5oOs.(m|*C   在咱们的第二只小板凳中,这段代码就是: F |_mCwA   iMv9   ||k^pzj%   LPARAM lParam; fj])   *1;}c z   DWORD time; ySwvjP7f   R%N&Y~zH   POINT pt; `l95I‑7   &‑U8W(NxN   } MSG, *PMSG; NI136P   v-@xO&<   MSG数据成员意义如下: Q2[D   再次申明,不是我写的。觉得作者写的好转过来和大家一起分享。 _gK@),​de   O^I~d{M 5I   第三讲:Windows消息机制(3) 9)Y]05us   ~a‑8J"Wh   (五)终止应用程序: @​ 6>R /]   KU VsCmiT   Windows是一种非剥夺式多任务操作系统。只有的应用程序交出CPU控制权后,Windows才能把控制权交给其他应用程序。当GetMessage函数找不到等待应用程序处理的消息时,自动交出控制权,Windows把CPU的控制权交给其他等待控制权的应用程序。由于每个应用程序都有一个消息循环,这种隐式交出控制权的方式保证合并各个应用程序共享控制权。一旦发往该应用程序的消息到达应用程序队列,即开始执行GetMessage语句的下一条语句。 ho2o/>Ef3   !'Xk=+   当WinMain函数把控制返回到Windows时,应用程序就终止了。应用程序的启动消息循环前要检查引导出消息循环的每一步,以确保每个窗口已注册,每个窗口都已创建。如存在一个错误,应用程序应返回控制权,并显示一条消息。 X&h4A4#P   WEUr;f   但是,一旦WinMain函数进入消息循环,终止应用程序的唯一办法就是使用PostQuitMessage把消息WM_QUIT发送到应用程序队列。当GetMessage函数检索到WM_QUIT消息,它就返回NULL,并退出消息外循环。通常,当主窗口正在删除时(即窗口已接收到一条WM_DESTROY消息),应用程序主窗口的窗口函数就发送一条WM_QUIT消息。 ​j|9;") 1     虽然WinMain指定了返回值的数据类型,但Windows并不使用返回值。不过,在调试一应用程序时,返回值地有用的。通常,可使用与标准C程序相同的返回值约定:0表示成功,非0表示出错。PostQuitMessage函数允许窗口函数指定返回值,这个值复制到WM_QUIT消息的wParam参数中。为了的结束消息循环之后返回这个值,我们的第二只小板凳中使用了以下语句: ​}-k<>~FA   e~c;wP ~cO   return msg.wParam ; //表示从PostQuitMessage返回的值 K1)X P   w​< <>XIL   ); 57*z0<   Q4Zuz)r*   这个函数我们的第二只小板凳里被我们称为WndProc. [-_3Zr   Urj8v2k   下面讲解: ~ P"@^cq   $~!%Px)   不知你注意到了没有,这个函数的参数与刚刚提到的GetMessage调用把返回的MSG结构的前四个成员相同。如果消息处理成功,WindowProc的返回值为0. x^Q:U‑1   @X+ ​m,u   Windows的启动应用程序时,先调用WinMain函数,然后调用窗口过程,注意:在我们的这个程序中,只有一个窗口过程,实际上,也许有不止一个的窗口过程。例如,每一个不同的窗口类都 有一个与之相对应的窗口过程。无论Windows何时想传递一个消息到一窗口,都将调用相应的窗口过程。当Windows从环境,或从另一个应用程序,或从用户的应用程序中得到消息时,它将调用窗口过程并将信息传给此函数。总之,窗口过程函数处理所有传送到由此窗口类创建的窗口所得到的消息。并且窗口过程有义务处理Windows扔给它的任何消息。我们在学习Windows程序设计的时候,最主要的就是学习这些消息是什么以及是什么意思,它们是怎么工作的。 z0+​LD   U(P^-JE~eb/   //这里是此消息的处理过程 u,V_​j|(e   beaSvhPU‑   ruturn 0; P_4E<"eK​   :8K}e]!c1   default: ^T:L6:   U9ZuD40\   //其他消息由这个默认处理函数来处理 ol‑lsB3]]   Xp] jF^5   return DefWindowProc(hwnd,uMsgId,wParam,lParam); Kt](|   9: .m]QN   } 5 w(nttYH   hxzA1s%~   在处理完消息后,要返回0,这很重要-----它会告诉Windows不必再重试了。对于那些在程序中不准备处理的消息,窗口过程会把它们都扔给DefWindowProc进行缺省处理,而且还要返回那个函数的返回值。在消息传递层次中,可以认为DefWindowProc函数是最顶层的函数。这个函数发出WM_SYSCOMMAND消息,由系统执行Windows环境中多数窗口所公用的各种通用操作,例如,画窗口的非用户区,更新窗口的正文标题等等等等。 (H5#r2h%Y   k 3H0$1   再提示一下,以WM_的消息在Windows头文件中都被定义成了常量,如WM_QUIT=XXXXXXXXXXX,但我们没有必要记住这个数值,也不可能记得住,我们只要知道WM_QUIT就OK了。 ,f{w@Er   LPBa!fq   在第二只小板凳中我们只让窗口过程处理了两个消息:一个是WM_PAINT,另一个是WM_DESTROY,先说说第一个消息---WM_PAINT. &8w# 4*W   67hfve   关于WM_PAINT: >{QO$F#   tu Y+n 2   无论何时Windows要求重画当前窗口时,都会发该消息。也可以这样说:无论何时窗口非法,都必须进行重画。 哎呀,什么又是"非法窗口"?什么又是重画啊?你这人有没有完,嗯? rrr_{d/   T\n6^@.>   稍安勿燥,我比你还烦呢?我午饭到现在还没吃呢!你有点耐心,来点专业精神好不好???我开始在MSDN里面找有关这个方面的内容了,别急,我找找看: I ^m   O >pv/Ns   Platform SDK-->Graphics and Multimedia Services-->Windows GDI-->Painting and Drawing-->Using the WM_PAINT Message-----终于找到了。 SOq:!Qt   (5 @H   下面是一大套理论: R2n 2mQ<   u1 L^INo/   让我们把Windows的屏幕想像成一个桌面,把一个窗口想像成一张纸。当我们把一张纸放到桌面上时,它会盖住其他的纸,这样被盖住的其他纸上的内容都看不到了。但我们只要把这张纸移开,被盖住的其他纸上的内容就会显示出来了---这是一个很简单的道理,谁都明白。 g hWWJ x9   BaW4 s4u   对于我们的屏幕来说,当一个窗口被另一窗口盖住时,被盖住的窗口的某些部分就看不到了,我们要想看到被盖住的窗口的全部面貌,就要把另一个窗口移开,但是当我们移开后,事情却起了变化-----很可能这个被盖住的窗口上的信息被擦除了或是丢失了。当窗口中的数据丢失或过期时,窗口就变成非法的了---或者称为"无效"。于是我们的任务就来了,我们必须考虑怎样在窗口的信息丢失时"重画窗口"--使窗口恢复成以前的那个样子。这也就是我们在这第二只小板凳中调用UpdateWindow的原因。 i4,p\rE0   *9"x0bth   你忘记了吗?刚才我们在(三)显示和更新窗口中有下面的一些文字: vo`&​​   jZz​Tnmm&?   WinMain()调用完ShowWindow后,还需要调用函数UpdateWindow,最终把窗口显示了出来。调用函数UpdateWindow将产生一个WM_PAINT消息,这个消息将使窗口重画,即使窗口得到更新.---这是程序第一次调用了这条消息。 .Zcz ya   L)bMO8JH~m   为重新显示非法区域,Windows就发送WM_PAINT消息实现。要求Windows发送WM_PAINT的情况有改变窗口大小,对话框关闭,使用了UpdateWindows和ScrollWindow函数等。这里注意,Windows并非是消息WM_PAINT的唯一来源,使用InvalidateRect或InvalidateRgn函数也可以产生绘图窗口的WM_PAINT消息...... \jtA8o​%n   <'~m1l#2   通常情况下用BeginPaint()来响应WM_PAINT消息。如果要在没有WM_PAINT的情况下重画窗口,必须使用GetDC函数得到显示缓冲区的句柄。这里面不再扩展。详细见MDSN。 \4q|Qno8   _ \6v@   这个BeginPaint函数会执行准备绘画所需的所有步骤,包括返回你用于输入的句柄。结束则是以EndPaint(); Lj3o-@\*j   :J`@@H   在调用完BeginPaint之后,WndProc接着调用GetClientRect: (QiA5!wg   #y83tNev   GetClientRect(hwnd,&rect); cRVL1ne   Cf=H~&`Z   第一个参数是程序窗口的句柄。第二个参数是一个指针,指向一个RECT类型的结构。查MSDN,可看到这个结构有四个成员。 [yXmnrxA   'RMUjJ-!   WndProc做了一件事,他把这个RECT结构的指针传送给了DrawText的第四个参数。函数DrawText的目的就是在窗口上显示一行字----"你好,欢迎你来到VC之路!",有关这个函数的具体用法这里也没必要说了吧。 2h ​‑   R ZY=c   关于WM_DESTROY N `|A   VI2lw E3   这个消息要比WM_PAINT消息容易处理得多:只要用户关闭窗口,就会发送WM_DESTROY消息(在窗口从屏幕上移去后)。 U>E: Ub0r   JN0h3nZ_   程序通过调用PostQuitMessage以标准方式响a应WM_DESTROY消息: %":3xj'EEI   H‑b=#`   PostQuitMessage (0) ; H#TkIFo]   @t9HRL?T~   这个函数在程序的消息队列中插入一个WM_QUIT消息。在(四)创建消息循环中我们曾有这么一段话: Rd#R}yA   -tg|y   消息循环以GetMessage调用开始,它从消息队列中取出一个消息: ic2 ​D$`M   o1.~g'!^   ....... *)Rm X$v3   Y Zj-%5   在接收到除WM_QUIT之外的任何一个消息后,GetMessage()都返回TRUE。如果GetMessage收到一个WM_QUIT消息,则返回FALSE,如收到其他消息,则返回TRUE。因此,在接收到WM_QUIT之前,带有GetMessage()的消息循环可以一直循环下去。只有当收到的消息是WM_QUIT时,GetMessage才返回FALSE,结束消息循环,从而终止应用程序。 g*V.u]U!i   ")Fd'&58‑   至此,第二支小板凳终于支解完毕!!                       #J[g r_   .zO^"mXjS   ​​实在是太经典了!   WGUA.NET 外挂驿站 B7 %,D}   hfwJZ\_60   u[GZ   初始化窗口,注册窗口,创建窗口,显示窗口,销毁窗口   R]"Zv'M(AM   8+'}`   n8,%  VC/MFC >  基础类 谁能告诉我怎么使程序改变光标形状时不闪烁? 楼主ahuan1978(欢)2001-11-22 10:04:24 在 VC/MFC / 基础类 提问 我在onmousemove里面设置光标,但鼠标移动时,系统老把光标恢复成IDC_CURSOR,我知道只要在注册视图类窗口时使类的默认光标为null就可以了,但我不知道怎么改。谁能告诉我,一定给分。 问题点数:0、回复次数:12Top 1 楼MSVCer(家宝)回复于 2001-11-22 10:15:54 得分 0 在WM_SETCURSOR中设置,不要在move中设置Top 2 楼ahuan1978(欢)回复于 2001-11-22 10:50:42 得分 0 我看到有些书也是这么写的,但我这么做连IDC_CROSSCURSOR都看不到,也就是说也没有闪烁,光标不变,我想这大概是因为系统在检测到Lbuttondown,mousemove,lbuttonup时都会将光标设置成默认光标,也就是在注册窗口类时采用的光标。我请教了高手,问题已经解决,但不是最佳方法,谁能告诉我一个好一点的办法哪?先谢了。Top 3 楼zxiaoer(小二)回复于 2001-11-22 12:25:46 得分 0 就是应该自己处理WM_SETCURSOR消息,然后返回,不要调用基类的处理。Top 4 楼zxiaoer(小二)回复于 2001-11-22 12:26:21 得分 0 就是应该自己处理WM_SETCURSOR消息,然后返回,不要调用基类的处理。Top 5 楼xiaoxiaohan(萧晓寒)回复于 2002-04-27 08:26:21 得分 0 在作界面的时候经常碰到一些比较复杂的作图情况,由于作图过于复杂和频繁,所以时常出现闪烁的情况,几经磨练,虫虫找到一些防止闪烁的方法,写下来和大家共享。         1、将Invalidate()替换为InvalidateRect()。                 Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。         2、禁止系统搽除你的窗口。                 系统在需要重画窗口的时候会帮你用指定的背景色来搽除窗口。可是,也许需要重画的区域也许非常小。或者,在你重画这些东西之间还要经过大量的计算才能开始。这个时候你可以禁止系统搽掉原来的图象。直到你已经计算好了所有的数据,自己把那些需要搽掉的部分用背景色覆盖掉(如:dc.FillRect(rect,&brush);rect是需要搽除的区域,brush是带背景色的刷子),再画上新的图形。要禁止系统搽除你的窗口,可以重载OnEraseBkgnd()函数,让其直接返回TRUE就可以了。如         BOOL   CMyWin::OnEraseBkgnd(CDC*   pDC)       {           return   TRUE;           //return   CWnd::OnEraseBkgnd(pDC);//把系统原来的这条语句注释掉。     }         3、有效的进行搽除。                 搽除背景的时候,不要该搽不该搽的地方都搽。比如,你在一个窗口上放了一个很大的Edit框,几乎占了整个窗口,那么你频繁的搽除整个窗口背景将导致Edit不停重画形成剧烈的闪烁。事实上你可以CRgn创建一个需要搽除的区域,只搽除这一部分。如         GetClientRect(rectClient);     rgn1.CreateRectRgnIndirect(rectClient);     rgn2.CreateRectRgnIndirect(m_rectEdit);     if(rgn1.CombineRgn(&rgn1,&rgn2,RGN_XOR)   ==   ERROR)//处理后的rgn1只包括了Edit框之外的客户区域,这样,Edit将不会被我的背景覆盖而导致重画。     {           ASSERT(FALSE);           return   ;     }     brush.CreateSolidBrush(m_clrBackgnd);     pDC->FillRgn(&rgn1,&brush);     brush.DeleteObject();         注意:在使用这个方法的时候要同时使用方法二。别忘了,到时候又说虫虫的办法不灵。         4、使用MemoryDC先在内存里把图画好,再复制到屏幕上。                 这对于一次画图过程很长的情况比较管用。毕竟内存操作比较快,而且复制到屏幕又是一次性的,至少不会出现可以明显看出一个东东从左画到右的情况。         void   CMyWin::OnPaint()       {           CPaintDC   dc1(this);   //   device   context   for   painting           dcMemory.CreateCompatibleDC(&dc1);           CBitmap   bmp;//这里的Bitmap是必须的,否则当心弄出一个大黑块哦。           bmp.CreateCompatibleBitmap(&dc1,rectClient.Width(),rectClient.Height());           dcMemory.SelectObject(&bmp);               //接下来你想怎么画就怎么画吧。           //dcMemory.FillRect(rectClient,&brush);                 dc1.BitBlt(0,0,rectClient.Width(),rectClient.Height(),&dcMemory,0,0,SRCCOPY);           dcMemory.DeleteDC();           //   Do   not   call   CWnd::OnPaint()   for   painting   messages     }     Top 6 楼laserman(天使来自火星)回复于 2002-04-27 12:24:33 得分 0 你的问题和我一样,不过我的已经由"jishiping(JSP   季世平)   "解决了     你可以看看他在我上面发的帖子(以下是转的):                 //我不是用VC的,只能给伪代码     bool   xxx::OnSetCursor(CWnd*   pWnd,   UINT   nHitTest,   UINT   message)     {         if   (pWnd的句柄==窗口句柄   &&   hitTest==HTCLIENT)   {                 if   (鼠标在指定区域)                         ::SetCursor(LoadCursor(NULL,IDC_CROSS));                 else                         ::SetCursor(其它的鼠标形状);                 return   true;         }         return   (bool)DefaultProcessing();     }     Top 7 楼winne_ll(feiyang)回复于 2002-04-27 12:45:39 得分 0 你可以这样做     BOOL   CXXXView::PreCreateWindow(CREATESTRUCT&   cs)       {     cs.lpszClass   =     AfxRegisterWndClass(NULL,     AfxGetApp()->LoadCursor(IDC_CURSOR1),//这里加入你的光标图形                                             ::CreateSolidBrush(RGB(0,100,255)));         return   CView::PreCreateWindow(cs);     }     Top 8 楼_liang_(liang)回复于 2002-04-27 13:01:19 得分 0 是这样的     向windows窗口注册一个新的窗口类     在视图类的PreCreateWindow(CREATESTRUCT   &s)中完成     PreCreateWindow(CREATESTRUCT   &s)     {     cs.lpszClass   =   AfxRegisterWndClass(     CS_HREDRAW|CS_VREDRAW,     0,                                       //使窗口不显示默认的箭头光标     (HBRUSH)::GetstockObject(WHITE_BRUSH),     0);     return   CView::PreCreateWindow(cs);     }     Top 9 楼Pany(伟)回复于 2002-04-27 16:08:07 得分 0 关注。Top 10 楼s6283(瞎忙)回复于 2002-04-27 16:56:53 得分 0 msdn有篇文章可以看看     HOWTO:   Change   the   Mouse   Pointer   for   a   Window   in   MFC       Top 11 楼yu_wlof(yukun)回复于 2002-05-29 16:27:30 得分 0 DWORD   SetClassLong(         HWND   hWnd,               //   handle   to   window         int   nIndex,             //   index   of   value   to   change         LONG   dwNewLong       //   new   value     );     Top 12 楼yu_wlof(yukun)回复于 2002-05-29 16:29:22 得分 0 DWORD   SetClassLong(         HWND   hWnd,               //   handle   to   window         int   nIndex,             //   index   of   value   to   change   ,here   is   GCL_HCURSOR         LONG   dwNewLong       //   new   value   ,give   it   your   hCursor     );         Top 相关问题 ​ 光标形状 ​ 如何让自己程序中的EDIT控件的光标不闪烁! ​ 一个使鼠标指针和闪烁光标“合二为一”,“如影随形”的程序 ​ 关于光标指定闪烁位置。 ​ DirectDraw中, 中光标闪烁的问题? ​ 我要疯了,救救我吧,一个实现文本编辑窗口程序中改变光标形状的函数 ​ winGorm程序如何修改光标 ​ Console程序怎么控制光标? ​ windows 程序闪烁问题 ​ 如何改变默认的光标形状? 关键词 ​ 区域 ​ 系统 ​ 鼠标 ​ idc ​ dc ​ 重画 ​ 光标 ​ rgn ​ rectclient ​ 闪烁 得分解答快速导航 ​ 帖主:ahuan1978 相关链接 ​ Visual C++类图书 ​ Visual C++类源码下载 广告也精彩 反馈 请通过下述方式给我们反馈 x 公司简介|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号 世纪乐知(北京)网络技术有限公司 提供技术支持 Copyright © 1999-2010, CSDN.NET, All Rights Reserved
本文档为【VC++入门教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_095569
暂无简介~
格式:doc
大小:300KB
软件:Word
页数:26
分类:互联网
上传时间:2010-11-27
浏览量:179