Windows程序设计学习笔记一——第一个windows窗口
2017-07-13 10:29
501 查看
初次接触Windows程序开发的知识,没有花费太多的精力去理解整个过程的实现原理,先着重于功能的实现,这样对我自己而言,增强了学习的兴趣。整个学习将对《Windows程序设计》第5版中所给的源代码进行理解和重现,并添加一些自己的理解与整理。
在对基本功能实现的熟练掌握的基础上,会进一步加强相关原理内容的学习。
第一篇,对应第三章内容 视窗和讯息
学习目标:1、掌握建立一个Windows窗口的基本实现流程
2、了解涉及到的相关函数的功能,学会查找对应函数的说明(Windows API等)
3、可以相对独立的完成代码的编写,并记忆整个流程
学习总结:
一、建立一个Windows窗口的基本实现流程
1、理解入口函数的各个参数意义int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int iCmdShow){}
hinstance:应用程序当前事例的句柄。
hPrelnstance:应用程序的前事例的句柄。对于一个32的位程序,该参数总为NULL。
lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参看GetCommandLine。
iCmdShow:指明窗口如何显示。
2、初始化窗口类别属性
实例化WNDCLASS的对象,并将WNDCLASS数据结构中的各个元素分别初始化,每一个都必须要初始化,共有10个。
(当某一个没有被初始化,运行结果可以编译成功,但是不会出现窗口界面,笔者曾经初始化了两次wndclass.lpszMenuName,但是没有初始化
wndclass.lpszClassName,结果不显示窗口,找了好久才发现这个问题,改过来就可以运行了)
3、注释视窗类别RegisterClass(&wnd);
呼叫 RegisterClass 来注册这个视窗类别。该函式只有一个参数,即指向 WNDCLASS 结构的指针
4、建立视窗CreateWindow()
函数原型为HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,
DWORD dwStyle,
int x,int y,int nWidth,int nHeight,
HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);
具体参数请自己查找
5、显示视窗、更新视窗
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
6、讯息回圈
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
通过以上代码,GetMessage()获得消息信号,TranslateMessage()将消息信号 进行一些转换,DispatchMessage()将信息传给Windows,然後,Windows
将该讯息发送给适当的视窗讯息处理程式,让它进行处理。
7、窗口建立完成,返回msg.wParam参数。
二、视窗消息处理函数
1、视窗处理函数原型
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
2、声明数据结构数据需要的结构数据和变量
本次 实现在视窗内显示一行文字,需要以下数据结构
HDC hdc ; //装置内容的数据结构
PAINTSTRUCT ps ; //
RECT rect;
//矩形数据结构,存储文本框大小
3、对应消息下的消息处理操作
switch(message){
case WM_CREATE
case WM_PAINT:
{
1、呼叫BeginPaint()获得装置内容的代号
2、呼叫GetClientRectangle()获得设置区域的尺寸大小
3、DrawText()显示要输出的内容和格式
4、呼叫EndPaint()结束,与BeginPaint()必须成对出现
}
case WM_DESTROY
}
随着学习内容的深入,处理函数会越来越复杂,是学习的终点和难点,还会有其他信息加入
4、缺省的信息处理
函数原型DefWindowProc(HWND,UINT,WPARAM,LPARAM);确保任何信息都可以被处理,并返回一个值
三、完整代码
/*------------------------------------------------------------
hellowin.cpp文件
------------------------------------------------------------*/
#include <windows.h>
在对基本功能实现的熟练掌握的基础上,会进一步加强相关原理内容的学习。
第一篇,对应第三章内容 视窗和讯息
学习目标:1、掌握建立一个Windows窗口的基本实现流程
2、了解涉及到的相关函数的功能,学会查找对应函数的说明(Windows API等)
3、可以相对独立的完成代码的编写,并记忆整个流程
学习总结:
一、建立一个Windows窗口的基本实现流程
1、理解入口函数的各个参数意义int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int iCmdShow){}
hinstance:应用程序当前事例的句柄。
hPrelnstance:应用程序的前事例的句柄。对于一个32的位程序,该参数总为NULL。
lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参看GetCommandLine。
iCmdShow:指明窗口如何显示。
2、初始化窗口类别属性
实例化WNDCLASS的对象,并将WNDCLASS数据结构中的各个元素分别初始化,每一个都必须要初始化,共有10个。
(当某一个没有被初始化,运行结果可以编译成功,但是不会出现窗口界面,笔者曾经初始化了两次wndclass.lpszMenuName,但是没有初始化
wndclass.lpszClassName,结果不显示窗口,找了好久才发现这个问题,改过来就可以运行了)
3、注释视窗类别RegisterClass(&wnd);
呼叫 RegisterClass 来注册这个视窗类别。该函式只有一个参数,即指向 WNDCLASS 结构的指针
4、建立视窗CreateWindow()
函数原型为HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,
DWORD dwStyle,
int x,int y,int nWidth,int nHeight,
HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);
具体参数请自己查找
5、显示视窗、更新视窗
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
6、讯息回圈
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
通过以上代码,GetMessage()获得消息信号,TranslateMessage()将消息信号 进行一些转换,DispatchMessage()将信息传给Windows,然後,Windows
将该讯息发送给适当的视窗讯息处理程式,让它进行处理。
7、窗口建立完成,返回msg.wParam参数。
二、视窗消息处理函数
1、视窗处理函数原型
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
2、声明数据结构数据需要的结构数据和变量
本次 实现在视窗内显示一行文字,需要以下数据结构
HDC hdc ; //装置内容的数据结构
PAINTSTRUCT ps ; //
RECT rect;
//矩形数据结构,存储文本框大小
3、对应消息下的消息处理操作
switch(message){
case WM_CREATE
case WM_PAINT:
{
1、呼叫BeginPaint()获得装置内容的代号
2、呼叫GetClientRectangle()获得设置区域的尺寸大小
3、DrawText()显示要输出的内容和格式
4、呼叫EndPaint()结束,与BeginPaint()必须成对出现
}
case WM_DESTROY
}
随着学习内容的深入,处理函数会越来越复杂,是学习的终点和难点,还会有其他信息加入
4、缺省的信息处理
函数原型DefWindowProc(HWND,UINT,WPARAM,LPARAM);确保任何信息都可以被处理,并返回一个值
三、完整代码
/*------------------------------------------------------------
hellowin.cpp文件
------------------------------------------------------------*/
#include <windows.h>
#include "mmsystem.h" //导入声音头文件 #pragma comment(lib,"winmm.lib") //导入声音头文件库 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Hello") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; /*窗口属性配置*/ wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // window class name TEXT ("The Hello Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parameters ShowWindow (hwnd, iCmdShow) ; // UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } 4000 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; //播放"hellowin.asv"声音文件 return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
相关文章推荐
- Windows程序设计学习笔记一:第一个窗口
- Windows 程序设计学习笔记(三):第一个窗口
- windows下32位汇编语言学习笔记 第四章 第一个窗口程序 (windows的消息机制)
- Windows程序设计学习笔记--第一个Windows程序以及宽字符集(了解)
- windows下32位汇编语言学习笔记 第四章 第一个窗口程序 1 (消息的使用和入口代码)
- Windows程序设计_Chap03_窗口与消息_学习笔记
- windows程序设计学习笔记-子窗口控件
- Windows 程序设计之 ------窗口和消息 学习总结
- Windows 程序设计学习笔记(一)
- SDL2.0 学习笔记-1 windows下的第一个测试程序
- 函数参数Windows程序设计_Chap01_起步_学习笔记
- Windows程序设计:第一个窗口
- Windows环境下32位汇编语言程序设计第三版学习笔记之一
- [学习笔记]Windows程序设计:第二章 UNICODE
- OpenGL学习笔记2013.4.10第一个OpenGL窗口
- windows程序设计第一章学习笔记
- 第一个windows程序(windows程序设计笔记)
- Java学习笔记-Java程序设计环境(Windows)
- [学习笔记]Windows窗口概念汇总(转载)
- Windows程序设计_Chap02_Unicode_学习笔记