文档章节

MFC创建窗口 RegisterClassEx 和 CreateWindow

t
 tigerBin
发布于 2017/05/20 20:09
字数 292
阅读 86
收藏 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
博文 65
码字总数 17440
作品 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
C,C++,VC++,MFC之间有什么区别和联系

转载:http://blog.163.com/jackiehowe/blog/static/199491347201242011203225/ C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代。由于它的设计有很多优点,多年...

80后小子
2015/07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里面试题

https://yq.aliyun.com/articles/6656 https://yq.aliyun.com/articles/7468

jason_kiss
14分钟前
1
0
阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统

背景 秒杀活动是绝大部分电商选择的低价促销,推广品牌的方式。不仅可以给平台带来用户量,还可以提高平台知名度。一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验...

别打我会飞
21分钟前
2
0
188. jsp提出公共的资源

平时我们会在一个地方 写一些重复的东西,为了便于管理我们需要将它提炼出来 1. 问题现象 2. 解决方式 (1) 提炼出该内容 <script type="text/javascript"> var net ={url: "${pageContext....

Lucky_Me
28分钟前
0
0
集合

集合 集合 集合介绍 前面的学习,我们知道数据多了,使用数组存放。而且数组中存放的都是基本类型的数据,并且数组是定长的。当在程序中创建的对象比较多的时候,需要对这些对象进行统一的管...

码农屌丝
35分钟前
1
0
jsp页面手写翻页小记

<s:if test="totalPage > 1"> <tr align="center"> <td colspan="4" align="center" style="height: 25px; text-align: center;">......

JackChenzp
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部