三九宝宝网宝宝百科宝宝知识

windows编程基础利用WIN32API编写WinMain函数完成窗口类的

02月24日 编辑 39baobao.com

[win32下使用内存映射文件]映射文件把虚拟可寻址空间映射到文件上。整个文件就可以很容易的访问,就像它在内存中一样。但是它实质还是在硬盘中,只是需要的时候载入需要的部分到内存,这样可以节约物理内存...+阅读

///////////////////////////////////////////////////////////////// 04FirstWindow.cpp文件#include#include "stdafx.h"// 窗口函数的函数原形LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ char szClassName[] = "MainWClass"; WNDCLASSEX wndclass; // 用描述主窗口的参数填充WNDCLASSEX结构 wndclass.cbSize = sizeof(wndclass); // 结构的大小 wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画 wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针 wndclass.cbClsExtra = 0; // 没有额外的类内存 wndclass.cbWndExtra = 0; // 没有额外的窗口内存 wndclass.hInstance = hInstance; // 实例句柄 wndclass.hIcon = ::LoadIcon(NULL, IDI_APPLICATION); // 使用预定义图标 wndclass.hCursor = ::LoadCursor(NULL, IDC_ARROW); // 使用预定义的光标 wndclass.hbrBackground = (HBRUSH) ::GetStockObject(WHITE_BRUSH); // 使用白色背景画刷 wndclass.lpszMenuName = NULL; // 不指定菜单 wndclass.lpszClassName = szClassName ; // 窗口类的名称 wndclass.hIconSm = NULL; // 没有类的小图标 // 注册这个窗口类 ::RegisterClassEx(&wndclass); // 创建主窗口 HWND hwnd = ::CreateWindowEx( 0, // dwExStyle,扩展样式 szClassName, // lpClassName,类名 "My first Window!", // lpWindowName,标题 WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格 CW_USEDEFAULT, // X,初始 X 坐标 CW_USEDEFAULT, // Y,初始 Y 坐标 CW_USEDEFAULT, // nWidth,宽度 CW_USEDEFAULT, // nHeight,高度 NULL, // hWndParent,父窗口句柄 NULL, // hMenu,菜单句柄 hInstance, // hlnstance,程序实例句柄 NULL) ; // lpParam,用户数据 if(hwnd == NULL) { ::MessageBox(NULL, "创建窗口出错!", "error", MB_OK); return -1; } // 显示窗口,刷新窗口客户区 ::ShowWindow(hwnd, nCmdShow); ::UpdateWindow(hwnd); // 从消息堆中取出消息 MSG msg; while(::GetMessage(&msg,NULL, 0, 0)) { // 转化键盘消息 ::TranslateMessage(&msg); // 将消息发送到相应的窗口函数 ::DispatchMessage(&msg); } // 当GetMessage返回0时程序结束 return msg.wParam;}LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ char szText[] = "最简单的窗口程序!"; switch (message) { case WM_PAINT: // 窗口客户区需要重画 { HDC hdc; PAINTSTRUCT ps; // 使无效的客户区变的有效,并取得设备环境句柄 hdc = ::BeginPaint (hwnd, &ps) ; // 显示文字 ::TextOut(hdc, 10, 10, szText, strlen(szText)); ::EndPaint(hwnd, &ps); return 0; } case WM_CHAR: { char szChar[20]; sprintf(szChar,"char is %d",wParam); MessageBox(hwnd,szChar,"Windows",MB_OK); break; } case WM_LBUTTONDOWN: { MessageBox(hwnd,"mouse clicked","message",0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,"Windows program",strlen("Windows program")); ReleaseDC(hwnd,hdc); break; } case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否退出程序?","Windows",MB_YESNO)) { DestroyWindow(hwnd); } case WM_DESTROY: // 正在销毁窗口 // 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环 ::PostQuitMessage(0) ; return 0 ; } // 将我们不处理的消息交给系统做默认处理 return ::DefWindowProc(hwnd, message, wParam, lParam);}

Win32API的小问题

函数功能:该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。 函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam); 参数: lpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。 如果lpClassName是一个字符串,它指定了窗口的类名。

这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。 LPWindowName:指向一个指定窗口名的空结束的字符串指针。 如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。 dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义: WS_BORDER:创建一个单边框的窗口。 WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。 WS_CHIlD:创建一个子窗口。这个风格不能与WS_POPVP风格合用。 WS_CHLDWINDOW:与WS_CHILD相同。 WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。

在创建父窗口时使用这个风格。 WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。 WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗日不能接受来自用户的输人信息。 WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。 WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。

用户随后可以使用光标在组内的控制间改变键盘焦点。 WS_HSCROLL:创建一个有水平滚动条的窗口。 WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。 WS_MAXIMIZE:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。 WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。 WS_OVERtAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。 WS_POPUP;创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。 WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。

WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。 WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。 WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。 WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。 WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。 WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAME. WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。 WS_VISIBLE:创建一个初始状态为可见的窗口。WS_VSCROLL:创建一个有垂直滚动条的窗口。 X:指定窗口的初始水平位置。

对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子富口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_UCEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为零。 Y:指定窗口的初始垂直位置。对一个层叠或弹出式...

win32编程

不知道比较精通,是精通到什么地步了?

1。Windows编程主要是C语言,当然C++更没问题,一样调用Windows API. 《Windows程序设计》第五版Petzold写的,号称Windows程序员的圣经。把这个啃下来,了解了Windows程序的运行机制,像怎么接收并处理消息等等,同时把概念,原理了解清楚,对后来学习MFC非常有帮助。

2。Windows API的编程熟悉了以后,可以看一本《MFC Windows程序设计》好像是叫Jeff什么写的,和上一本都比较出名,而且价格超贵,书超厚,能啃下来就很不容易了…… MFC实际没什么,就是以前的API被用C++的面向对象概念重新封装,旧瓶装新酒而已,因此我说在上一阶段弄清Windows程序的机制原理,结构等,对理解和使用MFC这些class很有帮助。 还有一本候捷的《深入浅出MFC》个人看了个开头,就看不下去了,看得很难受,但是这仅仅是我个人,其他人可以试一试吧……

个人感觉直接从MFC开始学,很难入手,确实是这样。我的路程是上边的先1后2,但是目前也不敢说精通,只能说会使用,因为各种对象,类太多了,不可能花时间去研究,必要时后只能参考MSDN什么的……

以下为关联文档:

Win32调试API第一部分理论:Win32有一些供程序员使用的API,它们提供相当于调试器的功能. 他们被称作Win32调试API(或原语).利用这些API,我们可以:加载一个程序或捆绑到一个正在运行的程序上以供...

C++Win32APIReadFile读取文件直接一起来看吧:&emspinclude&emspinclude&emspinclude&emspinclude&emspincludevoid main(){unsigned long lpNumber=0;char lpBuffer[50]=""; Examda提示:文件读...

告别Windows白屏让窗口背景靓起来使用计算机也有好些个年头了,从Windows95/98/2000/XP,一直到现在的Vista操作系统,无一例外的都在使用着Windows的那个“白屏”窗口,厌烦已久却无可奈何,然而,这样的境遇终于在今天...

Win32调试API第三部分理论: 如果你以前使用过调试器,那么你应对跟踪比较熟悉。当"跟踪"一个程序时,程序在每执行一条指令后将会停止,这使你有机会去检查寄存器/内存中的值。这种单步运行的官方定义...

如何学好VB中的API函数调用关于API函数的书!市场上太少了!就算是有,也介绍得很粗浅!你到书店好好找找!我没有API函数的好书介绍给你! 谈一下我的心得吧: 首先,有必要向大家讲一讲,什么是API。API是包含在一个附...

VC用C语言编写WIN32程序怎么实现动态创建VC编写dll文件 1、VC++->New->Project->Win32 Dynamic_Link Library; 2、选择创建一个空工程; 首先DLL需要一个头文件,所以新建一个C\C++ Header File 这个头文件中必须包含想...

如何在Visual c中对Win32 API进行调用API函数的调用方法非常方便,只要在文件的开头包含了相应的头文件就可以直接调用了.下面给一个简单的例子: #include "stdafx.h" // 这是VC自动添加的文件,没有什么用途 #include...

VBA函数编写问题请教报错的这个语句如下: For i = 6 To WS2.Range("C6:C30").Find("*", , , , , xlPrevious).Row WS2.Range("C6:C30").Find("*", , , , , xlPrevious).Row 意思是 C6:C30里面最后一个有...

如何学好API我的教材是 windows程序设计第5版我发现API1 :最基础的是 我们要熟悉程序的框架 2 :最主要的是了解WINDOWS编程的原理、消息机制尤其重要,要学会消息处理 3:能够读懂WIN32API 写出来的程序,了解其原理 等达到这个程度时,可...

推荐阅读
图文推荐