CreateWindow和WNDCLASS中为什么都出现了HINSTANCE
来源:互联网 发布:重启wifi后连不上网络 编辑:程序博客网 时间:2024/06/10 03:55
众所周知,在windows下我们要创建窗口,必须依据一个已经有的或者自己创建一个新的窗口类,然后注册窗口类,最后才能根据这个窗口类创建一个用户自己的窗口,MSDN中WNDCLASS的类型定义为
typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS, *PWNDCLASS;
注意这里已经有了HINSTANCE hInstance的定义,当我们定义了这样一个结构体后,根据这个结构体去注册这个窗口类,
调用ATOM RegisterClass( CONST WNDCLASS *lpWndClass // class data)即可,这样我们就可以根据这个窗口类创建窗口了
然而让人疑惑的是HWND CreateWindow(
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);中再次指定了hInstance,我们读windows编程或者其它常见的windows编程的书大体介绍都是CreateWindow是根据lpClassName这个变量创建新的窗口的,既然根据窗口类就可以创建窗口,而窗口类中已经有了关于hInstance的声明了,为什么还要重新声明,这不是多此一举吗?这下可把初学windows编程的很多人搞晕了,哈哈
尽信书不如无书,同学们想一想,当同一个程序的执行后,重新开启第二次执行的时候,两次注册的窗口类的名字是否一样呢?答案当然是肯定的,因为多个进程执行的代码段是相同的,但是每个进程的窗口类却不一样,因为在窗口类中还有一个hInstance的声明,用数据库的观点看就是说窗口类的主键不止是lpClassName而已,还有hInstance,这样以来当CreateWindow时当然同时需要指定窗口的lpClassName和hInstance喽
结论:窗口类名不足以唯一地标志窗口类。每个进程有自己的窗口类列表,窗口类列表中的每一项都由一个实例句柄和一个类名字组成。创建窗口时,windows的窗口管理器使用实例句柄和窗口类的组合来寻找窗口类。
0 0
- CreateWindow和WNDCLASS中为什么都出现了HINSTANCE
- WNDCLASS CreateWindow
- 传递给 CreateWindow 和 RegisterClass 的 HINSTANCE 有什么用?
- 为什么内存和存储都涨价了
- 丢掉一句wndclass.hInstance=hInstance;编译通过,能运行但看不见,后果严重!
- WNDCLASS中cbClsExtra和cbWndExtra区别及其用法
- 全世界人民为什么都笑了
- 为什么研究生都走光了
- HINSTANCE 和 HMODULE
- CreateWindow() 在VC6和 VS2005 中使用差异
- Window Class和CreateWindow(不断修改中)
- C++中为什么出现“屯屯屯屯屯”和“烫烫烫烫烫烫”
- CreateWindow 和DestroyWindow
- WNDCLASS
- WNDCLASS
- WNDCLASS
- WNDCLASS
- wndclass
- 黑马程序员_泛型知识的总结
- 黑马程序员---JAVA基础---泛型与Map集合(十)
- 从两个数组中查找相同的数字谈Hashtable 时间复杂度O(n) 引申 布隆过滤器
- 指令级并行——超标量Superscalar与超长指令字VLIW架构
- UIWebView 播放视频
- CreateWindow和WNDCLASS中为什么都出现了HINSTANCE
- python常用函数方法
- 解决Windows Git Bash中文乱码问题
- Broadlink 博联wifi远程控制智能插座\手机网络控制定时延时开关配置失败的解决方法(已解决)
- 使用工具查看服务信息
- NET特性编程(Attribute)
- oc中数据库使用详细解释(二)
- Android ADT 离线下载技巧(告别在线安装的麻烦)
- C++ Primer(6) 模板和泛型编程(上)