zoukankan      html  css  js  c++  java
  • windows API程序设计(一个简单的窗口)

    windows API程序设计(一个简单的窗口)

    一、目的

    1. windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;

    2. 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;

    二、工具

    Visual C++ 6.0

    三、参考资料

    《Windows程序设计教程》(郭暤岩、廖琪梅)

    四、步骤

    1. 在新建文件中选择Projects中的win 32 Application,输入Project name中输入新建工程名字,点击ok继续
    2. 在弹出的窗口中选择 An empty project,点击finish
    3. 再在新建文件中选择Files中的C++ source file,输入文件名
    4. 在其中写下代码
    5. 编译调试

    五、代码

    #include<windows.h>
    
    //声明WNDExample()函数
    LRESULT CALLBACK WndExample(
    	HWND hwnd,
    	UINT message,
    	WPARAM wParam,
    	LPARAM lParam);
    //编写WinMain()主函数
    int APIENTRY WinMain(HINSTANCE hInstance,
    						HINSTANCE hPervInstance,
    						LPSTR lpCmdLine,
    						int nCmdShow)
    {
    	WNDCLASS wndclass;			//定义窗口类型结构变量
    	HWND hwnd;					//定义窗口句柄
    	MSG msg;					//定义消息结构变量
    	char lpszClassName[]="自己创建的窗口";
    
    	//设计窗口类型
    	wndclass.style = CS_HREDRAW|CS_VREDRAW;		//改变窗口大小侧重面
    	wndclass.lpfnWndProc = WndExample;			//窗口函数为WndExample
    	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(BLACK_BRUSH); //背景为黑色
    	wndclass.lpszMenuName = NULL;				//窗口默认无菜单
    	wndclass.lpszClassName = lpszClassName;
    	//注册窗口类型
    	if(!RegisterClass(&wndclass))
    		return FALSE;
    
    	//创建窗口
    	hwnd = CreateWindow(lpszClassName,
    		"window窗口创建",
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT,CW_USEDEFAULT,
    		CW_USEDEFAULT,CW_USEDEFAULT,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);
    	//显示并刷新窗口
    	ShowWindow(hwnd,nCmdShow);		//显示窗口
    	UpdateWindow(hwnd);				//更新窗口的客户区
    	//信息循环
    	while(GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);		//键盘消息转换
    		DispatchMessage(&msg);		//派送消息给窗口函数
    	}
    	return msg.wParam;		//返回退出值
    }
    	//相应窗口信息
    	LRESULT CALLBACK WndExample(HWND hwnd,UINT message,
    						WPARAM wParam,
    						LPARAM lParam)
    	{
    		//根据信息值转相应的信息处理
    		switch(message)
    		{
    			//重画窗口客户区信息处理
    		case WM_PAINT:
    			HDC hdc;		//定义设备描述表句柄
    			PAINTSTRUCT ps;	//定义绘图信息结构变量
    			hdc = BeginPaint(hwnd,&ps); //获取要重画的窗口的设备描述表句柄
    			TextOut(hdc,150,150,"This is a window",20);	//输出文本
    			EndPaint(hwnd,&ps);
    			break;
    
    			//响应鼠标单击信息
    		case WM_LBUTTONDOWN:
    			{
    				MessageBeep(0);
    			}
    			break;
    			//撤销窗口信息处理
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			break;
    			//其他转默认窗口函数
    		default:
    			return DefWindowProc(hwnd,message, wParam,lParam);
    		}
    		return 0;
    	}
    		
    

    运行结果如图:

    六、遇到的问题

    在调试编译时遇到报错LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main,解决办法是:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows

  • 相关阅读:
    ZOJ 4097 Rescue the Princess
    最大值最小化 最小值最大化
    SD第九届省赛B题 Bullet
    Euler Circuit UVA
    bzoj 1878
    随笔
    BZOJ
    主席树模板
    AC自动机模板
    BZOJ
  • 原文地址:https://www.cnblogs.com/Zzxin/p/13726811.html
Copyright © 2011-2022 走看看