LRESULT MainFrame::OnFileRecent(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { // check if we have to save the current one bool bRet = !m_view.QueryClose(); if (bRet) { if (!m_view.DoFileSaveAs()) return 0; } // get file name from the MRU list CString cszFile; if (m_mru.GetFromList(wID, cszFile)) { CString cszFileName = Path(cszFile).FilenameAndExt(); // open file if (DoFileOpen(cszFile, cszFileName)) m_mru.MoveToTop(wID); else m_mru.RemoveFromList(wID); m_mru.WriteToRegistry(c_pszSettingsRegkey); } else { ::MessageBeep(MB_ICONERROR); } return 0; }
/* ParseCmdLinePriv Parse the command line when the applcation first starts. */ void ParseCmdLinePriv(LPSTR cmdLine) { LPSTR lpCmdLine, lpT; if(cmdLine == NULL) lpCmdLine = GetCommandLine(); else lpCmdLine = cmdLine; if (*lpCmdLine) { lpT = strchr(lpCmdLine, ' '); // skip self name if (lpT) { lpCmdLine = lpT; while (*lpCmdLine == ' ') { lpCmdLine++; // skip spaces to end or first cmd } while (*lpCmdLine != '\0'){ char buff[255]; int i; for (i = 0; (*lpCmdLine != ' ') && (*lpCmdLine != '\0'); i++, lpCmdLine++) { buff[i] = *lpCmdLine; } // Null terminate if(*lpCmdLine != '\0') lpCmdLine++; buff[i] = '\0'; // Open the file DoFileOpen(buff); } } else lpCmdLine += strlen(lpCmdLine); // point to NULL } }
LRESULT MainFrame::OnFileOpen(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { CFileDialog dlg(TRUE, NULL, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, g_pszLuaScriptingFilter); int iRet = dlg.DoModal(m_hWnd); if (iRet == IDOK) { bool bRet = m_view.QueryClose(); if (!bRet) { if (!DoFileSaveAs()) return 0; } if (DoFileOpen(dlg.m_ofn.lpstrFile, dlg.m_ofn.lpstrFileTitle)) { m_mru.AddToList(dlg.m_ofn.lpstrFile); m_mru.WriteToRegistry(c_pszSettingsRegkey); } } return 0; }
fnOpenFile(LPSTR lpstrFileName) // filename may be NULL { extern int vfCloseFilesInDialog; extern int docCur; extern HANDLE hMmwModInstance; extern HANDLE hParentWw; extern struct SEL selCur; extern typeCP cpMinDocument; /* Close all files on removable media for every message we get */ vfCloseFilesInDialog = TRUE; /* Close all files on removable media so changing disks is safe */ CloseEveryRfn( TRUE ); /* test for dirty file and offer opportunity to save */ if (FConfirmSave()) DoFileOpen(lpstrFileName); vfCloseFilesInDialog = FALSE; }
LRESULT MainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { SetupCmdBar(); SetupRibbonBar(); SetupToolbar(); SetupMRUList(); SetupStatusBar(); SetupView(); // register object for message filtering and idle updates CMessageLoop* pLoop = _Module.GetMessageLoop(); ATLASSERT(pLoop != NULL); pLoop->AddMessageFilter(this); pLoop->AddIdleHandler(this); { bool bRibbonUI = RunTimeHelper::IsRibbonUIAvailable(); ShowRibbonUI(bRibbonUI); UISetCheck(ID_VIEW_RIBBON, bRibbonUI); } if (m_cszFilenameOpenAtStart.IsEmpty()) DoFileNew(); else { CString cszTitle = Path(m_cszFilenameOpenAtStart).FilenameAndExt(); if (DoFileOpen(m_cszFilenameOpenAtStart, cszTitle)) { m_mru.AddToList(m_cszFilenameOpenAtStart); m_mru.WriteToRegistry(c_pszSettingsRegkey); } } UIEnable(ID_SCRIPT_RUN, true); UIEnable(ID_SCRIPT_STOP, false); return 0; }
/* MainWndProc */ LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { CLIENTCREATESTRUCT clientcreate; DWORD dwStyle; switch (message) { case WM_CREATE: SetWindowLong(hwnd, 0, (LONG)NULL); clientcreate.hWindowMenu = hMenuWindow; clientcreate.idFirstChild = 1; dwStyle = WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE; // Create our child window ghwndClient = CreateWindow("MDICLIENT", NULL, dwStyle, 0,0,0,0, hwnd, NULL, ghModule, (LPVOID)&clientcreate); return 0L; case WM_DESTROY: PostQuitMessage(0); return 0L; case WM_SYSCOMMAND: if ( LOWORD(wParam) == MM_ABOUT) { SendMessage(hwnd,WM_COMMAND,MM_ABOUT,0); return 0; } else return DefWindowProc (hwnd, message, wParam, lParam); break; case WM_COMMAND: switch (LOWORD(wParam)) { // File Menu case ID_FILE_OPEN: if(DoFileOpen(NULL)) return 0L; break; case ID_FILE_CLOSE: DestroyWindow((HWND)SendMessage(ghwndClient, WM_MDIGETACTIVE, 0L, FALSE)); break; case ID_FILE_EXIT: PostMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0L); break; // Window Menu case IDM_TILE: SendMessage(ghwndClient, WM_MDITILE, 0L, 0L); return 0L; case IDM_CASCADE: SendMessage(ghwndClient, WM_MDICASCADE, 0L, 0L); return 0L; case IDM_ARRANGE: SendMessage(ghwndClient, WM_MDIICONARRANGE, 0L, 0L); return 0L; case ID_WINDOW_ABOUT: if (DialogBox(ghModule, "AboutBox", ghwndMain, (DLGPROC)About) == -1){ MessageBox(ghwndMain, "About Dialog Creation Error!", "Error", MB_OK); } return 0L; default: return DefFrameProc(hwnd, ghwndClient, message, wParam, lParam); } default: return DefFrameProc(hwnd, ghwndClient, message, wParam, lParam); } }
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: { //Create Toolbar HWND hTool; TBBUTTON tbb[3]; TBADDBITMAP tbab; hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_TOOL, GetModuleHandle(NULL), NULL); if (hTool == NULL) MessageBox(hwnd, "Could not create tool bar.", "Error", MB_OK | MB_ICONERROR); //Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility. SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); tbab.hInst = HINST_COMMCTRL; tbab.nID = IDB_STD_SMALL_COLOR; SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab); ZeroMemory(tbb, sizeof(tbb)); tbb[0].iBitmap = STD_FILENEW; tbb[0].fsState = TBSTATE_ENABLED; tbb[0].fsStyle = TBSTYLE_BUTTON; tbb[0].idCommand = ID_FILE_NEW; tbb[1].iBitmap = STD_FILEOPEN; tbb[1].fsState = TBSTATE_ENABLED; tbb[1].fsStyle = TBSTYLE_BUTTON; tbb[1].idCommand = ID_FILE_OPEN; tbb[2].iBitmap = STD_FILESAVE; tbb[2].fsState = TBSTATE_ENABLED; tbb[2].fsStyle = TBSTYLE_BUTTON; tbb[2].idCommand = ID_FILE_SAVEAS; SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb); //Create Status bar HWND hStatus; int statwidths[] = {100, -1}; hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hwnd, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(NULL), NULL); SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)"); //Create Client Window CLIENTCREATESTRUCT ccs; ccs.hWindowMenu = GetSubMenu(GetMenu(hwnd), 2); ccs.idFirstChild = ID_MDI_FIRSTCHILD; g_hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_MAIN_MDI, GetModuleHandle(NULL), (LPVOID)&ccs); break; } case WM_SIZE: { //Size toolbar and get height HWND hTool; RECT rcTool; int iToolHeight; hTool = GetDlgItem(hwnd, IDC_MAIN_TOOL); SendMessage(hTool, TB_AUTOSIZE, 0, 0); GetWindowRect(hTool, &rcTool); iToolHeight = rcTool.bottom - rcTool.top; //Size status bar and get height HWND hStatus; RECT rcStatus; int iStatusHeight; hStatus = GetDlgItem(hwnd, IDC_MAIN_STATUS); SendMessage(hStatus, WM_SIZE, 0, 0); GetWindowRect(hStatus, &rcStatus); iStatusHeight = rcStatus.bottom - rcStatus.top; //Calculata remaining height and size client window HWND hMDI; int iMDIHeight; RECT rcClient; GetClientRect(hwnd, &rcClient); iMDIHeight = rcClient.bottom - iToolHeight - iStatusHeight; hMDI = GetDlgItem(hwnd, IDC_MAIN_MDI); SetWindowPos(hMDI, NULL, 0, iToolHeight, rcClient.right, iMDIHeight, SWP_NOZORDER); break; } case WM_MDIACTIVATE: { HMENU hMenu, hFileMenu; UINT EnableFlag; hMenu = GetMenu(g_hMainWindow); if (hwnd == (HWND)lParam) EnableFlag = MF_ENABLED; else EnableFlag = MF_GRAYED; EnableMenuItem(hMenu, 1, MF_BYPOSITION | EnableFlag); EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag); hFileMenu = GetSubMenu(hMenu, 0); EnableMenuItem(hFileMenu, ID_FILE_SAVEAS, MF_BYCOMMAND | EnableFlag); EnableMenuItem(hFileMenu, ID_FILE_CLOSE, MF_BYCOMMAND | EnableFlag); EnableMenuItem(hFileMenu, ID_FILE_CLOSEALL, MF_BYCOMMAND | EnableFlag); DrawMenuBar(g_hMainWindow); break; } case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_FILE_NEW: CreateNewMDIChild(g_hMDIClient); break; case ID_FILE_OPEN: { HWND hChild = CreateNewMDIChild(g_hMDIClient); if (hChild) DoFileOpen(hChild); break; } case ID_FILE_CLOSE: { HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE, 0, 0); if (hChild) SendMessage(hChild, WM_CLOSE, 0, 0); break; } case ID_FILE_SAVEAS: { HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE, 0, 0); if (hChild) DoFileSave(hChild); break; } case ID_WINDOW_TILE: SendMessage(g_hMDIClient, WM_MDITILE, 0, 0); break; case ID_WINDOW_CASCADE: SendMessage(g_hMDIClient, WM_MDICASCADE, 0, 0); break; default: { if (LOWORD(wParam) >= ID_MDI_FIRSTCHILD) DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam); else { HWND hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE, 0, 0); if (hChild) SendMessage(hChild, WM_COMMAND, wParam, lParam); } } } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefFrameProc(hwnd, g_hMDIClient, msg, wParam, lParam); } return 0; }
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: { HFONT hfDefault; HWND hEdit; HWND hTool; TBBUTTON tbb[3]; TBADDBITMAP tbab; HWND hStatus; int statwidths[] = {100, -1}; // Create Edit Control hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL); if(hEdit == NULL) MessageBox(hwnd, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR); hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT); SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0)); // Create Toolbar hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU)IDC_MAIN_TOOL, GetModuleHandle(NULL), NULL); if(hTool == NULL) MessageBox(hwnd, "Could not create tool bar.", "Error", MB_OK | MB_ICONERROR); // Send the TB_BUTTONSTRUCTSIZE message, which is required for // backward compatibility. SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); tbab.hInst = HINST_COMMCTRL; tbab.nID = IDB_STD_SMALL_COLOR; SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab); ZeroMemory(tbb, sizeof(tbb)); tbb[0].iBitmap = STD_FILENEW; tbb[0].fsState = TBSTATE_ENABLED; tbb[0].fsStyle = TBSTYLE_BUTTON; tbb[0].idCommand = ID_FILE_NEW; tbb[1].iBitmap = STD_FILEOPEN; tbb[1].fsState = TBSTATE_ENABLED; tbb[1].fsStyle = TBSTYLE_BUTTON; tbb[1].idCommand = ID_FILE_OPEN; tbb[2].iBitmap = STD_FILESAVE; tbb[2].fsState = TBSTATE_ENABLED; tbb[2].fsStyle = TBSTYLE_BUTTON; tbb[2].idCommand = ID_FILE_SAVEAS; SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb); // Create Status bar hStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hwnd, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(NULL), NULL); SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)"); } break; case WM_SIZE: { HWND hTool; RECT rcTool; int iToolHeight; HWND hStatus; RECT rcStatus; int iStatusHeight; HWND hEdit; int iEditHeight; RECT rcClient; // Size toolbar and get height hTool = GetDlgItem(hwnd, IDC_MAIN_TOOL); SendMessage(hTool, TB_AUTOSIZE, 0, 0); GetWindowRect(hTool, &rcTool); iToolHeight = rcTool.bottom - rcTool.top; // Size status bar and get height hStatus = GetDlgItem(hwnd, IDC_MAIN_STATUS); SendMessage(hStatus, WM_SIZE, 0, 0); GetWindowRect(hStatus, &rcStatus); iStatusHeight = rcStatus.bottom - rcStatus.top; // Calculate remaining height and size edit GetClientRect(hwnd, &rcClient); iEditHeight = rcClient.bottom - iToolHeight - iStatusHeight; hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT); SetWindowPos(hEdit, NULL, 0, iToolHeight, rcClient.right, iEditHeight, SWP_NOZORDER); } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_FILE_NEW: SetDlgItemText(hwnd, IDC_MAIN_EDIT, ""); break; case ID_FILE_OPEN: DoFileOpen(hwnd); break; case ID_FILE_SAVEAS: DoFileSave(hwnd); break; } break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; }