WindowsAPI WinMain

 
一、WindowsAPI介绍:
WindowsAPI(Windows Application Programming Interface)
动态链接:(Dynamic Linking Library ,DLL)Windows动作机制的核心是动态链接库。
三个主要的动态链接库:
Kernel:处理所有在传统上由操作系统核心处理的事务-内存管理、文件i/o和多任务管理
User:使用都接口,所有窗口运行机制。
GDI:一个图形设备接口,谲诈程序在屏幕和打印机上显示文字和图形。
 
 
二、编写一个windows程序:
 
#include < windows.h>                                  
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,                                           //sz 表示以 0 结束的字符串
int iCmdShow){
      MessageBox(NULL,TEXT(“Hello,windowsXP”),TEXT(“HelloMsg”),0);
      return 0;
}
 
这个程序是在VC6.0 的win32 Application建立的。
1、 windows.h是主要的含入文件,它包含了其它windows的表头文件,在这些被windows.h的表头文件包含了其他的表头文件如下:
WINDEF.H                   基本形态定义
WINNT.H                     支持Unicode的形态定义
WINBASE.H                Kernel函数
WINUSER.H                  使用者接口函数
WINGDI                       图形设备接口函数
这些头文件定义了windows的所有数据形态、函数呼叫、数据结构和常数标识符。
WINMAIN是windows的进入点相当于C程序的main
 
2、以下是MSDN的WINMAIN函数结构:
int WINAPI WinMain(
 HINSTANCE hInstance, // handle to current instance 此程序的唯一标识
 HINSTANCE hPrevInstance, // handle to previous instance     可是确定是否运//行同一个程序这个参数总是null
 LPSTR lpCmdLine,      // pointer to command line 这是程序的命令行参数
 int nCmdShow           // show state of window 程序最初显示的方式
);
3、WINAPI是一个宏定义
#define WINAPI __stdcall
WINAPI是一个简单的数据类型用于定义32位API的数据类型,他可以定义函数返回值函数消息和参数还有结构体的成员,在是里他是一个调用约定,表示参数都是 从右向左通过堆栈传递的函数调用,在返回前要清理堆栈。在这里WINAPI 可以改成__stdcall。
三、介绍一下VC6.0的编译过程:
      1、正常情况下,在编译阶段,编译器从原始码文件产生一个.obj(目标)文件,
                      在连接阶段,连接程序.obj和.lib文件以建立exe
      在VC6.0的setting的link页面标签可以查看这些库文件里面有几个重要的lib:
      Kernel32.lib user32.lib gdi32.lib
2、你还可以用不同的设定编译和连接程序。有两种方法Debug和Release他的运行程序会放到相应的目录下
最简单的winmain程序 #include #include LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { HDC hdc; switch(uMsg) { case WM_CHAR: char szChar[20]; sprintf(szChar,"char is %d",wParam); MessageBox(hwnd,szChar,"weixin",0); break; case WM_LBUTTONDOWN: MessageBox(hwnd,"mouse clicked","weixin",0); hdc=GetDC(hwnd); TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训")); ReleaseDC(hwnd,hdc); break; case WM_PAINT: PAINTSTRUCT ps; hdc=BeginPaint(hwnd,&ps); TextOut(hdc,0,0,"维新培训",strlen("维新培训")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO)) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { WNDCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinSunProc; wndcls.lpszClassName="Weixin2003"; wndcls.lpszMenuName=NULL; wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls); HWND hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); DWORD dwStyle=GetWindowLong(hwnd, GWL_STYLE); dwStyle&=~(WS_SIZEBOX|WS_MAXIMIZEBOX|WS_MINIMIZEBOX); SetWindowLong(hwnd, GWL_STYLE, dwStyle); ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值