文档章节

MFC创建窗口 RegisterClassEx 和 CreateWindow

t
 tigerBin
发布于 2017/05/20 20:09
字数 292
阅读 96
收藏 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
粉丝 1
博文 65
码字总数 17440
作品 0
武汉
程序员
私信 提问
VS2010/MFC编程入门之四(MFC应用程序框架分析)

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

程序鸡
2013/05/07
0
0
用vc6.0新建一个win32 application工程,建立一个输出hello 的cpp,编译链接通过,就是没有窗口显示

并且,其实已经打开了一个exe程序,但是他不会自动关闭,要自己去任务管理器哪里手动关闭??? 我在网上找了一个,和我的一样啊,为什么被人的能出来,我的就不行? 我的: /*贪吃蛇 1.项目...

文刀人韦
2017/08/07
72
0
这个程序最后声明对象的时候为什么要用指针?

#include HINSTANCE hInstance; class CFrameWnd { HWND hwnd; public: CFrameWnd(); //也可以在这里调用Create() virtual ~CFrameWnd(); int Create(); //类就留意这一个函数就行了! BOOL......

xxdd
2013/04/09
100
1
MFC建立应用程序启示录(创世纪新篇)

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

crossmix
2015/07/25
0
1
问个winapi的

哪里能找到winapi的帮助文档。不要mfc啥的,就是直接include window.h就写的。下了msdn vs2008版,发现里面控件基本都是mfc还是什么的?其实我就想找一个,各种createwindow出来winclass的示例...

ericsoul
2013/06/07
38
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
13分钟前
0
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
52分钟前
1
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
2
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部