VC++入门教程.docx
《VC++入门教程.docx》由会员分享,可在线阅读,更多相关《VC++入门教程.docx(39页珍藏版)》请在冰豆网上搜索。
VC++入门教程
VC++入门教程(windows入门程序详解)
想做个VC入门教程,呵呵~不敢称做教程.不过先借来用用吧.(;C_>_EL&u
很多内容都是自己学习时积累下来的资料整理.把它们凑起来,供大家学习.其实也是督促我自己.好了&!
__KJr_Q
大家有什么意见可以在这里提哦._}_#w>>{Q
<>.上面说的已经很详细了.想学好VC.了解他的内幕是至关重要的.废话少说,大家看下面的内容.初学者可能不容易看懂,有问题在下面跟贴.sfa_T`_q_
----不是我写的.y#Y_Cc{K[
>L_[,.}_(9
F2>o"j2
第一讲:
预备知识与概念介绍3l_5q?
"$
注:
我写这个专题目的是为VC初学者提供一个思路,我本人很菜,但我认为对于VC初学者来讲,可能有点帮助,当然,对于WinSDK编程,我也是刚刚接触。
如果你对WinSDK编程较熟,请与我联系,咱们共同来把这个专题做好,如果你发现了什么错误,也麻烦你给我留言指正。
我写的内容也基本上是我自己的一些理解,错误是肯定有的,如果你发现我的理解偏差很大的话,麻烦你提醒一下。
---小朱!
cg0L(o_I~_
x\_I9J_4Q_
什么是WinSDK:
++Az~{W7
_n3~xiQ'__
大致说来windows编程有两种方法:
1.windwosc方式(SDK),2.c++方式:
即对SDK函数进行包装,如VC的MFC,BCB的OWL等,如果要深入下去,还是要熟悉SDK。
_d_
Ras_9g
0y2iS_'t
两种方法有哪些区别呢:
SDK编程就是直接调用windows的API进行编程,但是有上千个API组成(win95的API有两千多个),这种数目太大了,对于编程显然不利。
而MFC把这些API封闭起来,共有一百多个类组成。
一般只需20多个windows类和另外20多个通用的非windows类就可"干活"了,这一改变无疑是有很大好处的。
尽管MFC如此方便,但是要学VC,直接去学MFC却是不明智的选择。
只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。
那些如多少天精通什么什么的书籍其实讲的全是些如怎么使用VC这种工具的话题,学来学去学会了怎么会使用VC这种工具,而不能深入MFC编程。
象VB这类工具就更令人感觉到太闷了,不过各有各的好处。
DV{Qbe#In
f<0-'fGJd_
MFC虽然提高了程序员编程的效率,但是也失去了SDK编程的灵活性.....不好意思,跑题了...._5x4(_5c5^
lq1pgM?
Kf
本专题假定:
0#XZ__(@%_
)v0m7Lv#/
C语言是windows的源语言,用C进行SDK编程是最合适的,你应该至少学过C语言,知道C语言的各种语法等,当我说到指针等类似概念的时候,你不至于茫然就行了。
0Oe@0L%^3"
o5_._
q_
你还应该安装了VisualC++6.0,低版本的就不用用了吧,D版的才几块钱吗?
!
m__q_+Oz~
U2@?
!
B[\d`
推荐与参考资料:
__d&__.)Dw
eU_x|_*__`
1.Petzold的[programmingwindowsbypetzold],这是我看过的一本书(电子书),不过是E文的,我只看了一半,"下载空间"一栏能供了该电子书。
中文版的是[Windows程序设计](包括上,下卷),CharlesPetzold著,北京博彦发展有限公司译,北京大学出版社出版,本书唯一的缺点就是太贵,价格是160元。
一些朋友让我多推荐一些这方面的书,我也没办法,一是这类书目前本就很少,二是如果你非要买的话,肯定要买这本书了,可是经典呢!
!
/_v_=MGX@r
70*Y4'u}A
2.还有一本老书值得一提,可能市面上已经买不到了,书名[Windows编程],刘振安著,人民邮电出版社出版发行。
一个朋友曾借给我看了几天我又还了,很容易读懂的,不过一看日期,95年出版,得!
没希望了。
我们学校图书馆好像也有几本,不过好像都很烂。
Yl>@_(tu)|
_Jr9\j3J{
3.VC的在线帮助MSDN,有关SDK的资料在"PlatformSDK"一栏中。
tb{l(up/a
]?
____b#~
下面再加深几点概念:
__QTtc__GU
PHZA?
_>Q7Z
什么是API:
_vYrqZie<
nwHi3_ojD:
什么是API,有必要再谈一下,特别对于从TC过来的朋友和初学编程的朋友。
API,全称applicationprograminterface,意思是应用程序编程接口(说起API并不仅仅指windows而言,windows支持的API叫winapi)。
winapi就是应用程序和windows之间通讯的一个编程界面。
windows提供了上千个API函数,以方便程序员来编写应用程序。
做数据库管理系统是很少和API打交道的,我以前学PB,看的十几本书都没有专门的章节来介绍API的。
只有到网上看那些PB技巧之类的文章才谈及API,不过还要加入一大堆声明之类的东东。
好像VB也是这样。
总之,进行系统编程,API是必不可少的。
API是每个VC高手的必过的一关。
Z_5_U___D
>%_'|_@75K
什么是WinSDK编程:
____z{:
Q
LIirOf~e;!
WinSDK程序设计就是API方式的windows程序设计。
SDK,全称SoftwareDevelopersKit,意思是软件开发工具箱。
它是在windows程序设计早期,程序员进行windows程序设计所必须购买的一个软件包(不知道那时候有没有D版的)。
我两个月前见SDK还不知所云。
开始进行WinSDK编程用C语言最好,可以撇开C++的特性专心熟悉一下Win32编程的思路以及了解windows的消息运行机制。
等把这些有所了解后,慢慢转向C++和MFC编程。
不过我的观点是WinSDK编程永远要慢慢进行下去,直接接触底层代码对MFC源码的理解是有很大好处的。
上周开始用MFC时,按F11进行单步跟踪,一开始见到"_tWinMain"这样古怪的东东也没有感觉到太大的迷惑,不就是相当于SDK编程中的WinMain函数吗?
"4oYF__:
h
R_c_o#_?
'_
什么是MFC:
QcIa%_lf_
_y_]+i.8[
MFC,全称MicrosoftFoundationClasses,伪软把WinAPI进行封装的类库。
它是一个类的集合,通过覆盖WinAPI,为编程提供了一个面向对象的界面。
它使windows程序员能够利用C++面象对象的特性进行编程,类似BCB的OWL,Delphi的VCL组件。
它把那些进行SDK编程时最繁琐的部分提供给程序员,使之专注于功能的实现。
你不妨把它想象成类似TC提供的函数库吧。
用VisualC++这种开发工具编程时,可以用MFC,也可以不用,但MFC是VC的精华所在,从某种意义上来说,不会MFC就是不会使用VC。
研究MFC源代码是件既快乐又痛苦的事情,不过,阵痛之后,嘻嘻,......28>gAz.__#
>z_.o?
F__
怎么进行WinSDK编程:
j_a#E}`wC4
=K-B_I
VisualC++6.0:
File-->new-->Projects-->Win32Application(projectname)-->......K__p~_x_
gle__~es'K
我们既然用C语言进行,就选第一项"Anemptyproject"......K8e_cSs}}J
cAC]_%~orx
......好累,这篇就写这么多吧,但愿对你有帮助,也建议多给我提意见,你的反馈是我最大的动力渊源......Gp6|M2Vu_5
讲的不错吧~,还是比较好懂的.下面接着看.要自己动手.&C___V%_+
_F%UyF_Uz_
R0B\|O0Uv
第二讲:
WinMain与两只小板凳的故事U_pF,e_>s
注:
呵呵,近两天收到不少网友来信,要求我继续写下去,说实在的,写这东西费时费力。
不过一旦想起这些对大家或许有些帮助时,无形的压力就来了。
我所写的,仅仅是我编程中的感想,如果你有何感想,希望给我留言或到"C程序员论剑台"交流,如果你有好的建议,欢迎提出;如果你有好的对VC初学者有利的作品或文章,也欢迎给本站介绍,我将大力为你推广。
---小朱C{`+h163\_
__W>.KV7_
第一只小板凳:
_=_6_y4*f
___\tc4DS
打开"anemptyproject"后,在VC的IDE中,打开文本编辑器。
输入以下内容:
Y;_O\_>o[
<5%x3e"_7u
#include"windows.h"*
e&O_p_Vn
Ikv@}^p7
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)_.bE+dA6:
v
2Dgulx5kGZ
{!
ba/]A_/
Xxhzzm-B
MessageBox(NULL,TEXT("你好,欢迎来到VC之路"),TEXT("欢迎"),0);\b
NN__]=
'id]_<<_F
return0;CV&+^_j'k
lf3
__QMr+
}}i0(^"SoXZ
:
)hS-_*P
把它保存成以".c"为扩展名的文件,并加入空项目中。
编译......Z7>_p_z:
_nW#U_BtZ
看到了吧,这就我们的第一只小板凳。
它就类似于TC下的"helloworld"吧!
虽然什么功能也没实现,但它比"helloworld"强多了,因为它向我们展示了一个小窗口。
o,}`4_N||_
0$_Rl7_8>(
支解第一只小板凳:
;n1<_1M>!
[HNWM/ff7+
像TC一样,它包含一个头文件"windows.h",这是一个最基本的头文件,它包含其它的windows头文件.在你的"X:
\ProgramFiles\MicrosoftVisualStudio\VC98\Include"目录下,打开windows.h这个文件,你就知道它包含什么东东了。
I2"_F2(>8K
Bq/<_kEgM
像dos下的C编程的main()一样,windows下的入口是WinMain()函数。
aLa_{z
B
_h
d_W_}._
把光标放在WinMain()上,按F1键。
启动MSDN,如果你没安装的话,一定要安装一下,MSDN是最好的学习VC的资料,当然,对于我们入门者,有一本书从头到尾学一下最好。
/_~=W3l_hY
y8~/EyY|_^
第一个参数:
应用程序的当前实例句柄。
_4_~__'K?
V_+_04_X_"
第二个参数:
应用程序的前一个实例句柄,别管它,对于Win32位而言,它一般是NULL._p<]___jt
:
_`_U@b_6
第三个参数:
指向任何传给程序的命令行参数。
PSTR代表"指向字符串的指针"。
_&:
_Mk^DH5
._lbo\v}2W
第四个参数:
它告诉应用程序如何初始化窗口,如最大化,最小化等状态。
._eZsK_c-@
qukym3F_
WinMain()所起的作用:
初始化,展示,销毁应用程序等。
_)7_`2_FLG
#Cy9_E"lP
MessageBox(),如果大家在windows下编程,这是一个很常用的API,不用我费话了吧!
Ej;BI#g_x=
L___N!
e__b
几个要点:
;fOk_R+__
l_P_B_WpHX
1.句柄(handle):
在标准C库中句柄用来对文件输入输出。
如下面的代码:
_=PQ__Md__
_cT&!
__g#g
inthandle;)_0\"_8_}!
1__Uy_'TEk
handle=open("filename","r")|<2_g^ZK)_
KFu
Pg_p
if(handle)WR<_,[*Mv^
&;
x*_uG
{\O_lB(%E7
U)swIisE
read(handle,block,bytesToread);_pl4_:
>4l/
_Z!
81\5
}HB_0DG_RF|_r@_/S
close(handle);
&
W_*
do
#*~3gMI{=
在文件被成功打开后,open()返回一个句柄,在read()中使用这个句柄来阅读这个文件。
句柄不是指针。
程序不能直接使用句柄来阅读文件中的信息。
如果不能把它传送给输入输出函数调用的话,句柄就没有用了。
句柄不返回零。
句柄命名以h开始。
这是匈牙利表示法的规定。
;_4__s7\9o
v_1_a_E[_Q
2.匈牙利表示法:
G__5_T__(
=c3_4MY(#X
初开始看到这个程序时,你一定感觉到很怪,我当时就是这样的。
不知道那些字母怎么回事。
因为所有的命名采用了,匈牙利表示法。
如消息的前缀使用msg.句柄使用h.函数使用fn等。
多说了,习惯了就好了.{=Z___L?
j
_DPM4v7
S
3.有效使用MSDN:
`Re_{j{_~s
zS__/1_v+_
想成为VC高手,还要强迫自己习惯于使用MSDN,看得多了,不怕看不懂,如果仅仅知道功能不知道具体的函数,可用类似的英语单词去搜索。
我平时就用金山词霸一点点的啃。
唉,说起来惭愧,本人英语四级没过,这学期连报考都没有。
以后努力了,总感觉到大学的教育很有问题,好像每个人都在为四六级而奔忙。
D6vhW:
t_8?
<
HXzcWQ$_
呵呵,说了这些,真怀疑对你真的有用。
有不对的地方,请指出。
希望大家共同进步,把VC活吃了......._g__aC[%M
r=___Od__%
第二只小板凳Y_0;66bfh}
]w_HXrB8vx
打开VC,file-->new-->progects-->win32application,并在projectname中输入hello.顺路走下来,选择第二项。
在编辑器中输入以下程序覆盖向导产生的代码:
yP*oRV%uX
t+IrQf_,P[
#include"stdafx.h"//注意,这个向导产生的头文件不能去掉=`/__GBT$
Y__t__FH@M
#includerv_RIKc|}l
R&_@N_Fin
5]_F4_.sa
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);N/8_0]Gf
3dB{DuQ_
~zcB@;:
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,GiMa_x__
#|^yWw^_
PSTRszCmdLine,intiCmdShow)ds:
&{~7LI7?
_s+vyds
{?
V$@2vBVX4
a{+
;&j[_!
staticTCHARszAppName[]=TEXT("HelloWin");__tr
_$d?
C_g&_:
_+
HWNDhwnd;Z1sRLk_R^
_8c'_5P
MSGmsg;_#b__C_zWg
Pw/$}Q9_X
WNDCLASSwc;U~__G__*0
___9B2_`FJ
by*_v(_$
wc.style=CS_HREDRAW|CS_VREDRAW;d_;E_(^l
!
y7w~U_V_s
wc.lpfnWndProc=WndProc;Hg`2-_Nl
7&*d_]#&~j
wc.cbClsExtra=0;c2U__p
<#t
L;'C5_#GN
wc.cbWndExtra=0;_28_=L9q_
~[_`*)(_4E
wc.hInstance=hInstance;\!
!
1o+#1j
y];@M<
e
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);_Su/}OS\
R
a_xL_O:
Q,
wc.hCursor=LoadCursor(NULL,IDC_ARROW);9<6_Hs3|.!
u,__)_,kj<
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);n8e4`-_cY
_Wkc^?
0p
wc.lpszMenuName=NULL;Eum_dv#_Qg
]WZ_i_+_
wc.lpszClassName=szAppName;_H\ONv=}7I
?
KtvXTy_{m
W5a>6u=g,
{GM8}M~D&_
if(!
RegisterClass(&wc))__|q*s_)8
DsH`I%w{
{_
_1__[r;_
I_l,^/qvIY
MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!
"),x
b1`(f_"&
l
szAppName,MB_ICONERROR);uS__i/__|
%l8nTcL__?
return0;p$A`qx_.+TriPL__
}!
_rMl"Y[
N}2xt_)JZz
hwnd=CreateWindow(szAppName,//windowclassname_a>{b'X^LV
q$__=EUB"C
TEXT("欢迎你的到来!
"),//windowcaption;qF#!
_Kb5_
fjAJ_ys)Q_
WS_OVERLAPPEDWINDOW,//windowstyleToHCS/J59
a_+CHrnU\;
CW_USEDEFAULT,//initialxposition>cPB:
kD'_
_D~xUr)E
CW_USEDEFAULT,//initialypositionb
Tn7$_EG_
LyB$~wZx~@
CW_USEDEFAULT,//initialxsize._Fn___O_
61Nj&1Ze
CW_USEDEFAULT,//initialysizeJ
(\"\_Z_
_r_'p;Nj._
NULL,//parentwindowhandlen_zTzc5_w
j:
__0VtJo~
NULL,//windowmenuhandleF_G~p__[K
x,js}Ml_w
hInstance,//programinstancehandle
3R?
7&oXvH_
NULL);//creationparameters
:
YB:
)wV,P
n_]x4t_w_Z
___a_TF}_
ShowWindow(hwnd,iCmdShow);GljxYH_"]#
_uG3t%Cm_N
UpdateWindow(hwnd);_v_I]|W
___Nm<3bd
`6!
l!
8_v
while(GetMessage(&msg,NULL,0,0))c\.4__I4uy
XN]kNJ_X
{&^
1DNpUZ
Hwz
_k
TranslateMessage(&msg);_8:
-[wl/@
]m(Uv8/__6
DispatchMessage(&msg);T\be(@_r_
fT/;T
K>z>
}NXDdU^w7B
N__(_]6pG=
returnmsg.wParam;[P_by__d
r3/_H___Z
}S_!
2M?
}LU
K6s'3O(LW
L_=VJl[_DL
%g_Jf_
&A
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)$dgY#ST_%_
gx#xB_8n
{gE0k|Z(RF
#
HDChdc;.4Jea#M&x
Jp!
__Q2}
PAINTSTRUCTps;BEx?
bf@|]
/_d&zE_|_!
RECTrect;*
h!
gjb_i
p2GkI/6)uu
r;g[<6`!
S
switch(message).EM0R\_q_
#_;)Oi9{9;
{)_kfA5xi[
}KEyJj3"DA
szu!
*w__c9
caseWM_PAINT:
__c3W__9"
}_A\s`Hm
hdc=BeginPaint(hwnd,&ps);0?
8_O9__i
_9E5Ec~l
r:
]t9y>$<
GetClientRect(hwnd,&rect);m-_Q!
V+XQp
kU{_+_@MA;
__D!
Pv_`wm
DrawText(hdc,TEXT("你好,欢迎你来到VC之路!
"),-1,&rect,&*}`u_Jt
b_nHQvCO3$
DT_SINGLELINE|DT_CENTER|DT_VCENTER);ySAkj-
"Zm**h._t_
EndPaint(hwnd,&ps);dO]N_&'P_7
Z_>h__S_&B
return0;Km_S$CFsGL
;eIqx_e>
znt
vKOIh
caseWM_DESTROY:
_WV__5z~_[
vdPostQuitMessage(0);_(bhMo^3/*
QFe_kj_@_
return0;cdd__6_*+E
_'O>p_@BEK
}B]_*v{?
$ljzw__@k
returnDefWi