当前位置: 首页 > news >正文

NOTEPAD!NPCommand函数分析之comdlg32!GetSaveFileNameW--windows记事本源代码分析

第一部分:

kd> kc

USER32!InternalCallWinProc
USER32!UserCallDlgProcCheckWow
USER32!DefDlgProcWorker
USER32!SendMessageWorker
USER32!InternalCreateDialog
USER32!InternalDialogBox
USER32!DialogBoxIndirectParamAorW
USER32!DialogBoxIndirectParamW
USER32!DialogBoxIndirectParamW_wrapper
comdlg32!NewGetFileName
comdlg32!NewGetSaveFileName
comdlg32!GetFileName
comdlg32!GetSaveFileNameW
NOTEPAD!NPCommand
NOTEPAD!NPWndProc
USER32!InternalCallWinProc
USER32!UserCallWinProcCheckWow
USER32!DispatchClientMessage
USER32!__fnDWORD
ntdll!KiUserCallbackDispatcher
nt!KiCallUserMode
nt!KeUserModeCallback
win32k!SfnDWORD
win32k!xxxSendMessageToClient
win32k!xxxSendMessageTimeout
win32k!xxxSendMessage
win32k!xxxTranslateAccelerator
win32k!NtUserTranslateAccelerator
nt!_KiSystemService
SharedUserData!SystemCallStub
ntdll!KiUserCallbackDispatcher
USER32!NtUserTranslateAccelerator
NOTEPAD!WinMain
NOTEPAD!WinMainCRTStartup
kernel32!BaseProcessStart

第二部分:

            //
// Do common dialog to save file
//

            if (GetSaveFileName(&OFN))
{


第三部分:


/* ** Notepad command proc - called whenever notepad gets WM_COMMAND
message.  wParam passed as cmd */
INT NPCommand(
HWND     hwnd,
WPARAM   wParam,
LPARAM   lParam )
{
HWND     hwndFocus;
LONG     lSel;
TCHAR    szNewName[MAX_PATH] = TEXT("");      /* New file name */
FARPROC  lpfn;
LONG     style;
DWORD    rc;
RECT     rcClient;

    switch (LOWORD(wParam))
{

        case M_SAVEAS:

            OFN.lpstrFile       = szNewName;
OFN.lpstrTitle      = szSaveCaption;
/* Added OFN_PATHMUSTEXIST to eliminate problems in SaveFile.
* 12 February 1991    clarkc
*/
OFN.Flags = OFN_HIDEREADONLY     | OFN_OVERWRITEPROMPT |
OFN_NOREADONLYRETURN | OFN_PATHMUSTEXIST   |
OFN_EXPLORER         |
OFN_ENABLESIZING     |
OFN_ENABLETEMPLATE   | OFN_ENABLEHOOK;

            OFN.lpTemplateName= TEXT("NpEncodingDialog");
OFN.lpfnHook= NpSaveDialogHookProc;

            /* ALL non-zero long pointers must be defined immediately
* before the call, as the DS might move otherwise.
* 12 February 1991    clarkc
*/
OFN.lpstrFilter       = szSaveFilterSpec;
OFN.lpstrDefExt       = TEXT("txt");

            if (!fUntitled)
{
lstrcpyn(szNewName, szFileName, MAX_PATH); /* set default selection */
}
else
{
lstrcpy (szNewName, TEXT("*.txt") );
}

            fInSaveAsDlg = TRUE;

            OFN.nFilterIndex= FILE_TEXT;

            //
// Do common dialog to save file
//

            if (GetSaveFileName(&OFN))
{

http://www.lryc.cn/news/598983.html

相关文章:

  • Python 程序设计讲义(15):Python 的数据运算——位运算
  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • 深入解析Java微服务架构请求流程:Nginx到Nacos的完整旅程
  • 进阶系统策略
  • 人形机器人双足行走动力学:K-V模型其肌腱特性拟合中的应用
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • 【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍
  • AD一张原理图分成多张原理图
  • 深入思考【九九八十一难】的意义,试用歌曲能否解释
  • python教程系列1--python001
  • 学习设计模式《十九》——享元模式
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-17,(知识点:PCB布线,传输线阻抗影响因素)
  • ParFlow 模型
  • 【自用】JavaSE--阶段测试
  • vite+vue3 工程-SVG图标配置使用指南——vite-plugin-svg-icons 插件
  • Vitest 用法详解及 Coverage Web 工具介绍
  • 工具篇之开发IDEA插件的实战分享
  • Nvidia Isaac Sim机械臂实验
  • Linux命令基础完结篇
  • Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
  • C++STL系列之set和map系列
  • Node.js 中的内置模板path
  • 【时时三省】(C语言基础)怎样定义和使用指向函数的指针变量
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十九天-模拟面试前
  • io_uring:Linux异步I/O的革命性突破
  • Web前端开发:JavaScript reduce() 方法
  • 亚马逊云科技:以云为翼,助你翱翔数字新天空
  • 【高等数学】第五章 定积分——第三节 定积分的换元法和分部积分法
  • Zookeeper的分布式事务与原子性:深入解析与实践指南
  • 暑假集训篇之并发处理①练习题