您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > windows程序设计学习笔记
第一章:开始Windows.h:#includewindows.h:主要的含入档案,包括了其他windows表头档案,这些表头档案的某些也包含了其他表头档案。Windef.HWindow数据类型Winnt.HUnicode字符集的支持Winbase.HKernel32.dll的头文件Winuser.Huser32.dll的头文件Wingdi.H绘图API(GDI32.DLL)的头文件这些表头定义了windows的所有资料形态、函式呼叫、资料结构和常数识别字,是windows文件中的一个重要部分。程式进入点:WinMain函数大家学习c语言时,还记得其入口函数Main吧,Window也一样,也有一个入口函数,WinMain。IntWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)WinMain函式宣告为返回一个int值,许多Windows函式呼叫宣告为WINAPI。IntMessageBox(HWNDhWnd,//父窗口的句柄LPCTSTRlpText,//显示在提示框中的信息LPCTSTRlpCaption//提示框标题栏的信息UINTuType//风格(按钮、图标));//返回点击的按钮ID第二章Unicode简介Widows字符处理:1.字符编码方式:asc码7位代表一个字符,128个字符ASCII码8位代表一个字符,256个字符DBCS编码单双字节混合编码UNICODE编码采用双字节编码,2个字节代表一个字符;2.宽字节字符:wchar_t实际上unsignedshort类型,每个字符占用2个字节char每个字符占用一个字节;Wchar_t定义时需要增加“L”,通过编译器按照双字节编译字符串,采用Unicode编码;需要使用支持wchar_t的函数操作宽字节;例如:wchar_t*pszText=L”HelloWrold”;wprintf(L“%s\n”,pszText);3.TCHAR:根据环境不同用UNICODE宏开关切换TCHAR的定义,如果定义UNICODE宏TCHAR定义为wchar_t,如果未定义UNICODE宏,TCHAR定义为char;例如:如果没有定义UNICODE宏TCHAR*pszText=_TEXT(“Hello”);替换为:char*pszText=“Hello”;如果定义了UNICODE宏TCHAR*pszText=_TEXT(“Hello”);替换为:wchar_t*pszText=L“Hello”;4.宽字元程式库函式:获得字串的长度使用strlen()函数第三章视窗和消息1.Windows创建窗口时共调用了18个函数:LoadIcon载入图示供程序使用LoadCusor载入滑鼠游标供程序使用GetStockObject取得以一个图形物件RegisterClass注册视窗类别MessageBox显示消息CreateWindow建立窗口ShowWindow在屏幕上显示视窗UpdateWindow更新视窗GetMessage从消息储存列中取得消息TranslateMessage转译某些键盘消息。DispatchMessage将消息发送给视窗消息处理程式。PlaySound播放一个音效档案。BeginPaint开始绘制视窗。GetClientRect取得视窗显示区域的大小。DrawText显示字串。EndPaint结束绘制视窗。PostQuitMessage在消息伫列中插入一个「退出程式」消息。DefWindowProc执行内定的消息处理。这些函式均在PlatformSDK文件中说明,并在不同的表头档案中宣告,其中绝大多数宣告在WINUSER.H中。2.大写字母识别字这些是简单的数值常数。字首指示该常数所属的类别,如下字首类别CS视窗类别样式CW建立视窗DT绘制文字IDI图示IDIDC游标IDMB消息方块SND声音WM视窗消息WS视窗样式程序员不要费力气去记忆Windows程式设计中的数值常数。实际上,Windows中使用的每个数值常数在表头档案中均有相应的识别字定义。3.匈牙利表示法:在命名结构变数时,可以用结构名(或者结构名的一种缩写)的小写作为变数名的字首,或者用作整个变数名。匈牙利表示法能够帮助程式写作者及早发现并避免程式中的错误。字首资料型态cchar或WCHAR或TCHARbyBYTE(无正负号字元)nshortiintx,yint分别用作x座标和y座标cx,cyint分别用作x长度和y长度;C代表「计数器」b或fBOOL(int);f代表「旗标」wWORD(无正负号短整数)lLONG(长整数)dwDWORD(无正负号长整数)fnfunction(函数)sstring(字串)sz以位元组值0结尾的字串h代号p指标4.注册视窗类别:RegisterClass注册一个视窗类别该函数只需要一个参数,即WNDCLASS的结构体。typedefstructtagWNDCLASSW{UINTstyle;//视窗类别样式WNDPROClpfnWndProc;//视窗类别的视窗消息处理程序intcbClsExtra;//预留的空间intcbWndExtra;//预留的空间HINSTANCEhInstance;//程序的执行实体HICONhIcon;//设置的图标HCURSORhCursor;//光标HBRUSHhbrBackground;//背景色LPCWSTRlpszMenuName;//功能表LPCWSTRlpszClassName;//类别名称}WNDCLASSW,*PWNDCLASSW,NEAR*NPWNDCLASSW,FAR*LPWNDCLASSW;5.建立视窗:呼叫CreateWindow建立视窗。hwnd=CreateWindow(szAppName,//windowclassnameTEXT(TheHelloProgram),//windowcaptionWS_OVERLAPPEDWINDOW,//windowstyleCW_USEDEFAULT,//initialxpositionCW_USEDEFAULT,//initialypositionCW_USEDEFAULT,//initialxsizeCW_USEDEFAULT,//initialysizeNULL,//parentwindowhandleNULL,//windowmenuhandlehInstance,//programinstancehandleNULL);6.显示视窗:在CreateWindow呼叫传回之後,Windows内部已经建立了这个视窗,然而,光是这样子,视窗并不会出现在视讯显示器上。您还需要两个函数呼叫,一个是:ShowWindow(hwnd,iCmdShow);第一个参数是刚刚用CreateWindow建立的视窗句柄。第二个参数是作为参数传给WinMain的iCmdShow。它确定最初如何在萤幕上显示视窗,是一般大小、最小化还是最大化。如果视窗按一般大小显示,那么WinMain接收到後传递给ShowWindow的就是SW_SHOWNORMAL;如果视窗是最大化显示的,则为SW_SHOWMAXIMIZED。而如果视窗只显示在工作列上,则是SW_SHOWMINNOACTIVE。ShowWindow函数在显示器上显示视窗。如果ShowWindow的第二个参数是SW_SHOWNORMAL,则视窗的显示区域就会被视窗类别中定义的背景画刷所覆盖。呼叫第二个函数UpdateWindow(hwnd);会重画显示区域。它经由发送给视窗消息处理程式一个WM_PAINT消息做到这一点。7.消息回圈:呼叫UpdataWindow后,视窗就出现在了显示器上。程序现在必须读入用户使用键盘鼠标输入的信息。while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}msg变数是型态为MSG的结构,型态MSG在WINUSER.H中定义如下typedefstructtagMSG{HWNDhwnd;UINTmessage;WPARAMwParam;LPARAMlParam;DWORDtime;POINTpt;}MSG,*PMSG;POINT资料型态也是一个结构,它在WINDEF.H中定义如下typedefstructtagPOINT{LONGx;LONGy;}POINT,*PPOINT;GetMessage(&msg,NULL,0,0)这一呼叫传给Windows一个指标,指向名为msg的MSG结构。第二、第三和第四个参数设定为NULL或者0,表示程式接收它自己建立的所有视窗的所有消息。只要从消息伫列中取出消息的message栏位不为WM_QUIT(其值为0x0012),GetMessage就传回一个非零值。WM_QUIT消息将导致GetMessage传回0。叙述TranslateMessage(&msg);将msg结构传给Windows,进行一些键盘转换。叙述DispatchMessage(&msg);又将msg结构回传给Windows。然后,Windows将该消息发送给适当的视窗消息处理程式,让它进行处理。这也就是说,Windows将呼叫视窗消息处理程式。处理完消息之后,WndProc传回到Windows。此时,Windows还停留在DispatchMessage呼叫中。在结束DispatchMessage呼叫的处理之后,Windows回到HELLOWIN,并且接著从下一个GetMessage呼叫开始消息回圈。视窗消息处理程式总是定义为如下形式:LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)8.处理消息:一般来说,Windows程式写作者使用switch和case结构来确定视窗消息处理程式接收的是什么消息,以及如何适当地处理它。视窗消息处理程式在处理消息时,必须传回0。视窗消息处理程式不予处理的所有消息应该被传给名为DefWindowProc的Windows函式。从DefWindowProc传回的值必须由视窗消息处理程式传回。switch(iMsg){caseWM_CREATE:处理WM_CREATE消息return0;caseWM_PAINT:处理WM_PAINT消息return0;caseWM_DESTROY:处理WM_DESTROY消息return0;}returnDefWindowProc(hwnd,iMsg,wParam,lParam);呼叫DefWindowProc来为视窗消息处理程式不予处理的所有消息提供内定处理,这是很重要的。不然一般动作,如终止程式,将不会正常执行。9.WINDOWS程序设计的难点视窗消息处理程序与视窗类别相关,视窗类别是程式呼叫RegisterClass注册的。依据该类别建立的视窗使用这个视窗消息处理程式来处理视窗的所有消息。Windows通过呼叫视窗消息处理程式对视窗发送消息。第一次建立视窗、关闭视窗、在视窗里进行一系列操作时,window呼叫WndProc。所有这些呼叫都以消息的形式进行。Window可以发送给视窗消息处理程序的消息通常都以WM开头的名字标示,都在WINUSER.H中定义。第四章输出文字1.绘制和更新在文字模式环境下,程序可以在显示器的任意部分输出,程序输出到萤幕上的内容会停留在原处,不会神秘地消失。因此,程序可以丢掉重新生成萤幕显示时所需的资讯。在window中,只能在视窗的显示区域绘制文字和图形,并且不能确保在显示区域内显示的内容会一直保留到程序下一次有意的改写它时还保留在原处。Windows通过发送WM_PAINT消息通知视窗消息处理程式,视窗的部分显示区域需要绘制。如果在视窗消息处理程序处理WM_PAINT消息之前显示区域中的另一个区域变为无效,则Wi
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:windows程序设计学习笔记
链接地址:https://www.777doc.com/doc-6158377 .html