zoukankan      html  css  js  c++  java
  • WindowsApi学习笔记创建一个简单的窗口

    #include <windows.h>
    
    LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型
    
    int APIENTRY WinMain(                               //APIENTRY是__stdcall的宏定义
    					 HINSTANCE hInstance,           //本模块的实例句柄
    					 HINSTANCE hPrevInstance,       //Win16留下的废物
    					 LPSTR lpCmdLine,               //命令行参数
    					 int nCmdShow                   //主窗口初始化时的现实形式
    					 )
    {
    	char szClassName[] = "MainClass";
    	WNDCLASSEX wndclass;   //用来描述主窗口的结构
    	wndclass.cbSize = sizeof(wndclass);  //结构的大小
    	wndclass.style = CS_HREDRAW|CS_VREDRAW; //如果窗口大小,横向改变和竖向改变都会重画窗口
    	wndclass.lpfnWndProc = MainWndProc;//窗口函数指针
    	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 = szClassName;//窗口类的名称
    	wndclass.hIconSm = NULL;//没有类的小图标
    
    	::RegisterClassEx(&wndclass);//注册这个窗口类
    
    	HWND hwnd = ::CreateWindowEx(
    		0,//扩展样式
    		szClassName,//类名
    		"My First Window",//窗口名。标题
    		WS_OVERLAPPEDWINDOW,//窗口风格
    		CW_USEDEFAULT,//初始X坐标
    		CW_USEDEFAULT,//初始Y坐标
    		CW_USEDEFAULT,//宽度
    		CW_USEDEFAULT,//高度
    		NULL,//父窗口句柄
    		NULL,//菜单句柄
    		hInstance,//实例句柄
    		NULL//用户数据
    		);
    	if(hwnd == NULL)
    	{
    		::MessageBox(NULL,"创建窗口出错","系统提示",MB_OK);
    	}
    	::ShowWindow(hwnd,nCmdShow);//显示窗口
    	::UpdateWindow(hwnd);//刷新窗口
    	MSG msg;
    	while(::GetMessage(&msg,NULL,0,0))
    	{
    		::TranslateMessage(&msg);//转换为键盘消息
    		::DispatchMessage(&msg);//将消息发送到相应的窗口函数
    	}
    	return msg.wParam;//当GetMessage返回FALSE时程序结束
    }
    
    LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	char szText[] = "最简单的窗口程序";
    	switch(message)
    	{
    	case WM_PAINT:
    		{
    			HDC hdc;
    			PAINTSTRUCT ps;
    			hdc = ::BeginPaint(hwnd,&ps);//使无效的客户区变的有效,并取得设备环境句柄
    			::TextOut(hdc,10,10,szText,strlen(szText));//输出文本
    			::EndPaint(hwnd,&ps);
    			return 0;
    		}
    	case WM_DESTROY:
    		{
    			::PostQuitMessage(0);//向消息队列投递一个WM_QUIT消息,促使GET MESSAGE函数返回0,结束消息循环
    			return 0;
    		}
    	}
    	return ::DefWindowProc(hwnd,message,wParam,lParam);
    }
    
    
    
  • 相关阅读:
    Python 数据库骚操作 — MongoDB
    5分钟学会如何玩转云数据库组件(迁移,审计,订阅)
    数据库10大常见安全问题及Top 10 数据库安全工具盘点
    埋在 MYSQL 数据库应用中的17个关键问题!
    MySQL分布式数据库高可用实践:架构、复制机制、多机房
    浅谈如何保障自建数据库的备份恢复机制
    【深度】分布式数据库数据一致性原理说明与实现
    SyncNavigator 破解版 ,做数据同步时所支持的数据库类型
    使用SyncNavigator进行SqlServer或者MYsql数据库的实时、增量同步
    Syncnavigator破解版注册机
  • 原文地址:https://www.cnblogs.com/liulun/p/1671887.html
Copyright © 2011-2022 走看看