win32案例程序

典型案例程序

// Win32消息.cpp : 定义应用程序的入口点。


#include "stdafx.h"
#include "WinMenu.h"
#include "stdio.h"



HINSTANCE g_hInstance = 0;//接收应用程序实例句柄
HANDLE g_hOutput = 0;
#define MAX_LOADSTRING 100


void OnPaint(HWND hWnd)
{
	char *pszText = "WM_PAINT\n";
	WriteConsole(g_hOutput, pszText, strlen(pszText), NULL, NULL);


}
//创建主窗口
HWND CreateMain(LPCSTR lpClassName, LPCSTR lpWndName)
{
	HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, g_hInstance, "hello data"
		);
	return hWnd;
}

//显示窗口
void Display(HWND hWnd)
{
	ShowWindow(hWnd, SW_SHOW);
	UpdateWindow(hWnd);
}

//消息循环
void Message()
{
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, NULL, 0, 0))
	{
		TranslateMessage(&nMsg);
		DispatchMessage(&nMsg);

	}
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{

	case WM_PAINT:
		OnPaint(hWnd);
		break;
	case WM_DESTROY:
		//PostQuitMessage(0);
		SendMessage(hWnd, WM_QUIT, 0, 0);
		break;
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);//该函数是默认处理函数,如果没有上面自己定义的消息,其他消息就会被该函数默认处理
}

void Register(LPSTR lpClassName, WNDPROC wndproc)
{
	WNDCLASSEX wce = { 0 };
	wce.cbSize = sizeof(wce);
	wce.cbClsExtra = 0;
	wce.cbWndExtra = 0;
	wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wce.hCursor = NULL;
	wce.hIcon = NULL;
	wce.hIconSm = NULL;
	wce.hInstance = g_hInstance;
	wce.lpfnWndProc = wndproc;//窗口处理函数
	wce.lpszClassName = lpClassName;
	wce.lpszMenuName = NULL;
	wce.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClassEx(&wce);
}


int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	AllocConsole();//增加一个附带的DOS窗口
	g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	g_hInstance = hIns;
	Register(_T("Main"), WndProc);
	HWND hWnd = CreateMain(_T("Main"), _T("window"));
	Display(hWnd);
	Message();
	return 0;
}


典型案例程序二

#include "stdafx.h"
#include "WinHello.h"

//处理窗口绘制消息(WM_PAINT)
void OnPaint(HWND hWnd)
{
	PAINTSTRUCT ps;//获取设备上下文句柄
	HDC hDC = BeginPaint(hWnd, &ps);
	RECT rcClient;//获取窗口客户区矩形
	GetClientRect(hWnd, &rcClient);
	
	//在窗口客户区内显示文本
	DrawText(hDC, _T("hello world"), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	EndPaint(hWnd, &ps);//释放设备上下文

}

//主窗口过程函数
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

	//对不同的消息做不同的处理
	switch (uMsg)
	{
	case WM_PAINT://窗口绘制消息
		OnPaint(hWnd);
		return 0;
	case WM_DESTROY://窗口销毁消息
		PostQuitMessage(0);//发送WM_QUIT消息
		return 0;
	}

	//对不感兴趣的消息交给缺省窗口过程函数处理
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

//注册窗口类
ATOM InitApplication(HINSTANCE hInstance)
{
	WNDCLASS wc = { 0 };
	wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类风格
	wc.lpfnWndProc = MainWndProc;//窗口过程函数指针
	wc.cbClsExtra = 0;//窗口类附加数据字节数
	wc.cbWndExtra = 0;//窗口附加数据字节数
	wc.hInstance = hInstance;//应用程序实例句柄
	wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);//窗口图标句柄
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口光标句柄
	wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);//窗口背景句柄
	wc.lpszMenuName = NULL;//窗口菜单资源名
	wc.lpszClassName = _T("MAIN");//窗口类型
	return RegisterClass(&wc);//将wc结构存入内核

}

//创建、显示、并刷新窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	//创建窗口
	HWND hWnd=CreateWindow(
		_T("MAIN"),//窗口类名
		_T("WinHello"),//窗口标题
		WS_OVERLAPPEDWINDOW,//窗口风格
		CW_USEDEFAULT,//窗口左上角水平坐标
		CW_USEDEFAULT,//窗口左上角垂直坐标
		CW_USEDEFAULT,//窗口宽度
		CW_USEDEFAULT,//窗口高度
		NULL,//父窗口句柄
		NULL,//菜单句柄
		hInstance,//应用,程序实例句柄
		NULL//额外数据
		);
	if (!hWnd)
	{
		return FALSE;
	}

	//显示窗口
	ShowWindow(hWnd, nCmdShow);

	//刷新窗口
	UpdateWindow(hWnd);
	return TRUE;

}

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{
	//注册窗口类
	if (!InitApplication(hInstance))
	{
		return 0;
	}
	//创建、显示并刷新窗口
	if (!InitInstance(hInstance, nCmdShow))
	{
		return 0;
	}
	//消息泵(消息循环)
	MSG msg = { 0 };
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);//翻译消息(处理大小写锁、shift键 是否打开)
		DispatchMessage(&msg);//派发消息
	}
	return 0;



	return 0;
}

创建编辑窗口,向DOS窗口输出内容

// WinHello.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "Win32Project1.h"
#include "stdio.h"

HINSTANCE g_hInstance = 0;//接收应用程序实例句柄
HANDLE g_hOutput = 0;//接收标准输出句柄
HWND g_hEdit = 0;


void OnCreate(HWND hWnd, LPARAM lParam)
{
	CREATESTRUCT *pcs = (CREATESTRUCT*)lParam;
	char * pszText = (char*)pcs->lpCreateParams;
	//MessageBox(hWnd,pszText,"Infor",MB_OK);
	 g_hEdit=CreateWindowEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T("HELLO"),
		WS_CHILD | WS_VISIBLE | WS_BORDER,
		0, 0, 200, 200, hWnd, NULL,
		g_hInstance,
		NULL
		);

}

void OnSize(HWND hWnd, LPARAM lParam)
{
	int nWidth = LOWORD(lParam);
	int nHeight = HIWORD(lParam);
	char szText[256] = { 0 };
	sprintf(szText, "宽:%d,高:%d\n", nWidth, nHeight);
	WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
	MoveWindow(g_hEdit, 0, 0, nWidth, nHeight, TRUE);
}

//处理窗口绘制消息(WM_PAINT)
void OnPaint(HWND hWnd)
{
	PAINTSTRUCT ps;//获取设备上下文句柄
	HDC hDC = BeginPaint(hWnd, &ps);
	RECT rcClient;//获取窗口客户区矩形
	GetClientRect(hWnd, &rcClient);

	//在窗口客户区内显示文本
	DrawText(hDC, _T("hello world"), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	EndPaint(hWnd, &ps);//释放设备上下文

}
HWND CreateMain(LPCTSTR lpClassName,LPCTSTR lpWndName)
{
	HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, g_hInstance, _T("hello data")
		);
		
		
	return hWnd;
		
}

//显示窗口
void Display(HWND hWnd)
{
	ShowWindow(hWnd, SW_SHOW);
	UpdateWindow(hWnd);
}

//消息循环
void Message()
{
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, NULL, 0, 0))
	{
		TranslateMessage(&nMsg);
		DispatchMessage(&nMsg);
	}
}


//主窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

	//对不同的消息做不同的处理
	switch (uMsg)
	{
	case WM_SIZE:
		OnSize(hWnd,lParam);
		break;
	case WM_CREATE://窗口绘制消息
		OnCreate(hWnd,lParam);
		break;
	case WM_SYSCOMMAND:
		if (wParam == SC_CLOSE)
		{
			int nRet = MessageBox(hWnd, _T("是否退出"), _T("Infor"), MB_YESNO);

			if (nRet == IDYES)
			{

			}
			else
			{
				return 0;
			}
		}
		break;
	case WM_DESTROY://窗口销毁消息
		PostQuitMessage(0);//发送WM_QUIT消息
		break;
	}

	//对不感兴趣的消息交给缺省窗口过程函数处理
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}


//注册窗口类
void Register(LPCTSTR lpClassName, WNDPROC wndproc)
{
	WNDCLASSEX wce = { 0 };
	wce.cbSize = sizeof(wce);
	wce.cbClsExtra = 0;
	wce.cbWndExtra = 0;
	wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wce.hCursor = NULL;
	wce.hIcon = NULL;
	wce.hIconSm = NULL;
	wce.hInstance = g_hInstance;
	wce.lpfnWndProc = wndproc;
	wce.lpszClassName = lpClassName;
	wce.lpszMenuName = NULL;
	wce.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClassEx(&wce);


}



int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPWSTR    lpCmdLine,
	_In_ int       nCmdShow)
{

	AllocConsole();//添加DOS窗口,用cmd窗口输出创建的窗口信息
	g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	g_hInstance = hInstance;
	Register(_T("Main"), WndProc);
	HWND hWnd = CreateMain(_T("Main"), _T("window"));//创建窗口
	Display(hWnd);//显示窗口
	Message();//消息循环
	return 0;

}
posted @ 2016-10-19 21:36  呉语伦比  阅读(222)  评论(0编辑  收藏  举报