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))
{