您的位置:首页 > 编程语言

win32编程day03 学习笔记

2012-08-11 19:33 387 查看
一 窗口注册和创建

1 Win32窗口程序创建步骤

1.1 WinMain入口函数的定义
1.2 WindowProc函数的定义
1.3 注册窗口类
RegisterClass/RegisterClassEx
1.4 创建窗口
CreateWindow/CreateWindowEx
1.5 窗口的显示和刷新
ShowWindow/UpdateWindow
1.6 消息处理
GetMessage/DispatchMessage
1.7 窗口退出
WM_DESTROY/PostQuitMessage

2 窗口的注册

2.1 窗口类的分类
2.1.1 系统全局的窗口类.比如按钮("BUTTON")、文本编辑框("EDIT")等。
2.1.2 应用程序的全局窗口类。可以在一个应用程序中EXE、DLL等所有模块中使用的窗口类。
2.1.3 局部窗口类。只能在本模块中使用的窗口类。

2.2 实现窗口类的注册
2.2.1 系统全局的窗口类,无需注册直接使用。使用CreateWindow函数,在CLASSNAME中指定系统已经定义好的窗口类型名称即可。

View Code

// WinCreate.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

HINSTANCE g_hInst = NULL;
// 父窗口的处理函数
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
//子窗口的处理函数
LRESULT CALLBACK ChildProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
//消息处理函数
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
DispatchMessage( &msg );
}
}
//显示窗口
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
//创建窗口
HWND CreateWnd( LPSTR pszClassName,
DWORD nStyle,
HWND  hParent )
{
HWND hWnd = CreateWindowEx(
0,
pszClassName,
"MyWnd",
nStyle,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hParent,NULL,g_hInst,NULL );
return hWnd;
}
//注册窗口
BOOL RegisterWnd( LPSTR      pszClassName,
WNDPROC proc,
int     nBrush )
{
WNDCLASSEX wce = { 0 };
wce.cbSize      = sizeof( wce );
wce.style       = CS_HREDRAW|CS_VREDRAW;
wce.cbClsExtra  = 0;
wce.cbWndExtra  = 0;
wce.lpfnWndProc = proc;
wce.hIcon        = NULL;
wce.hCursor     = NULL;
wce.hbrBackground = HBRUSH( nBrush );
wce.hInstance     = g_hInst;
wce.lpszClassName = pszClassName;
wce.lpszMenuName  = NULL;
wce.hIconSm       = NULL;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
g_hInst = hInstance;
//注册父窗口类
RegisterWnd( "MyWnd", WndProc,
COLOR_BTNFACE+1 );
//注册子窗口类
RegisterWnd( "Child", ChildProc,
COLOR_WINDOW );
//创建父窗口
HWND hWnd = CreateWnd( "MyWnd",
WS_OVERLAPPEDWINDOW, NULL );
//创建子窗口
HWND hChild1 = CreateWnd( "Child",
WS_CHILD|WS_VISIBLE|WS_BORDER|
WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|
WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
hWnd );
HWND hChild2 = CreateWnd( "Child",
WS_POPUP|WS_VISIBLE|
WS_THICKFRAME|WS_CAPTION|WS_SYSMENU,
hWnd );
HWND hChild3 = CreateWnd( "Child",
WS_CHILD|WS_VISIBLE|WS_BORDER,
hWnd );
//移动窗口位置
MoveWindow( hChild1, 100, 100,
200, 200, TRUE );
MoveWindow( hChild2, 100, 200,
200, 200, TRUE );
MoveWindow( hChild3, 100, 300,
200, 200, TRUE );
//显示父窗口
DisplayWnd( hWnd );
Message( );
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: