走进windows编程的世界-----入门篇

1   Windows编程基础

1.1Win32应用程序基本类型

1)  控制台程序

不须要完好的windows窗体,能够使用DOS窗体方式显示

2)  Win32窗体程序

包括窗体的程序,能够通过窗体与程序进行交互

3)  Win32库程序

提供已有的代码,供其它程序使用

动态库(DLL):是在运行的时候能够载入的。

静态库(LIB):是在编译链接是使用的程序。成为当前程序的一部分。

1.2头文件和库

1.2.1头文件

主要的头文件windows.h包括了windows经常使用的定义等,其它,还包括了一些其它的头文件。比方:

1、  windef.h: 定义个中数据类型

2、  winbase.h:定义了kernel的相关函数

3、  wingdi.h:定义了画图和文件

4、  winuser.h:窗体及空间

5、  winnt.h:提供了Unicode的支持

1.2.2库

1、Kernel32.lib :提供进程线程内存等等API函数定义

2、User32.lib :窗体及界面的API函数

3、Gdi32.lib :提供画图、文字等API函数支持

1.1.1实例helloworld

开发环境VS2010。编译过程中可能会报错误,可能是编码的问题:须要进行一些配置的

设置:项目--属性---配置属性-常规:字符集  设置为未设置

/*File : helloworld.cpp
 *Auth : sjin
 *Date : 20140519
 *Mail : [email protected]
 */

#include <iostream>
#include <Windows.h>

int WINAPI WinMain(
                   HINSTANCE hInstance,       // handle to current instance
                   HINSTANCE hPrevInstance,      // handle to previous instance
                   LPSTR lpCmdLine,           // command line
                   int nCmdShow                    // show state
                   )
{

	MessageBox(NULL,"hello world..","first win32 test",MB_OK);
	return 0;
}

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ppbl8xMzE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

1.1编写第一个窗体程序

处理相关的流程例如以下:

1、窗体入口函数WinMain

2、窗体处理函数

3、注冊窗体类型

4、创建窗体

5、显示窗体

6、消息处理

7、程序退出

看以下的代码:

/*File : helloworld.cpp
 *Auth : sjin
 *Date : 20140519
 *Mail : [email protected]
 */

#include <iostream>
#include <Windows.h>

using namespace std;

HINSTANCE g_hInst = NULL;

//2窗体处理函数
/*函数功能:该函数是一个应用程序定义的函数。

它处理发送给窗体的消息
 *			当窗体处理消息消息时,系统调用该函数
 *參数:
 *hwnd:指向窗体的句柄。

*uMsg:指定消息类型。

*wParam:指定其余的、消息特定的信息。该參数的内容与UMsg參数值有关。
 *IParam:指定其余的、消息特定的信息。该參数的内容与uMsg參数值有关。

*/
LRESULT CALLBACK WndProc(HWND hwnd,/**/
				UINT nMsg,
				WPARAM wParam,
				LPARAM IParam)
{
	switch( nMsg ){
	case WM_DESTROY://窗体销毁的消息
		//发送消息退出函数
		PostQuitMessage(0);
		return 0;

	default:
		break;

	}

	//调用
	return DefWindowProc(hwnd,nMsg,wParam,IParam);
}

//3注冊窗体类型
/*
 *
 */
BOOL MyRegister( LPSTR pszClassName)
{
	WNDCLASS wc = {'\0'};

	wc.style          = CS_VREDRAW | CS_HREDRAW;
	wc.lpfnWndProc    = WndProc;
	wc.cbClsExtra	  = 0;
	wc.cbWndExtra     = 0;
	wc.hInstance      = g_hInst;
	wc.hIcon          = LoadIcon(g_hInst,MAKEINTRESOURCE(100));;
	wc.hCursor        = NULL;
	wc.hbrBackground  = (HBRUSH)(COLOR_BTNFACE);
	wc.lpszMenuName   = NULL;
	wc.lpszClassName  = pszClassName;

	ATOM natom = RegisterClass(&wc);

	if(0 == natom){
		MessageBox(NULL,"Register Failed","Error!",MB_OK | MB_ICONWARNING);
	}else{
		//MessageBox(NULL,"Register Successed","Successed!",MB_OK);
	}

	return TRUE;
}

//4 窗体创建

HWND myCreateWindow(LPSTR pszClassName)
{
	//创建窗体
	HWND hwnd =CreateWindow(pszClassName,
				"HelloWnd",
				WS_OVERLAPPEDWINDOW,
				100,
				100,
				300,
				500,
				NULL,
				NULL,
				g_hInst,
				NULL);

	if(0 == hwnd){
		MessageBox(NULL,"CreateWindow Failed","Error!",MB_OK | MB_ICONWARNING);
	}else{
		//MessageBox(NULL,"CreateWindow Successed","Successed!",MB_OK);
	}

	return hwnd;
}

//5 显示窗体
void Displaywnd(HWND hwnd)
{
	//显示
	ShowWindow(hwnd,SW_SHOW);

	//刷新
	UpdateWindow(hwnd);
}

//6 消息处理

void Message()
{
	MSG msg = {'\0'};
	//消息循环处理。获取消息
	while(GetMessage(&msg,NULL,0,0)){
		//派发消息
		DispatchMessage(&msg);/*会运行窗体处理函数*/
	}

}

//1、入口函数
int WINAPI WinMain(
                   HINSTANCE hInstance,       // handle to current instance
                   HINSTANCE hPrevInstance,      // handle to previous instance
                   LPSTR lpCmdLine,           // command line
                   int nCmdShow                    // show state
                   )
{

	g_hInst = hInstance;

	//注冊窗体类型
	MyRegister("my first win32");
	//常见注冊类型的窗体
	HWND hwnd = myCreateWindow("my first win32");
	//显示窗体
	Displaywnd(hwnd);
	//消息处理
	Message();

	return 0;
}

资源文件

/*File : helloworld.rc
 *Auth : sjin
 *Date : 20140519
 *Mail : [email protected]
 */

100 ICON "2222.ico"

图片例如以下:

时间: 2024-10-16 22:28:49

走进windows编程的世界-----入门篇的相关文章

走进windows编程的世界-----windows进程

Windows进程  1 Windows进程    进程是一个容器,包含了一个应用程序实例的各种资源.Windows多任务的操作系统,因此可以同时执行多个进程.      2 Windows进程的一些特点    2.1 进程中包含了执行代码等资源.    2.2 进程都具有私有的地址空间.    2.3 每个进程都有一个ID,标识进程.    2.4 每个进程都有自己的安全属性    2.5 至少要包含一个可以执行的线程.    二 进程的环境 1 环境信息的获取    获取:    LPVOI

走进windows编程的世界-----消息处理函数(1)

Win32消息机制 过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序 继续执行,直至程序结束. 事件驱动:程序的执行顺序是无序的.某个时间点所执行的代码,是由外界 通知.由于我们无法决定程序执行顺序.所以代码的执行也是无序的. Win32基本消息 WM_DESTROY:       窗口销毁时的消息,可以做退出或善后处理 WM_CREATE:       窗口创建消息,是在窗口创建后,窗口处理函数收到的第一条消息   可以在这个消息内,做初始化或者穿件子窗口

走进windows编程的世界-----字符编码

1   字符编码 1.1编码的历史 1.1.1ASCII码 0=127 7位表示 1.1.2ASCII扩展码 0-255 8为表示. 代码页:通过代码也来切换对应的字符(数字表示) 1.1.3双字节字符集DBCS 使用一个或两个字节表示字符. 1.1.4Unicode编码 全部使用2个字节表示字符 内存 硬盘等资源占用变大.对编码支持度大. 字符集 1.2C 语言和编码 1.2.1单字节的字符和字符串 Char  cText = 'A'; Char * pszText ="ABCD"

走进windows编程的世界-----消息处理函数(4)

一 右键菜单  1 右键菜单    当在窗口点击鼠标右键时,弹出的菜单.  2 右键菜单的使用    2.1 创建菜单      CreatePopupMenu    2.2 菜单增加     AppendMenu    2.3 菜单的显示. BOOL TrackPopupMenu( HMENU hMenu, //显示的菜单句柄 UINT uFlags, //显示的方式 int x, //菜单的X屏幕坐标 int y, //菜单的Y屏幕坐标 int nReserved, //保留,必须为0 HW

走进windows编程的世界-----消息处理函数(3)

二 定时器消息 1 定时器消息 WM_TIMER   按照定时器设置时间段,自动向窗口发送一个定时器消息WM_TIMER. 优先级比较低.   定时器精度比较低,毫秒级别.消息产生时间也精度比较低.    2 消息和函数   2.1 WM_TIMER  - 消息ID    wParam: 定时器的ID    lParam: 定时器的处理函数 2.2 SetTimer  - 设置一个定时器 UINT SetTimer( HWND hWnd, //窗口的句柄,可以为NULL UINT nIDEven

走进windows编程的世界-----绘图相关

Windows绘图 1 图形绘制      1.1 图形绘制的方式      获取到绘图句柄-设备描述表(DC),使用相应的绘图的API,在设备上绘制图形.          1.2 颜色      R\G\B三色, 每种颜色8位, 共24位颜色.      32位颜色: 颜色数量24位颜色, 多出来的8位表示灰度.      16位: 颜色数量2的16次方.            Win32下,颜色的定义 COLORREF(DWORD), RGB宏定义颜色       COLORREF nCo

走进windows编程的世界-----窗口的注册及创建

1   窗口注册和创建 1.1WIN32 窗口程序创建步骤 1.WinMain入口函数的定义 2.WindowProc函数的定义 3.注册窗口类 RegisterClass.RegisterClassEX 4.创建窗口 CreateWindow.CreateWindowEx HWND CreateWindow( LPCTSTRlpClassName,//指向已注册的窗口类的名称的指针 LPCTSTRlpWindowName,//指向窗口名称的指针 DWORDdwStyle,//窗口的风格 int

走进windows编程的世界-----消息处理函数(2)

一 WM_PAINT消息 1 WM_PAINT的产生   由于窗口的互相覆盖等,产生需要绘制的区域,那么会产生WM_PAINT消息.   一般情况下,不直接发送WM_PAINT消息,通过API声明需要绘制区域,来产生WM_PAINT消息.   例如,可以使用InvalidateRect声明一个需要重新绘制的区域.    2 WM_PAINT的注意点    2.1 如果一个消息队列中,有多个WM_PAINT消息,只有最后一个WM_PAINT消息会被处理.    2.2 WM_PAINT消息处理中,

走进windows编程的世界-----位图及映射模式

1   位图的使用 1.1位图介绍 位图-通过保存在图像上每个点的颜色,生成响应的位图文件. 光栅图:图像点阵的保存 矢量图:绘图命令的保存. 1.2位图的使用 1.             加载位图资源 LoadBitap(); 2.             创建防止位图的DC CreateCompatibleDC 3.             将位图放入创建的DC SlectObject 4.             绘制位图到当前DC中 BitBlt 5.             取出位图