windows程序设计--窗口与消息

/***************
关于windows的窗口与消息
窗口与消息.cpp : 定义应用程序的入口点。

理解---窗口
窗口依据窗口类来创建,窗口类表示用来处理传递给窗口的消息的窗口过程

windows程序步骤固定:定义窗口--->注册窗口--->创造窗口---->显示更新窗口--->消息循环

关于定义窗口:
  window封装好了一种数据结构来定义窗口,这就是WNDCLASS,在MSDN里面可以看到这种数据结构
  typedef struct _WNDCLASS { 
    UINT       style;              窗口风格
    WNDPROC    lpfnWndProc;        窗口过程函数
    int        cbClsExtra;         额外class 
    int        cbWndExtra;         额外窗口
    HINSTANCE  hInstance;          实例句柄
    HICON      hIcon;              图标
    HCURSOR    hCursor;            光标
    HBRUSH     hbrBackground;      背景
    LPCTSTR    lpszMenuName;       菜单名
    LPCTSTR    lpszClassName;      窗口类名
} WNDCLASS, *PWNDCLASS; 
在定义窗口时,可以根据自己的喜好或者默认值进行设定

注册窗口:
   调用Window的API函数RegisterClass,在这儿,如果注册不成功就弹出一个消息
   关于MessageBox---弹出消息
       int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

创建窗口:
   调用window的API  CreateWindow()

显示和更新窗口:
   ShowWindow(hwnd,nCmdShow);
   UpdateWindow(hwnd);

消息循环:
while (GetMessage(&msg, NULL, 0, 0))//获取消息
	{
		TranslateMessage(&msg);//翻译键盘消息
		DispatchMessage(&msg);//将消息发送给窗口过程
	}

关于几个句柄
hinstance   实例句柄
hdc         设备环境句柄
hwnd        窗口句柄

关于头文件的说明
PlaySound(),需要头文件和动态链接库
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")

****************/

#include "stdafx.h"
#include "窗口与消息.h"
#include<windows.h>
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")

static TCHAR szAppName[]=TEXT("HelloWindows");
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	PSTR    lpCmdLine,
	int       nCmdShow)
{
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;

	wndclass.style=CS_HREDRAW|CS_VREDRAW;
	wndclass.cbClsExtra=0;
	wndclass.cbWndExtra=0;
	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
	wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wndclass.hInstance=hInstance;
	wndclass.lpfnWndProc=WndProc;
	wndclass.lpszClassName=szAppName;
	wndclass.lpszMenuName=NULL;

	if(!RegisterClass(&wndclass))
	{
		MessageBox(NULL,TEXT("注册失败"),szAppName,MB_OKCANCEL);
		return 0;
	}

	hwnd = CreateWindow(szAppName, TEXT("Hello Window"), WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
	// 执行应用程序初始化:

	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);
	// 主消息循环:
	while (GetMessage(&msg, NULL, 0, 0))//在这儿有一个消息队列
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return (int) msg.wParam;
}

//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND	- 处理应用程序菜单
//  WM_PAINT	- 绘制主窗口
//  WM_DESTROY	- 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;

	switch (message)
	{
	case WM_CREATE:
		PlaySound(TEXT("tianzhang.wav"),NULL,SND_FILENAME|SND_ASYNC);//播放声音文件
		MessageBox(NULL,TEXT("创建了一个窗口"),szAppName,MB_OK);
		break;
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);//窗口绘制的开始
		// TODO: 在此添加任意绘图代码...
		GetClientRect(hwnd,&rect);//获取窗口客户区的尺寸
		DrawText(hdc,TEXT("hello windows"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//显示一个文本字符串
		EndPaint(hwnd, &ps);//窗口绘制的结束
		break;
	case WM_DESTROY:
		PostQuitMessage(0);//将退出消息加入消息队列
		break;
	default:
		return DefWindowProc(hwnd, message, wParam, lParam);//默认消息处理
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值