前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows api学习笔记-简单的记事本

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

作者头像
liulun
发布2022-05-09 11:42:57
3870
发布2022-05-09 11:42:57
举报
文章被收录于专栏:liulunliulun
代码语言:javascript
复制
#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的代码为

代码语言:javascript
复制
//{{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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档