mainwnd.c
来自「ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机」· C语言 代码 · 共 1,098 行 · 第 1/3 页
C
1,098 行
LoadString(hInstance,
IDS_THIRDCOLUMN,
szTemp,
sizeof(szTemp) / sizeof(TCHAR));
lvc.pszText = szTemp;
(void)ListView_InsertColumn(Info->hListView,
2,
&lvc);
/* startup type */
lvc.iSubItem = 3;
lvc.cx = 80;
LoadString(hInstance,
IDS_FOURTHCOLUMN,
szTemp,
sizeof(szTemp) / sizeof(TCHAR));
lvc.pszText = szTemp;
(void)ListView_InsertColumn(Info->hListView,
3,
&lvc);
/* logon as */
lvc.iSubItem = 4;
lvc.cx = 100;
LoadString(hInstance,
IDS_FITHCOLUMN,
szTemp,
sizeof(szTemp) / sizeof(TCHAR));
lvc.pszText = szTemp;
(void)ListView_InsertColumn(Info->hListView,
4,
&lvc);
/* check the details view menu item */
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
ID_VIEW_LARGE,
ID_VIEW_DETAILS,
ID_VIEW_DETAILS,
MF_BYCOMMAND);
return TRUE;
}
static BOOL
CreateStatusBar(PMAIN_WND_INFO Info)
{
INT StatWidths[] = {110, -1}; /* widths of status bar */
Info->hStatus = CreateWindowEx(0,
STATUSCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,
0, 0, 0, 0,
Info->hMainWnd,
(HMENU)IDC_STATUSBAR,
hInstance,
NULL);
if(Info->hStatus == NULL)
return FALSE;
SendMessage(Info->hStatus,
SB_SETPARTS,
sizeof(StatWidths) / sizeof(INT),
(LPARAM)StatWidths);
return TRUE;
}
static VOID
ListViewSelectionChanged(PMAIN_WND_INFO Info,
LPNMLISTVIEW pnmv)
{
HMENU hMainMenu;
/* get handle to menu */
hMainMenu = GetMenu(Info->hMainWnd);
/* activate properties menu item, if not already */
if (GetMenuState(hMainMenu,
ID_PROP,
MF_BYCOMMAND) != MF_ENABLED)
{
EnableMenuItem(hMainMenu,
ID_PROP,
MF_ENABLED);
EnableMenuItem(Info->hShortcutMenu,
ID_PROP,
MF_ENABLED);
SetMenuDefaultItem(Info->hShortcutMenu,
ID_PROP,
MF_BYCOMMAND);
}
/* activate delete menu item, if not already */
if (GetMenuState(hMainMenu,
ID_DELETE,
MF_BYCOMMAND) != MF_ENABLED)
{
EnableMenuItem(hMainMenu,
ID_DELETE,
MF_ENABLED);
EnableMenuItem(Info->hShortcutMenu,
ID_DELETE,
MF_ENABLED);
}
/* set selected service */
Info->SelectedItem = pnmv->iItem;
/* get pointer to selected service */
Info->CurrentService = GetSelectedService(Info);
/* alter options for the service */
SetMenuAndButtonStates(Info);
/* set current selected service in the status bar */
SendMessage(Info->hStatus,
SB_SETTEXT,
1,
(LPARAM)Info->CurrentService->lpDisplayName);
/* show the properties button */
SendMessage(Info->hTool,
TB_SETSTATE,
ID_PROP,
(LPARAM)MAKELONG(TBSTATE_ENABLED, 0));
}
static VOID
InitMainWnd(PMAIN_WND_INFO Info)
{
if (!pCreateToolbar(Info))
DisplayString(_T("error creating toolbar"));
if (!CreateListView(Info))
{
DisplayString(_T("error creating list view"));
return;
}
if (!CreateStatusBar(Info))
DisplayString(_T("error creating status bar"));
/* Create Popup Menu */
Info->hShortcutMenu = LoadMenu(hInstance,
MAKEINTRESOURCE(IDR_POPUP));
Info->hShortcutMenu = GetSubMenu(Info->hShortcutMenu,
0);
}
static VOID
MainWndCommand(PMAIN_WND_INFO Info,
WORD CmdId,
HWND hControl)
{
UNREFERENCED_PARAMETER(hControl);
switch (CmdId)
{
case ID_PROP:
{
if (Info->SelectedItem != NO_ITEM_SELECTED)
{
PPROP_DLG_INFO PropSheet;
PropSheet = (PROP_DLG_INFO*) HeapAlloc(ProcessHeap,
HEAP_ZERO_MEMORY,
sizeof(PROP_DLG_INFO));
if (PropSheet != NULL)
{
Info->PropSheet = PropSheet;
OpenPropSheet(Info);
}
HeapFree(ProcessHeap,
0,
PropSheet);
Info->PropSheet = NULL;
}
}
break;
case ID_REFRESH:
{
RefreshServiceList(Info);
Info->SelectedItem = NO_ITEM_SELECTED;
/* disable menus and buttons */
SetMenuAndButtonStates(Info);
/* clear the service in the status bar */
SendMessage(Info->hStatus,
SB_SETTEXT,
1,
_T('\0'));
}
break;
case ID_EXPORT:
{
ExportFile(Info);
SetFocus(Info->hListView);
}
break;
case ID_CREATE:
{
DialogBoxParam(hInstance,
MAKEINTRESOURCE(IDD_DLG_CREATE),
Info->hMainWnd,
(DLGPROC)CreateDialogProc,
(LPARAM)Info);
SetFocus(Info->hListView);
}
break;
case ID_DELETE:
{
if (Info->CurrentService->ServiceStatusProcess.dwCurrentState != SERVICE_RUNNING)
{
DialogBoxParam(hInstance,
MAKEINTRESOURCE(IDD_DLG_DELETE),
Info->hMainWnd,
(DLGPROC)DeleteDialogProc,
(LPARAM)Info);
}
else
{
TCHAR Buf[60];
LoadString(hInstance,
IDS_DELETE_STOP,
Buf,
sizeof(Buf) / sizeof(TCHAR));
DisplayString(Buf);
}
SetFocus(Info->hListView);
}
break;
case ID_START:
{
DoStart(Info);
}
break;
case ID_STOP:
{
DoStop(Info);
}
break;
case ID_PAUSE:
{
Control(Info,
SERVICE_CONTROL_PAUSE);
}
break;
case ID_RESUME:
{
Control(Info,
SERVICE_CONTROL_CONTINUE );
}
break;
case ID_RESTART:
{
/* FIXME: remove this hack */
SendMessage(Info->hMainWnd,
WM_COMMAND,
0,
ID_STOP);
SendMessage(Info->hMainWnd,
WM_COMMAND,
0,
ID_START);
}
break;
case ID_HELP:
MessageBox(NULL,
_T("Help is not yet implemented\n"),
_T("Note!"),
MB_OK | MB_ICONINFORMATION);
SetFocus(Info->hListView);
break;
case ID_EXIT:
PostMessage(Info->hMainWnd,
WM_CLOSE,
0,
0);
break;
case ID_VIEW_LARGE:
SetListViewStyle(Info->hListView,
LVS_ICON);
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
ID_VIEW_LARGE,
ID_VIEW_DETAILS,
ID_VIEW_LARGE,
MF_BYCOMMAND);
break;
case ID_VIEW_SMALL:
SetListViewStyle(Info->hListView,
LVS_SMALLICON);
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
ID_VIEW_LARGE,
ID_VIEW_DETAILS,
ID_VIEW_SMALL,
MF_BYCOMMAND);
break;
case ID_VIEW_LIST:
SetListViewStyle(Info->hListView,
LVS_LIST);
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
ID_VIEW_LARGE,
ID_VIEW_DETAILS,
ID_VIEW_LIST,
MF_BYCOMMAND);
break;
case ID_VIEW_DETAILS:
SetListViewStyle(Info->hListView,
LVS_REPORT);
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
ID_VIEW_LARGE,
ID_VIEW_DETAILS,
ID_VIEW_DETAILS,
MF_BYCOMMAND);
break;
case ID_VIEW_CUST:
break;
case ID_ABOUT:
DialogBox(hInstance,
MAKEINTRESOURCE(IDD_ABOUTBOX),
Info->hMainWnd,
(DLGPROC)AboutDialogProc);
SetFocus(Info->hListView);
break;
}
}
static VOID CALLBACK
MainWndResize(PMAIN_WND_INFO Info,
WORD cx,
WORD cy)
{
RECT rcClient, rcTool, rcStatus;
int lvHeight, iToolHeight, iStatusHeight;
/* Size toolbar and get height */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?