控制台下创建窗口和WinMain入口创建窗口简单程序

控制台创建窗口(同时有控制台窗口和新创建的窗口)(项目类型:控制台应用程序)

#include "windows.h"
#include "TCHAR.h"  

LRESULT CALLBACK WindowProc(
	HWND hwnd,
	UINT uMsg,
	WPARAM wParam,
	LPARAM lParam
	);

int _tmain(int argc, _TCHAR* argv[])
{
	HINSTANCE hInstance;
	hInstance = GetModuleHandle(NULL);
	WNDCLASS Draw;
	Draw.cbClsExtra = 0;
	Draw.cbWndExtra = 0;
	Draw.hCursor = LoadCursor(hInstance, IDC_ARROW);;
	Draw.hIcon = LoadIcon(hInstance, IDI_APPLICATION);;
	Draw.lpszMenuName = NULL;
	Draw.style = CS_HREDRAW | CS_VREDRAW;
	Draw.hbrBackground = (HBRUSH)COLOR_WINDOW;
	Draw.lpfnWndProc = WindowProc;
	Draw.lpszClassName = _T("DDraw");
	Draw.hInstance = hInstance;

	RegisterClass(&Draw);

	HWND hwnd = CreateWindow(
		_T("DDraw"),           //上面注册的类名,要完全一致
		L"绘制",  //窗口标题文字
		WS_OVERLAPPEDWINDOW, //窗口外观样式
		38,             //窗口相对于父级的X坐标
		20,             //窗口相对于父级的Y坐标
		640,                //窗口的宽度
		480,                //窗口的高度
		NULL,               //没有父窗口,为NULL
		NULL,               //没有菜单,为NULL
		hInstance,          //当前应用程序的实例句柄
		NULL);              //没有附加数据,为NULL    

	// 显示窗口
	ShowWindow(hwnd, SW_SHOW);

	// 更新窗口
	UpdateWindow(hwnd);

	// 消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
}

// 消息处理函数的实现
LRESULT CALLBACK WindowProc(
	_In_  HWND hwnd,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam
	)
{
	switch (uMsg)
	{
	case WM_DESTROY:
	{
					   PostQuitMessage(0);
					   return 0;
	}
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

WinMain入口下创建窗口(只有新创建的窗口)(项目类型:windows应用程序)

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

LRESULT CALLBACK WindowProc(
	HWND hwnd,      // handle to window
	UINT uMsg,      // message identifier
	WPARAM wParam,  // first message parameter
	LPARAM lParam   // second message parameter
	);

int WINAPI WinMain(
	HINSTANCE hInstance,      // handle to current instance
	HINSTANCE hPrevInstance,  // handle to previous instance
	LPSTR lpCmdLine,          // command line
	int nCmdShow              // show state
	)
{
	WNDCLASS wndcls;
	wndcls.cbClsExtra = 0;
	wndcls.cbWndExtra = 0;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
	wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);
	wndcls.hInstance = hInstance;
	wndcls.lpfnWndProc = WindowProc;
	wndcls.lpszClassName = _T("Hello");
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&wndcls);

	HWND hwnd;
	hwnd = CreateWindow(_T("Hello"), L"World", WS_OVERLAPPEDWINDOW,
		0, 0, 600, 400, NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

// 消息处理函数的实现
LRESULT CALLBACK WindowProc(
	  HWND hwnd,
	  UINT uMsg,
	  WPARAM wParam,
	  LPARAM lParam
)
{
	switch (uMsg)
	{
	case WM_DESTROY:
	{
					   PostQuitMessage(0);
					   return 0;
	}
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 00:28:33

控制台下创建窗口和WinMain入口创建窗口简单程序的相关文章

走进windows编程的世界-----窗口的注册及创建

1   窗口注册和创建 1.1WIN32 窗口程序创建步骤 1.WinMain入口函数的定义 2.WindowProc函数的定义 3.注册窗口类 RegisterClass.RegisterClassEX 4.创建窗口 CreateWindow.CreateWindowEx HWND CreateWindow( LPCTSTRlpClassName,//指向已注册的窗口类的名称的指针 LPCTSTRlpWindowName,//指向窗口名称的指针 DWORDdwStyle,//窗口的风格 int

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

http://blog.csdn.net/luoshengyang/article/details/8223770 在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口.由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的.在本文中,我们就将详细分析Android应用程序窗口

windows 控制台下运行cl命令

前提:确保已经安装vc6或者vs系列 我们可以再命令行直接编译c++程序 在windows操作系统中,打开命令行,输入cl,若系统提示 'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件. 则说明VS没有安装或者环境变量设置不正确,可以按照如下步骤设置:1. 确保已经安装VS,并在控制台 中键入set    检查是否有类似如下格式的环境变量VSXXCOMNTOOLS VS90COMNTOOLS=D:\Program Files\Microsoft Visual Studio 9.0\C

Java Lab(1)控制台下的人物PK

一.前言 有这样一个念头很久了,从最早对编程感兴趣就是因为想实现一个类似于街霸.拳皇之类的程序.一路走过来,发现作为一个主业和编程毫无关系的人想学编程,真的是很费心很吃力,而在应用无比泛滥的今天,对于一个非编程工作的人,对我自己,在学习过程中也难免因为一个目标的难以实现而转去另外一个目标,更致命的是转换另外一种方法,另外一种学习语言.有限的时间,有限的精力,不断增长的年龄,都让自己觉得离每一次的目标越来越远.我很清楚自己的缺点:懒于坚持.这点很难改善,需要时间加之以形成习惯.从目标来说,更理想的

eclipse控制台下实现jdbc简单的增删改查测试

1.现在MySQL中创建一个表 2.首先创建一个类 //导入的包 import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet; public class DBTil { } 3.然后实例化各个对象 1 //username和password是连接数据库的用户名和密码 2 private static String usern

创建一个android项目与创建一个android虚拟设备

创建一个android项目 Navigator面板区点击右键-->New-->Android Application Project,打开New Android Applicaton窗口.输入Application Name(应用程序的名称,就是显示在手机上的名称,比如:微信),Project Name(项目名称,一般显示在eclipse上的项目名称),Package Name(指定它的java包名,比如:com.qq.weixin).Minimum Required SDK表示运行应用程序所

MySQL在创建数据表的时候创建索引

转载:http://www.baike369.com/content/?id=5478 MySQL在创建数据表的时候创建索引 在MySQL中创建表的时候,可以直接创建索引.基本的语法格式如下: CREATE TABLE 表名(字段名 数据类型 [完整性约束条件], [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名](字段名1 [(长度)] [ASC | DESC]) ); UNIQUE:可选.表示索引为唯一性索引. FULLTEXT:可选.表示索引为全

SharePoint 创建列表并使用Windows Presentation Foundation应用程序管理列表

SharePoint创建列表并使用程序管理列表 列表是SharePoint开发人员输入数据的方式之一.使用Web界面创建一个列表并添加一些数据,步骤如下: 1. 打开站点. 2. 点击所有网站内容. 3. 点击创建. 4. 选择自定义列表,命名Customers,并输入描述.选中在快速启动导航显示,点击创建. 这将创建一个自定义列表.接下来我们添加三个栏:Region/Size/Sales. 1. 点击功能区创建栏按钮,命名Region,选择"选项"类型.增加四个选项:East/Wes

Azure技术08-虚拟机-创建高性能存储,并创建DS系列虚拟机

在使用Azure虚拟机过程中,不免遇到一些应用对磁盘IOPS要求非常高,针对高IOPS要求的应用,我们在以前只能通过Windows系统层面创建RAID的方式来提升磁盘性能,其实Azure高级存储Premium Storage在今年上半年就已经正式向广大用户推出,亮点在于Premium Storage服务采用SSD,并能够带来最高32TB存储容量以及每个VM高达64000 IOPS(即每秒IO操作次数). 在Azure Portal上现在是不支持图形化界面来创建Premium Storage的,所