在第九章,我们建立了一个叫做POPPAD1的程序,它使用了子窗口编辑控件来实作基本的笔记本功能。在这一章中,我们将加入「File」和「Edit」菜单,并称此程序为POPPAD2。「Edit」菜单的菜单项的功能全部可用;我们将在第十一章中完成「File」功能,在第十三章中完成「Print」功能。POPPAD2如程序10-9所示。

程序10-9 POPPAD2

POPPAD2.C

/*---------------------------------------------------------------------------

POPPAD2.C -- Popup Editor Version 2 (includes menu)

(c) Charles Petzold, 1998

---------------------------------------------------------------------------*/

#include

#include "resource.h"

#define ID_EDIT 1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

TCHAR szAppName[] = TEXT ("PopPad2") ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

HACCEL hAccel ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (hInstance, szAppName) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = szAppName ;

wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow (szAppName, szAppName,

WS_OVERLAPPEDWINDOW,

GetSystemMetrics (SM_CXSCREEN) / 4,

GetSystemMetrics (SM_CYSCREEN) / 4,

GetSystemMetrics (SM_CXSCREEN) / 2,

GetSystemMetrics (SM_CYSCREEN) / 2,

NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

hAccel = LoadAccelerators (hInstance, szAppName) ;

while (GetMessage (&msg, NULL, 0, 0))

{

if (!TranslateAccelerator (hwnd, hAccel, &msg))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

}

return msg.wParam ;

}

AskConfirmation (HWND hwnd)

{

return MessageBox ( hwnd, TEXT ("Really want to close PopPad2?"),

szAppName, MB_YESNO | MB_ICONQUESTION) ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)

{

static HWND hwndEdit ;

int iSelect, iEnable ;

switch (message)

{

case WM_CREATE:

hwndEdit = CreateWindow (TEXT ("edit"), NULL,

WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |

WS_BORDER | ES_LEFT | ES_MULTILINE |

ES_AUTOHSCROLL | ES_AUTOVSCROLL,

0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,

((LPCREATESTRUCT) lParam)->hInstance, NULL) ;

return 0 ;

case WM_SETFOCUS:

SetFocus (hwndEdit) ;

return 0 ;

case WM_SIZE:

MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;

return 0 ;

case WM_INITMENUPOPUP:

if (lParam == 1)

{

EnableMenuItem ((HMENU) wParam, IDM_EDIT_UNDO,

SendMessage (hwndEdit, EM_CANUNDO, 0, 0) ?

MF_ENABLED : MF_GRAYED) ;

EnableMenuItem ((HMENU) wParam, IDM_EDIT_PASTE,

IsClipboardFormatAvailable (CF_TEXT) ?

MF_ENABLED : MF_GRAYED) ;

iSelect = SendMessage (hwndEdit, EM_GETSEL, 0, 0) ;

if (HIWORD (iSelect) == LOWORD (iSelect))

iEnable = MF_GRAYED ;

else

iEnable = MF_ENABLED ;

EnableMenuItem ((HMENU) wParam, IDM_EDIT_CUT, iEnable) ;

EnableMenuItem ((HMENU) wParam, IDM_EDIT_COPY, iEnable) ;

EnableMenuItem ((HMENU) wParam, IDM_EDIT_CLEAR, iEnable) ;

return 0 ;

}

break ;

case WM_COMMAND:

if (lParam)

{

if (LOWORD (lParam) == ID_EDIT &&

(HIWORD (wParam) == EN_ERRSPACE ||

HIWORD (wParam) == EN_MAXTEXT))

MessageBox (hwnd, TEXT ("Edit control out of space."),

szAppName, MB_OK | MB_ICONSTOP) ;

return 0 ;

}

else switch (LOWORD (wParam))

{

case IDM_FILE_NEW:

case IDM_FILE_OPEN:

case IDM_FILE_SAVE:

case IDM_FILE_SAVE_AS:

case IDM_FILE_PRINT:

MessageBeep (0) ;

return 0 ;

case IDM_APP_EXIT:

SendMessage (hwnd, WM_CLOSE, 0, 0) ;

return 0 ;

case IDM_EDIT_UNDO:

SendMessage (hwndEdit, WM_UNDO, 0, 0) ;

return 0 ;

case IDM_EDIT_CUT:

SendMessage (hwndEdit, WM_CUT, 0, 0) ;

return 0 ;

case IDM_EDIT_COPY:

SendMessage (hwndEdit, WM_COPY, 0, 0) ;

return 0 ;

case IDM_EDIT_PASTE:

SendMessage (hwndEdit, WM_PASTE, 0, 0) ;

return 0 ;

case IDM_EDIT_CLEAR:

SendMessage (hwndEdit, WM_CLEAR, 0, 0) ;

return 0 ;

case IDM_EDIT_SELECT_ALL:

SendMessage (hwndEdit, EM_SETSEL, 0, -1) ;

return 0 ;

case IDM_HELP_HELP:

MessageBox (hwnd, TEXT ("Help not yet implemented!"),

szAppName, MB_OK | MB_ICONEXCLAMATION) ;

return 0 ;

case IDM_APP_ABOUT:

MessageBox (hwnd, TEXT ("POPPAD2 (c) Charles Petzold, 1998"),

szAppName, MB_OK | MB_ICONINFORMATION) ;

return 0 ;

}

break ;

case WM_CLOSE:

if (IDYES == AskConfirmation (hwnd))

DestroyWindow (hwnd) ;

return 0 ;

case WM_QUERYENDSESSION:

if (IDYES == AskConfirmation (hwnd))

return 1 ;

else

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

POPPAD2.RC (摘录)

//Microsoft Developer Studio generated resource script.

#include "resource.h"

#include "afxres.h"

/

// Icon

POPPAD2 ICON DISCARDABLE "poppad2.ico"

/

// Menu

POPPAD2 MENU DISCARDABLE

BEGIN

POPUP "&File"

BEGIN

MENUITEM "&New", IDM_FILE_NEW

MENUITEM "&Open...", IDM_FILE_OPEN

MENUITEM "&Save", IDM_FILE_SAVE

MENUITEM "Save &As...", IDM_FILE_SAVE_AS

MENUITEM SEPARATOR

MENUITEM "&Print", IDM_FILE_PRINT

MENUITEM SEPARATOR

MENUITEM "E&xit", IDM_APP_EXIT

END

POPUP "&Edit"

BEGIN

MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO

MENUITEM SEPARATOR

MENUITEM "Cu&t\tCtrl+X", IDM_EDIT_CUT

MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY

MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE

MENUITEM "De&lete\tDel", IDM_EDIT_CLEAR

MENUITEM SEPARATOR

MENUITEM "&Select All", IDM_EDIT_SELECT_ALL

END

POPUP "&Help"

BEGIN

MENUITEM "&Help...", IDM_HELP_HELP

MENUITEM "&About PopPad2...", IDM_APP_ABOUT

END

END

/

// Accelerator

POPPAD2 ACCELERATORS DISCARDABLE

BEGIN

VK_BACK, IDM_EDIT_UNDO, VIRTKEY, ALT, NOINVERT

VK_DELETE, IDM_EDIT_CLEAR, VIRTKEY, NOINVERT

VK_DELETE, IDM_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT

VK_F1, IDM_HELP_HELP, VIRTKEY, NOINVERT

VK_INSERT, IDM_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT

VK_INSERT, IDM_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT

"^C", IDM_EDIT_COPY, ASCII, NOINVERT

"^V", IDM_EDIT_PASTE, ASCII, NOINVERT

"^X", IDM_EDIT_CUT, ASCII, NOINVERT

"^Z", IDM_EDIT_UNDO, ASCII, NOINVERT

END

RESOURCE.H (摘录)

// Microsoft Developer Studio generated include file.

// Used by POPPAD2.RC

#define IDM_FILE_NEW 40001

#define IDM_FILE_OPEN 40002

#define IDM_FILE_SAVE 40003

#define IDM_FILE_SAVE_AS 40004

#define IDM_FILE_PRINT 40005

#define IDM_APP_EXIT 40006

#define IDM_EDIT_UNDO 40007

#define IDM_EDIT_CUT 40008

#define IDM_EDIT_COPY 40009

#define IDM_EDIT_PASTE 40010

#define IDM_EDIT_CLEAR 40011

#define IDM_EDIT_SELECT_ALL 40012

#define IDM_HELP_HELP 40013

#define IDM_APP_ABOUT 40014

POPPAD2.ICO

POPPAD2.RC资源描述文件包含菜单和快捷键。您将注意到,所有快捷键都表示在制表符(\t)后的「Edit」弹出式菜单的字符串中。

c语言软件打开文件快捷键,三、Windows键盘快捷键—菜单与快捷键应用程序POPPAD...相关推荐

  1. c语言编程文件打不开,c语言fopen打开文件失败的原因是什么?

    c语言fopen打开文件失败的原因是什么? 原因是:程序是以"r"的方式,也就是"读"的方式打开file.txt文件,可是程序都没有指定这个文件在哪里,程序找不 ...

  2. c 语言编程软件打开文件,VC WinExec打开指定程序或者文件的方法

    ⑴ 函数原型: UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow); ⑵ 参数: lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令 ...

  3. R语言 无法打开文件: No such file or directory

    修了一门统计课,需要用到R语言,刚开始上手,还不是很熟悉. 将文件"exam0203.txt"保存之后,使用 read.table进行读取,输出:无法打开文件'exam0203.t ...

  4. c语言d打开文件夹,BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

    批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll % ...

  5. 关于vs等编程软件打开文件出现中文乱码成因及解决办法

    就像这种打开文件,突然发现中文注释全部变成乱码了. 成因及解决办法  1.编程软件问题 按下"Win+R"快捷键,搜索''cmd'' 在命令窗口边缘右击鼠标,依次点击"属 ...

  6. 软件打开文件夹后闪退

    程序唤出选择文件之后闪退 以下是问题描述,稍候放资料来源 1-有时候所有程序都无法唤出任何的文件夹页面以及任何的保存文件选项 2-重启可能会解决问题,或者等一段时间后问题自动解决 3-选择重启文件管理 ...

  7. c语言中以追加只写方式打开文本文件,C语言中打开文件读取,写入的操作

    #include#includeint main(){ //打开文件并以读取的方式 FILE* file = fopen("E://1.txt","rt"); ...

  8. c语言在打开文件时会使用到的函数,C语言打开文件操作

    在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...

  9. c语言如何打开文件并进行编辑,C语言打开并写入文件

    示例 #include    /* for perror(), fopen(), fputs() and fclose() */ #include   /* for the EXIT_* macros ...

最新文章

  1. mqtt实例 php_php--mqtt实现推送
  2. vivado不识别HLS生成的IP解决方法
  3. Java面试知识点:红黑树、Stream流
  4. hfss螺旋平面_利用HFSS设计平面等角螺旋天线
  5. wegame饥荒一直连接中_谁是老牛?谁是嫩草?WeGame与老牌网游的故事 | 游戏茶馆...
  6. python 生成器原理_python生成器
  7. 软考信息安全工程师好考吗?
  8. SAS安装及过程中遇到的问题的解决办法
  9. ETC风头已过,龙头林立,黔通智联此时上市还真缺点儿“想象力”
  10. java调用nlpir_NLPIR(ICTCLAS2013)Java语言调用示例
  11. ADS1115使用之电路与程序
  12. 用R语言看武汉市武昌区房租出租情况
  13. 编译一个java源程序文件,会产生多少个字节码文件
  14. C++中如何读取一个数的位数_R语言入门之切尾均值(trimmed mean)和绝对中位差(mad)...
  15. 安装debugserver到iPhone上
  16. Java服务,CPU100%问题如何快速定位?
  17. 人生之路小游戏代码2
  18. docker实现quagga_docker中安装quagga
  19. Vue3使用组件库的tab切换echarts图表,图表出现宽度压缩变窄的问题
  20. 《Wireshark网络分析从入门到实践》整理和总结

热门文章

  1. React 之导入 Excel
  2. 【13位CEO访谈实录】疫情对科技企业带来的影响及应对
  3. MacBook Pro m1 homebrew 安装,卸载脚本
  4. 联想禁止 win10 更新 v2.11 免费版
  5. 第14周—项目1(3)二叉排序树
  6. 计算机四级 信息安全工程师——操作系统题库
  7. 微信8.0苹果怎么更新
  8. evo_traj 错误:[ERROR] Unhandled error in evo.main_traj
  9. 沃云的rds数据库修改sql_mode
  10. 政策东风,助推万亿智能家居产业,2022各地智能家居政策大盘点