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

来源:互联网 发布:ios算法面试题 编辑:程序博客网 时间:2024/05/13 12:54
/***************关于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;}

原创粉丝点击