📄 mdi_unit.c
字号:
tbb[8].iBitmap = STD_UNDO;
tbb[8].fsStyle = TBSTYLE_BUTTON;
tbb[8].idCommand = CM_EDIT_UNDO;
SendMessage(g_hToolBar, TB_ADDBUTTONS, 9, (LPARAM)&tbb);
return 0;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case CM_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
case CM_FILE_NEW:
{
MDICREATESTRUCT mcs;
HWND hChild;
mcs.szTitle = "[Untitled]";
mcs.szClass = g_szChild;
mcs.hOwner = g_hInst;
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = MDIS_ALLCHILDSTYLES;
hChild = (HWND)SendMessage(g_hMDIClient, WM_MDICREATE,
0, (LONG)&mcs);
if(!hChild)
{
MessageBox(hwnd, "MDI Child creation failed.", "Oh Oh...",
MB_ICONEXCLAMATION | MB_OK);
}
}
break;
case CM_FILE_OPEN:
{
MDICREATESTRUCT mcs;
HWND hChild;
char szFileName[MAX_PATH];
if(!GetFileName(hwnd, szFileName, FALSE))
break;
mcs.szTitle = szFileName;
mcs.szClass = g_szChild;
mcs.hOwner = g_hInst;
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = MDIS_ALLCHILDSTYLES;
hChild = (HWND)SendMessage(g_hMDIClient, WM_MDICREATE,
0, (LONG)&mcs);
if(!hChild)
{
MessageBox(hwnd, "MDI Child creation failed.", "Oh Oh...",
MB_ICONEXCLAMATION | MB_OK);
}
}
break;
case CM_WINDOW_TILEHORZ:
PostMessage(g_hMDIClient, WM_MDITILE, MDITILE_HORIZONTAL, 0);
break;
case CM_WINDOW_TILEVERT:
PostMessage(g_hMDIClient, WM_MDITILE, MDITILE_VERTICAL, 0);
break;
case CM_WINDOW_CASCADE:
PostMessage(g_hMDIClient, WM_MDICASCADE, 0, 0);
break;
case CM_WINDOW_ARRANGE:
PostMessage(g_hMDIClient, WM_MDIICONARRANGE, 0, 0);
break;
default:
{
if(LOWORD(wParam) >= ID_MDI_FIRSTCHILD){
DefFrameProc(hwnd, g_hMDIClient, Message, wParam, lParam);
}
else {
HWND hChild;
hChild = (HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0);
if(hChild){
SendMessage(hChild, WM_COMMAND, wParam, lParam);
}
}
}
}
}
break;
case WM_SIZE:
{
RECT rectClient, rectStatus, rectTool;
UINT uToolHeight, uStatusHeight, uClientAlreaHeight;
SendMessage(g_hToolBar, TB_AUTOSIZE, 0, 0);
SendMessage(g_hStatusBar, WM_SIZE, 0, 0);
GetClientRect(hwnd, &rectClient);
GetWindowRect(g_hStatusBar, &rectStatus);
GetWindowRect(g_hToolBar, &rectTool);
uToolHeight = rectTool.bottom - rectTool.top;
uStatusHeight = rectStatus.bottom - rectStatus.top;
uClientAlreaHeight = rectClient.bottom;
MoveWindow(g_hMDIClient, 0, uToolHeight, rectClient.right, uClientAlreaHeight - uStatusHeight - uToolHeight, TRUE);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefFrameProc(hwnd, g_hMDIClient, Message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT Message, WPARAM wParam,
LPARAM lParam)
{
switch(Message)
{
case WM_CREATE:
{
char szFileName[MAX_PATH];
HWND hEdit;
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
ES_WANTRETURN,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hwnd, (HMENU)IDC_CHILD_EDIT, g_hInst, NULL);
SendMessage(hEdit, WM_SETFONT,
(WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
GetWindowText(hwnd, szFileName, MAX_PATH);
if(*szFileName != '[')
{
if(!LoadFile(hEdit, szFileName))
{
MessageBox(hwnd, "Couldn't Load File.", "Error.",
MB_OK | MB_ICONEXCLAMATION);
return -1; //cancel window creation
}
}
}
break;
case WM_SIZE:
if(wParam != SIZE_MINIMIZED)
MoveWindow(GetDlgItem(hwnd, IDC_CHILD_EDIT), 0, 0, LOWORD(lParam),
HIWORD(lParam), TRUE);
break;
case WM_MDIACTIVATE:
{
HMENU hMenu, hFileMenu;
BOOL EnableFlag;
char szFileName[MAX_PATH];
hMenu = GetMenu(g_hMainWindow);
if(hwnd == (HWND)lParam){ //being activated
EnableFlag = TRUE;
}
else{
EnableFlag = FALSE; //being de-activated
}
EnableMenuItem(hMenu, 1, MF_BYPOSITION | (EnableFlag ? MF_ENABLED : MF_GRAYED));
EnableMenuItem(hMenu, 2, MF_BYPOSITION | (EnableFlag ? MF_ENABLED : MF_GRAYED));
hFileMenu = GetSubMenu(hMenu, 0);
EnableMenuItem(hFileMenu, CM_FILE_SAVE, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
EnableMenuItem(hFileMenu, CM_FILE_SAVEAS, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
DrawMenuBar(g_hMainWindow);
SendMessage(g_hToolBar, TB_ENABLEBUTTON, CM_FILE_SAVE, MAKELONG(EnableFlag, 0));
SendMessage(g_hToolBar, TB_ENABLEBUTTON, CM_EDIT_UNDO, MAKELONG(EnableFlag, 0));
SendMessage(g_hToolBar, TB_ENABLEBUTTON, CM_EDIT_CUT, MAKELONG(EnableFlag, 0));
SendMessage(g_hToolBar, TB_ENABLEBUTTON, CM_EDIT_COPY, MAKELONG(EnableFlag, 0));
SendMessage(g_hToolBar, TB_ENABLEBUTTON, CM_EDIT_PASTE, MAKELONG(EnableFlag, 0));
GetWindowText(hwnd, szFileName, MAX_PATH);
SendMessage(g_hStatusBar, SB_SETTEXT, 0, (LPARAM)(EnableFlag ? szFileName : ""));
}
break;
case WM_SETFOCUS:
SetFocus(GetDlgItem(hwnd, IDC_CHILD_EDIT));
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case CM_FILE_SAVE:
{
char szFileName[MAX_PATH];
GetWindowText(hwnd, szFileName, MAX_PATH);
if(*szFileName != '[')
{
if(!SaveFile(GetDlgItem(hwnd, IDC_CHILD_EDIT), szFileName))
{
MessageBox(hwnd, "Couldn't Save File.", "Error.",
MB_OK | MB_ICONEXCLAMATION);
return 0;
}
}
else
{
PostMessage(hwnd, WM_COMMAND,
MAKEWPARAM(CM_FILE_SAVEAS, 0), 0);
}
}
return 0;
case CM_FILE_SAVEAS:
{
char szFileName[MAX_PATH];
if(GetFileName(hwnd, szFileName, TRUE))
{
if(!SaveFile(GetDlgItem(hwnd, IDC_CHILD_EDIT), szFileName))
{
MessageBox(hwnd, "Couldn't Save File.", "Error.",
MB_OK | MB_ICONEXCLAMATION);
return 0;
}
else
{
SetWindowText(hwnd, szFileName);
}
}
}
return 0;
case CM_EDIT_UNDO:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, EM_UNDO, 0, 0);
break;
case CM_EDIT_CUT:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_CUT, 0, 0);
break;
case CM_EDIT_COPY:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_COPY, 0, 0);
break;
case CM_EDIT_PASTE:
SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_PASTE, 0, 0);
break;
}
return 0;
}
return DefMDIChildProc(hwnd, Message, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -