• windows api学习笔记简单的记事本


    #include <windows.h>
    #include "resource.h"
    #include <string>
    
    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 = (LPSTR)IDR_MENU1;//指定菜单,菜单在头文件中已经定义了
    	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)
    {
    	static std::string str;
    	switch(message)
    	{
    		case WM_CREATE:
    			{
    				::SetWindowText(hwnd,"打字程序");
    				return 0;
    			}
    		case WM_CHAR:
    			{
    				str = str+char(wParam);
    				::InvalidateRect(hwnd,NULL,0);//使整个客户区无效,迫使系统再次发送WM_PAINT消息
    				return 0;
    			}
    		case WM_PAINT:
    			{
    				HDC hdc;
    				PAINTSTRUCT ps;
    				hdc = ::BeginPaint(hwnd,&ps);//使无效的客户区变的有效,并取得设备环境句柄
    				::TextOut(hdc,0,0,str.c_str(),str.length());//输出文本
    				::EndPaint(hwnd,&ps);
    				return 0;
    			}
    		case WM_DESTROY:
    			{
    				::PostQuitMessage(0);//向消息队列投递一个WM_QUIT消息,促使GET MESSAGE函数返回0,结束消息循环
    				return 0;
    			}
    		case WM_COMMAND:
    			{
    				switch(LOWORD(wParam))
    				{
    					case ID_FILE_EXIT:
    						::SendMessage(hwnd,WM_CLOSE,0,0);
    						break;
    				}
    				return 0;
    			}
    	}
    	return ::DefWindowProc(hwnd,message,wParam,lParam);
    }
    
    
    

    resource.h的代码为

    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ generated include file.
    // Used by a.rc
    //
    #define IDR_MENU1                       101
    #define ID_FILE_EXIT                    40001
    
    // Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        102
    #define _APS_NEXT_COMMAND_VALUE         40002
    #define _APS_NEXT_CONTROL_VALUE         1001
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif
    
    
  • 相关阅读:
    DLPAR中关于cpu资源的分配
    官网下载storage manager方法
    vsftpd中关于ftpusers和user_list两个文件的说明以及vsftpd.conf中的userlist_enable和userlist_deny两个配置项的解释
    Windows10搭建FTP服务器
    fdisk分区的起始扇区为什么是2048——linux 分区与启动的小故事
    P740SAS卡报错的处理
    linux 下route命令
    实验01:构建FTP服务器
    IBMx86 x3850 7143机器面板PCI灯亮
    css的选择器汇总
  • 原文地址:https://www.cnblogs.com/liulun/p/1671948.html
Copyright © 2020-2023  润新知