| 本帖最后由 十二 于 2010-12-25 01:36 编辑 
 以下是一个标准C创建窗口的代码,当然我看不太懂(众人:那你贴个屁),- =。。。。。。。
 
 代码来自RadASM。
 
 #include "windows.h"  包含的文件头,学过C的应该都知道我就不废话了。这里定义了函数所需要的参数,好处是可以方便的看到参数的hex值。
 
 #pragma comment(linker, "/ENTRY:EntryPoint") 这个其实我也不知道干什么的(众人:鄙视你),我真的不知道PA飞,百度的解释改变入口。
 
 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);定义一个窗口消息回调函数。HWND为消息的窗口句柄、UINT为消息ID、WPARAM, LPARAM为消息的具体内容。
 
 void EntryPoint() 
 {
 
  ExitProcess(WinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOWNORMAL));以上全是废话,实在想不开可以全部删除掉把LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);放在WinMain后面,当然保留#include "windows.h" 
 }
 
 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)入口函数
 
 函数原型:
 int WINAPI WinMain
 (
 HINSTANCE hInstance,应用程序当前实例的句柄,进程句柄。
 HINSTANCE hPrevInstance,应用程序的先前实例的句柄,(一个程序可以被多次OpenProcess打开,函数将会返回进程句柄。句柄并不唯一,旧句柄依旧有效,新句柄不会替代旧句柄。且每个句柄的权限会被保留。)
 LPSTR lpCmdLine指向应用程序命令行的字符串的指针。
 int nCmdShow指明窗口如何显示,你可以说这个功能是多此一举因为ShowWindow函数可以直接设置窗口的状态还要这个干嘛。但这样可以在创建窗口之前指定nCmdShow的值。来控制窗口状态
 );
 
 {
 
 static TCHAR szAppName[]=TEXT("Windows");定义一个全局静态变量,szAppName数组里记录了类名。
 HWND hwnd; 句柄
 MSG msg;定义一个消息变量,MSG是消息结构。
 WNDCLASS wndclass;定义一个窗口类,WNDCLASS是其结构。
 wndclass.style=CS_HREDRAW|CS_VREDRAW;当窗口水平、垂直方向的宽度变化时重绘整个窗口。
 wndclass.lpfnWndProc=WndProc;定义窗口消息处理函数
 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=szAppName;窗口类名为“szAppName”
 
 if(!RegisterClass(&wndclass)) 注册窗口
         {
                 MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
                 return 0;
 
         }
 CreateWindow函数创建窗口实例。
 hwnd=CreateWindow(szAppName,                                                //window class name指定要创建窗口的类名。创建后窗口句柄送hwnd
 TEXT("Windows Program"),                //window caption窗口标题
 WS_OVERLAPPEDWINDOW,                        //window style窗口风格
 CW_USEDEFAULT,                        //initial x position指定窗口的初始水平位置
 CW_USEDEFAULT,                        //initial y position
 CW_USEDEFAULT,                        //initial x size
 CW_USEDEFAULT,                        //initial y size
 NULL,                                        //parent window handle
 NULL,                                        //window menu handle
 hInstance,                                //program instance handle
 NULL);                                    //creation parameters
 
 
 http://baike.baidu.com/view/1001690.html CreateWindow原型
 
 
 ShowWindow(hwnd,iCmdShow);显示窗口 http://baike.baidu.com/view/1013883.htm 原型
 UpdateWindow(hwnd); 重绘窗口 http://baike.baidu.com/view/1013910.htm 原型
 
 while (GetMessage(&msg,NULL,0,0))  得到消息并存放到 MSG结构中去 http://baike.baidu.com/view/1013920.html?wtp=tt 原型
         {
 TranslateMessage(&msg); 翻译消息 http://baike.baidu.com/view/1013950.htm 原型
 DispatchMessage(&msg); 派发消息 http://baike.baidu.com/view/1013961.htm 原型
         }
 //        MessageBox(NULL,TEXT("2"),TEXT("CAPTION"),MB_OK);
 return msg.wParam; 返回wParam中的消息
 }
 
 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 消息处理函数
 {
 switch(message) 循环获得消息
         {
 case WM_CREATE: 获取到一个应用程序创建窗口消息。
          //Put your code here 正如这里所写可以写你想实现的功能。
                 return 0;
 
 case WM_PAINT:UpdateWindow重绘窗口时会收到此消息
          //Put your code here 如上
                 return 0;
 
 case WM_DESTROY:当关闭窗口时会收到此消息
          PostQuitMessage(0);终止程序
                 return 0;
         }
  return DefWindowProc(hwnd,message,wParam,lParam); 剩余消息全部交给系统处理
 }
 
 一个比较基础的窗口创建流程。看到这或许你会觉得不屑这些,用MFC、或者其他类库可以轻易的创建一个窗口。如果没有CreateWindow、ShowWindow、这些会变成什么样子呢?
 |