#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

转载于:https://www.cnblogs.com/liulun/archive/2010/02/23/1671948.html

windows api学习笔记-简单的记事本相关推荐

  1. windows api学习笔记-键盘钩子

    DLL项目的头文件 #ifdef KEYHOOKLIB_EXPORT //此宏将在CPP文件中定义 #define KEYHOOKLIB_API __declspec(dllexport) #else ...

  2. Windows系统调用学习笔记(一)—— API函数调用过程

    Windows系统调用学习笔记(一)-- API函数调用过程 Windows API 实验1:分析ReadProcessMemory 第一步:定位函数 第二步:开始分析 总结 实验2:分析NtRead ...

  3. Windows APC学习笔记(一)—— APC的本质备用APC队列

    Windows APC学习笔记(一)-- APC的本质&备用APC队列 基础知识 APC的本质 APC队列 APC结构 分析 KiServiceExit 总结 备用APC队列 挂靠环境下Apc ...

  4. Crypto API 学习笔记一

    标 题: [原创]Crypto API 学习笔记一 作 者: jdxyw 时 间: 2006-09-01,16:47 链 接: http://bbs.pediy.com/showthread.php? ...

  5. php shellcode,Windows Shellcode学习笔记

    0x00 前言 Windows Shellcode学习笔记--通过VisualStudio生成shellcode,shellcode是一段机器码,常用作漏洞利用中的载荷(也就是payload). 在渗 ...

  6. Windows异常学习笔记(二)—— 内核异常处理流程用户异常的分发

    Windows异常学习笔记(二)-- 内核异常处理流程&用户异常分发 用户层与内核层异常 内核异常 分析 KiDispatchException 分析 RtlDispatchException ...

  7. Windows APC学习笔记(二)—— 挂入过程执行过程

    Windows APC学习笔记(二)-- 挂入过程&执行过程 基础知识 挂入过程 KeInitializeApc ApcStateIndex KiInsertQueueApc Alertabl ...

  8. Windows系统调用学习笔记(四)—— 系统服务表SSDT

    Windows系统调用学习笔记(四)-- 系统服务表&SSDT 要点回顾 系统服务表 实验:分析 KiSystemService 与 KiFastCallEntry 共同代码 SSDT 实验: ...

  9. Windows系统调用学习笔记(三)—— 保存现场

    Windows系统调用学习笔记(三)-- 保存现场 要点回顾 基本概念 Trap Frame 结构 线程相关的结构体 ETHREAD KTHREAD CPU相关的结构体 KPCR _NT_TIB KP ...

最新文章

  1. 22 款神经网络的设计和可视化工具
  2. easyui是否容易上手_特色家常菜-清蒸桂鱼,肉质鲜嫩有营养,做法简单容易学...
  3. GitLab - Ubuntu18搭建GitLab仓库服务器(转)
  4. 如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行
  5. STM32F7xx —— 内部flash
  6. subline修改字体大小和空格问题
  7. win下常用快捷鍵及其作用
  8. php如何使用网关,在某种情况下,由于PHP代码,网关已关闭(Gateway is down because of PHP code in one situation)...
  9. 笔记本安装linux
  10. php图片发送另一台,PHP从一台服务器将图片发送到另一台服务器并保存
  11. 分组 php库,纯真ip数据库查询的php实现(补充分组查询)
  12. 蓝牙耳机买哪种?不错的蓝牙耳机推荐
  13. 有道词典与奇迹背单词生词本同步
  14. 数字信号处理经典书籍
  15. 直流电机调速仿真作业
  16. 基于Android的医院挂号系统设计与实现(MySQL+Spring Boot+MyBatis+Android Studio+IDEA)
  17. 计算机所选区域单元格数值,筛选Excel2007单元格区域或表中的数据
  18. 如何从iTunes Store赠送音乐,电影等
  19. matlab滤波有几种形式,几种经典常用的滤波算法
  20. 高德地图JavaScript根据后台坐标点绘制轨迹

热门文章

  1. activiti 流程文件存哪里_JAVA-工作流引擎-activiti-Tasks介绍
  2. vue hot true 不起作用_Vue + Flask 小知识(二)
  3. 全文搜索引擎有哪些?_你想要拥有自己的搜索引擎吗?
  4. css 旋转 animation动画
  5. JavaScript 、if else语句判断 、jQurey表单事件
  6. idea控制台中文乱码问题
  7. linux expect sftp,expect实现sftp文件同步
  8. python进入高考-Python已进入小学教材将加入高考
  9. 正则翻译工具_PythonBasics 中文系列教程 · 翻译完成
  10. linux查看和编辑文件,查看和编辑文件(Linux的快捷键和主要命令)