利用windows API 进行窗口编程

Windows窗口是如何产生的?
	Windows窗口到底是如何创建的.脱离了一些IDE开发环境,脱离了应用程序创建向导,我们改如何创建windows视窗程序呢?他到到底是如何产生的?带着这些疑问,我们开始一个一个的了解.
在windows下创建窗口分五步:

	a.      创建窗口的消息处理函数(消息处理回调函数)
	b.      定义窗口入口函数
	c.      注册窗口类
	d.      创建窗口,
	e.      更新显示窗口
	f.       消息循环(循环对窗口的消息队里中的消息做处理)

	1. 首先我们要定义窗口程序入口函数WinMain,函数原型如下
	int WINAPI WinMain(
	HINSTANCE hInstance,     // 当前应用程序的实例句柄
	HINSTANCE hPrevInstance, // 前一应用程序的实例句柄
	LPSTR lpCmdLine,         // 命令行参数
	int nCmdShow              // 窗口一何种方式来显示,也就是显示状态
	);
2,定义窗口消息处理函数
	LRESULT DefWindowProc(
	HWND hWnd,      // handle to window
	UINT Msg,       // message identifier
	WPARAM wParam,  // first message parameter
	LPARAM lParam   // second message parameter
	);
3,注册窗口类
	ATOM RegisterClass(
	CONST WNDCLASS *lpWndClass  // class data
	);
4,创建窗口
	HWND CreateWindow(
	LPCTSTR lpClassName,  // registered class name
	LPCTSTR lpWindowName, // window name
	DWORD dwStyle,        // window style
	int x,                // horizontal position of window
	int y,                // vertical position of window
	int nWidth,           // window width
	int nHeight,          // window height
	HWND hWndParent,      // handle to parent or owner window
	HMENU hMenu,          // menu handle or child identifier
	HINSTANCE hInstance,  // handle to application instance
	LPVOID lpParam        // window-creation data
	);
5,更新显示窗口
	BOOL UpdateWindow(
	HWND hWnd   // handle to window
	);
BOOL ShowWindow(
	HWND hWnd,     // handle to window
	int nCmdShow   // show state
	);
6,消息循环,不断从窗口的消息队列中取出消息,进行处理,直到程序要退出时,才结束循环
	BOOL GetMessage(
	LPMSG lpMsg,         // message information
	HWND hWnd,           // handle to window
	UINT wMsgFilterMin,  // first message
	UINT wMsgFilterMax   // last message
	);


 //下边是一个创建窗口的实例

#include "windows.h"

HINSTANCE g_hInstance=NULL;
BOOL Register(LPWSTR pszClassName);
HWND Create(LPWSTR pszClassName,LPWSTR pszWndName);
VOID  Display(HWND hWnd);
VOID MessageLoop();
/************************************************************************/
/* 窗口消息处理函数(此函数为回调函数)                       */
/************************************************************************/
LRESULT CALLBACK WindowsProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
	switch( nMsg )
	{
		case WM_SYSCOMMAND:  //收到的消息为关闭窗口的消息,则使用PostQuitMessage函数发送消息,是消息循环结束,程序退出.
			if( SC_CLOSE == wParam )
			{
				PostQuitMessage( 0 );
			}
			break;
	}
	return DefWindowProc(hWnd,nMsg,wParam,lParam);
}

/************************************************************************/
/* 程序入口函数,由操作系统来调用                                        */
/************************************************************************/
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR pszCmd,int nShowCmd)
{
	g_hInstance=hInstance;	
	Register(L"MyClass");  //注册窗口类
	HWND hWnd=Create(L"MyClass",L"一步一步利用Windows API创建出来的windows窗口"); //创建窗口
	Display(hWnd);  //更新并显示窗口
	MessageLoop();  //进入消息循环,直到收到	PostQuitMessage(0)函数发来的消息,GetMessage函数才会返回False,程序会立即返回并且结束;
	return 0;
}

/************************************************************************/
/* 注册窗口类                                                         */
/************************************************************************/
BOOL Register(LPWSTR pszClassName)
{
	WNDCLASSEX wce = { 0 };
	wce.cbSize        = sizeof( wce );
	wce.style         = CS_HREDRAW|CS_VREDRAW;
	wce.lpfnWndProc   = WindowsProc;
	wce.hIcon         = NULL;
	wce.hCursor       = NULL;
	wce.hIconSm       = NULL;
	wce.hbrBackground = (HBRUSH)(COLOR_WINDOW);
	wce.hInstance     = g_hInstance;
	wce.cbClsExtra    = 100;
	wce.cbWndExtra    = 100;
	wce.lpszMenuName  = NULL;
	wce.lpszClassName = pszClassName;
	ATOM nAtom = RegisterClassEx( &wce );
	if( 0 == nAtom ){return FALSE;}
	return TRUE;
}
/************************************************************************/
/* 创建窗口                                                             */
/************************************************************************/
HWND Create(LPWSTR pszClassName,LPWSTR pszWndName)
{
	HWND hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, 
		pszClassName, pszWndName,
		WS_OVERLAPPEDWINDOW, 
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, g_hInstance, NULL );
	return hWnd;
}
/************************************************************************/
/* 更新并显示窗口                                                        */
/************************************************************************/
VOID  Display(HWND hWnd)
{
	UpdateWindow(hWnd);
	ShowWindow(hWnd,SW_SHOW);
}
/************************************************************************/
/* 消息循环(循环处理消息)                                              */
/************************************************************************/
VOID MessageLoop()
{
	MSG msg={0};
	while(GetMessage(&msg,NULL,0,0))
	{
		DispatchMessage(&msg);
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 Win32 API概论…………………………………………………………………………1 1.1 为什么使用Win32 API …………………………………………………………………1 1.2 Win32 API简介 …………………………………………………………………………1 1.3 综述………………………………………………………………………………………11 第二章 窗口管理函数(Windows Control Function) ……………………………………13 2.1 易用特性函数(Accessibility Features)…………………………………………13 2.2 按钮函数(Button)……………………………………………………………………20 2.3 插入标记(^)函数(Caret)…………………………………………………………21 2.4 组合框函数(Combo box) ……………………………………………………………24 2.5 通用对话框函数(Common Dialog Box) ……………………………………………25 2.6 标函数(Cursor)………………………………………………………………………36 2.7 对话框函数(Dialog Box)……………………………………………………………40 2.8 编辑控制函数(Edit Control)………………………………………………………54 2.9 图标函数(Icon)………………………………………………………………………54 2.10 键盘加速器函数(Keyboard Accelerator)……………………………………… 61 2.11 键盘输入函数(Keyboard InPut) …………………………………………………63 2.12 列表框函数(List box) ……………………………………………………………75 2.13 菜单函数(Menu) ……………………………………………………………………76 2.14 消息和消息队列函数(Message and Message Queue)……………………………90 2.15 鼠标输入函数(Mouse Input) ……………………………………………………100 2.16 多文档接口函数(Multiple Document Interface) ……………………………103 2.17 资源函数(Resource)………………………………………………………………105 2.18 滚动条函数(Scroll Bar)…………………………………………………………113 2.19 窗口函数(Window)…………………………………………………………………119 2.20 窗口类函数(Window Class)………………………………………………………144 2.21 窗口过程函数(Window Procedure)………………………………………………150 2.22 窗口属性函数(Window Property) ………………………………………………152 第三章 图形设备接口函数(Graphic Device Interface Function) …………………155 3.1 位图函数(Bitmap) …………………………………………………………………155 3.2 笔刷函数(Brush)……………………………………………………………………171 3.3 剪切函数(Clipping) ………………………………………………………………176 3.4 颜色函数(Color)……………………………………………………………………179 3.5 坐标空间与变换函数(Coordinate Space Transformation)……………………186 3.6 设备环境函数(Device Context) …………………………………………………195 3.7 填充形态函数(Filled shape) ……………………………………………………211 3.8 字体和正文函数(Font and Text)…………………………………………………215 3.9 ICM 2.0函数 …………………………………………………………………………238 3.10 线段和曲线函数(Line and Curve)………………………………………………295 3.11 图元文件函数(Metafile)……………………………………………
Windows窗口编程是指在Windows操作系统上进行图形界面编程的技术。它使用Windows API(应用程序编程接口)来创建和管理窗口、对话框、控件等,使程序能够在Windows桌面上以图形化的方式展示。 在Windows窗口编程中,首先需要创建一个主窗口。使用Windows API的相关函数,我们可以指定主窗口的位置、大小、样式等属性。之后,可以向主窗口中添加各种控件,如按钮、文本框、标签等,以实现与用户的交互。每个控件都有自己的属性和事件,可以通过处理这些事件来实现相应的功能。 在编写程序时,可以使用C++、C#、VB.NET等编程语言来进行Windows窗口编程。其中,使用MFC(Microsoft Foundation Classes)和WinForms等框架可以极大地简化窗口和控件的创建和管理过程。同时,还可以利用一些第三方UI库,如Qt、WPF等,来快速创建复杂的Windows应用程序。 通过Windows窗口编程,我们可以创建各种类型的应用程序,如文本编辑器、图形界面工具、媒体播放器等。同时,还可以利用Windows窗口编程实现一些专业化的应用,如科学计算、数据可视化等。 总之,Windows窗口编程是一种强大的技术,它使得开发者能够创建功能丰富、用户友好的Windows应用程序。随着Windows操作系统的不断更新和发展,Windows窗口编程也在不断演进,为开发者带来更多的可能性和便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值