| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1333 人关注过本帖
标题:Windows编程的内部分析
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:0 
Windows编程的内部分析

WinMain程序入口

int WINAPI WinMain(HINSTANCE hInstance, 当前实例句柄 HINSTANCE hPrevInstance, 前一个实例句柄,标识同一程序最近的一个仍然活动的一个实例句柄 LPSTR pszCmdLine, 长指针,指向的字符串包含任何传送该程序的命令行参数 int nCmdShow 长整数,指明程序的窗口初始时是如何在Window中显示(是打开的窗口还是显示图标 )

nCmdShow 参数值如下:

SW_HIDE 隐蔽窗口,激活消息传给其他窗口 SW_MINMIZE 最小化显示 SW_RESTORE 恢复为SW_SHOWNORMAL方式 SW_SHOW 激活该窗口,用当前的位置和尺寸进行显示 SW_SHOWMAXIMIZED 激活该窗口,将显示为图标 SW_SHOWMINNOACTIVE 以图标方式启动程序 SW_SHOWNA 以该窗口的当前状态显示,激活窗口不变 SW_SHOWNOACTIVE 以该窗口最近尺寸和位置进行显示,活动窗口不变 SW_SHOWNORMAL 激活并显示该窗口,正常显示

窗口过程由WinMainProc过程来完成

用WNDCLASS设置窗口的特性

typedef struct _WNDCLASS{

UINT style; //如何修改、移动、缩放窗口 WNDPROC lpfnWndProc; //窗口类窗口函数指针 int cbClsExtra; //指向窗口类结构分配的额外字节数,处理窗口类的专用数据 int cbWndExtra; //指定用本窗口类建立的所有窗口结构分配的额处字节数,当有           两个以上窗口属于同一窗口类时,使用该域非常有用 HANDLE hInstance; //标识注册了此窗口的应用程序实例 HICON hIcon; //定义属于该窗口类的窗口缩成最小时显示的图标形状,表程序仍驻留内存中 HCURSOR hCursor; //定义使用窗口被 HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName;

}WNDCLASS;

style值:

CS_VREDRAW 垂直重画 CS_HREDRAW 水平重画 CS_OWNDC 独占设备描述表 CS_SAVEBITS 保存窗口覆盖区 CS_DBCLKS 允许两次连续按动 CS_BYTEALLGNCLIENT 鼠标用户区域按字节对齐显示 CS_BYTEALLGNWINDOW 鼠标用户窗口按字节对齐显示 CS_NOCLOSE 系统菜单中没有CLOSE菜单项

一个WINDOW程序的基本框架

#include "afxwin.h" LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsgId,WPARAM wParam,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,                 LPSTR pszCmdLine,int nCmdShow) //请参考 WinMain程序入口 { static char szAppName[]="Welcome to Windows!"; HWND hWnd; MSG msg; WNDCLASS wndClass; //请参考WNDCLASS窗口的注册 if(!hPrevInstance) { wndClass.lpszClassName=szAppName; wndClass.hInstance=hInstance; wndClass.lpfnWndProc=(WNDPROC)WindowProc; wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndClass.hCursor=LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName=NULL; wndClass.style=CS_HREDRAW; //|CS_VERDRAW; wndClass.cbClsExtra=0; wndClass.cbWndExtra=0; } if(RegisterClass(&wndClass)==0) { return 0; } hWnd=CreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,100,100,300,300,               NULL,NULL,hInstance,NULL); if(hWnd==0) { return 0; } ShowWindow(hWnd,nCmdShow); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsgId,WPARAM wParam,LPARAM lParam) { static char *Str="Welcome to Window"; switch(uMsgId) { case WM_PAINT: HDC hDC; PAINTSTRUCT paintStruct; hDC=BeginPaint(hWnd,&paintStruct); TextOut(hDC,0,0,Str,::strlen(Str)); EndPaint(hWnd,&paintStruct); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd,uMsgId,wParam,lParam); } }

搜索更多相关主题的帖子: Windows 
2004-10-31 13:41
快速回复:Windows编程的内部分析
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016192 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved