文档章节

MFC创建窗口 RegisterClassEx 和 CreateWindow

t
 tigerBin
发布于 2017/05/20 20:09
字数 292
阅读 75
收藏 1

要创建一个新的窗口,需要先使用 RegisterClassEx 注册一个新的窗口类型,然后调用CreateWindow宏创建一个已注册的窗口

#include <windows.h> 
#include <stdio.h>

// Global variable 
 
HINSTANCE hinst; 
 
// 回掉函数
 
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM)
{
	while(true);
	return 0;
}

 
// 函数入口点
 
int WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
	WNDCLASSEX wcx;
	//初始化窗口结构体
	wcx.cbSize 			= sizeof(WNDCLASSEX);
	wcx.style  			= CS_HREDRAW | CS_VREDRAW;
	wcx.lpfnWndProc 	= MainWndProc;
	wcx.cbClsExtra 		= 0;
	wcx.cbWndExtra 		= 0;
	wcx.hInstance		= hinstance;
	wcx.hIcon			= LoadIcon(0, IDI_APPLICATION);
	wcx.hCursor			= LoadCursor(0, IDC_ARROW);
	wcx.hbrBackground	= 0;
	wcx.lpszMenuName	= "MainMenu";
	wcx.lpszClassName	= "MainWindow";
	wcx.hIconSm			= 0;
	//注册一个窗口
	ATOM wc = RegisterClassEx(&wcx);

	if (!wc)
	{
		printf("Register error!\n");
		return -1;
	}
	//创建一个窗口,只能创建已经注册到系统的窗口类型
	HWND hWnd = CreateWindow("MainWindow","Window exp",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL);

	if (!hWnd)
	{
		printf("Create error\n");
		return -1;
	}
	//显示窗口
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	return 0;
} 

CreateWindow是一个宏定义

#ifdef UNICODE
#define CreateWindow  CreateWindowW
#else
#define CreateWindow  CreateWindowA
#endif

他们最终调用的函数是

#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)

#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)

CreateWindowW使用Unicode编码

CreateWindowA使用ANSI编码

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 62
码字总数 17049
作品 0
武汉
程序员
VS2010/MFC编程入门之四(MFC应用程序框架分析)

可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大。这一节就为大家分析下MFC应用程序框架的运行流程。 一.SDK应用程序与MFC应用程序运行过程的对比 ...

程序鸡
2013/05/07
0
0
MFC建立应用程序启示录(创世纪新篇)

MFC是vc+的核心部分,需要一定的编程功底。 Windows编程基础 编制一个功能强大和易操作的Windows应用程序所需要的代码肯定会比一般的C++程序要多得多,但并不是所有的代码都需要自己从头开始...

crossmix
2015/07/25
0
1
wxwidgets开发组件制作为ActiveX控件

主要思路: 在MFC中如果要创建wxwidgets 的窗口为MFC窗口的子窗口就要把MFC的窗口封装成wxwindow,即做一个虚拟窗口。同理如果要在wxwidgets上使用MFC窗口并把wxwidgets窗口作为MFC窗口的父窗...

流逝的风
2012/04/29
0
4
利用CWinThread实现跨线程父子MFC窗口

原则上,MFC对象只能由创建该对象的线程访问,而不能由其它线程访问.这是因为MFC窗口中有一个Windows handle maps, 这个maps同线程相关,也就是说该线程一定会访问该maps,而且该线程创建的MFC窗...

jetyi
06/26
0
0
在 Visual C++ 中 建 立 MFC 扩 展 DLL

有经验的Windows编程人员都逐渐放弃了WindowsSDK,而转向能为Windows内置的低级机制提供高级抽象的开发环境。这种转移的一个主要受益者是VisualC++,它依靠MFC库来提供WindowsAPI的面向对象的...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
11分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
13分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
29分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部