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);
    }
    
    
    
  • 相关阅读:
    MySQL查询优化程序
    mysql主从:主键冲突问题
    Cacti 'graph_xport.php' SQL注入漏洞
    Nginx SPDY缓冲区溢出漏洞
    Zend Framework XML外部实体和安全绕过漏洞
    WordPress 3.8.1 /xmlrpc.php拒绝服务漏洞
    OpenSSH 'child_set_env()'函数安全绕过漏洞
    PHP "gdImageCreateFromXpm()"空指针间接引用漏洞
    Apache HTTP Server多个拒绝服务漏洞
    Samba 安全漏洞
  • 原文地址:https://www.cnblogs.com/liulun/p/1671887.html
Copyright © 2011-2022 走看看