static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { PMAIN_WND_INFO Info; LRESULT Ret = 0; /* Get the window context */ Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (Info == NULL && msg != WM_CREATE) { goto HandleDefaultMessage; } switch(msg) { case WM_CREATE: { Info = (PMAIN_WND_INFO)(((LPCREATESTRUCT)lParam)->lpCreateParams); /* Initialize the main window context */ Info->hMainWnd = hwnd; Info->SelectedItem = NO_ITEM_SELECTED; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)Info); if (!InitMainWnd(Info)) return -1; /* Fill the list-view before showing the main window */ RefreshServiceList(Info); /* Show the window */ ShowWindow(hwnd, Info->nCmdShow); SetFocus(Info->hListView); } break; case WM_SIZE: { MainWndResize(Info, LOWORD(lParam), HIWORD(lParam)); } break; case WM_NOTIFY: { LPNMHDR pnmhdr = (LPNMHDR)lParam; switch (pnmhdr->code) { case NM_DBLCLK: { POINT pt; RECT rect; GetCursorPos(&pt); GetWindowRect(Info->hListView, &rect); if (PtInRect(&rect, pt)) { SendMessage(hwnd, WM_COMMAND, //ID_PROP, MAKEWPARAM((WORD)ID_PROP, (WORD)0), 0); } //OpenPropSheet(Info); } break; case NM_RETURN: { SendMessage(hwnd, WM_COMMAND, //ID_PROP, MAKEWPARAM((WORD)ID_PROP, (WORD)0), 0); } break; case LVN_COLUMNCLICK: { LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam; (void)ListView_SortItems(Info->hListView, CompareFunc, pnmv->iSubItem); bSortAscending = !bSortAscending; } break; case LVN_ITEMCHANGED: { LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam; if (pnmv->uNewState != 0) { ListViewSelectionChanged(Info, pnmv); SetMenuAndButtonStates(Info); } } break; case TTN_GETDISPINFO: { LPTOOLTIPTEXT lpttt; UINT idButton; lpttt = (LPTOOLTIPTEXT)lParam; /* Specify the resource identifier of the descriptive * text for the given button. */ idButton = (UINT)lpttt->hdr.idFrom; switch (idButton) { case ID_PROP: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PROP); break; case ID_REFRESH: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_REFRESH); break; case ID_EXPORT: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXPORT); break; case ID_CREATE: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_CREATE); break; case ID_DELETE: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_DELETE); break; case ID_START: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_START); break; case ID_STOP: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_STOP); break; case ID_PAUSE: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PAUSE); break; case ID_RESTART: lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_RESTART); break; } } break; } } break; case WM_CONTEXTMENU: { POINT pt; RECT lvRect; INT xPos = GET_X_LPARAM(lParam); INT yPos = GET_Y_LPARAM(lParam); GetCursorPos(&pt); /* display popup when cursor is in the list view */ GetWindowRect(Info->hListView, &lvRect); if (PtInRect(&lvRect, pt)) { TrackPopupMenuEx(GetSubMenu(Info->hShortcutMenu, 0), TPM_RIGHTBUTTON, xPos, yPos, Info->hMainWnd, NULL); } } break; case WM_COMMAND: { MainWndCommand(Info, LOWORD(wParam), (HWND)lParam); goto HandleDefaultMessage; } case WM_MENUSELECT: { if (Info->hStatus != NULL) { if (!MainWndMenuHint(Info, LOWORD(wParam), MainMenuHintTable, sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]), IDS_HINT_BLANK)) { MainWndMenuHint(Info, LOWORD(wParam), SystemMenuHintTable, sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]), IDS_HINT_BLANK); } } } break; case WM_ENTERMENULOOP: { Info->bInMenuLoop = TRUE; UpdateMainStatusBar(Info); break; } case WM_EXITMENULOOP: { Info->bInMenuLoop = FALSE; UpdateMainStatusBar(Info); break; } case WM_CLOSE: { HeapFree(ProcessHeap, 0, Info->pAllServices); DestroyMenu(Info->hShortcutMenu); DestroyWindow(hwnd); } break; case WM_DESTROY: { HeapFree(ProcessHeap, 0, Info); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); PostQuitMessage(0); } break; default: { HandleDefaultMessage: Ret = DefWindowProc(hwnd, msg, wParam, lParam); } break; } return Ret; }
static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PMAIN_WND_INFO Info; LRESULT Ret = 0; static RECT wndOldPos; /* Get the window context */ Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (Info == NULL && uMsg != WM_CREATE) { goto HandleDefaultMessage; } switch (uMsg) { case WM_CREATE: { Info = (PMAIN_WND_INFO)(((LPCREATESTRUCT)lParam)->lpCreateParams); /* Initialize the main window context */ Info->hSelf = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)Info); InitMainWnd(Info); /* Show the window */ ShowWindow(hwnd, Info->nCmdShow); /* get the windows position */ GetWindowRect(hwnd, &wndOldPos); break; } case WM_SIZE: { MainWndResize(Info, LOWORD(lParam), HIWORD(lParam)); /* NOTE - do *not* forward this message to DefFrameProc! Otherwise the MDI client will attempt to resize itself */ break; } case WM_MOVE: { } break; case WM_NOTIFY: { /* FIXME - handle other notifications */ break; } case WM_COMMAND: { MainWndCommand(Info, LOWORD(wParam), (HWND)lParam); goto HandleDefaultMessage; } case WM_MENUSELECT: { if (Info->hStatus != NULL) { if (!MainWndMenuHint(Info, LOWORD(wParam), MainMenuHintTable, sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]), IDS_HINT_BLANK)) { MainWndMenuHint(Info, LOWORD(wParam), SystemMenuHintTable, sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]), IDS_HINT_BLANK); } } break; } case WM_ENTERMENULOOP: { Info->InMenuLoop = TRUE; UpdateMainStatusBar(Info); break; } case WM_EXITMENULOOP: { Info->InMenuLoop = FALSE; UpdateMainStatusBar(Info); break; } case WM_CLOSE: { DestroyWindow(hwnd); break; } case WM_ENABLE: { goto HandleDefaultMessage; } case WM_NCACTIVATE: { goto HandleDefaultMessage; } case WM_ACTIVATEAPP: { goto HandleDefaultMessage; } case WM_DESTROY: { DestroyMainWnd(Info); /* FIXME: set the windows position in registry*/ //wndOldPos HeapFree(ProcessHeap, 0, Info); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); /* Break the message queue loop */ PostQuitMessage(0); break; } default: { HandleDefaultMessage: if (Info != NULL && Info->hMdiClient != NULL) { Ret = DefFrameProc(hwnd, Info->hMdiClient, uMsg, wParam, lParam); } else { Ret = DefWindowProc(hwnd, uMsg, wParam, lParam); } break; } } return Ret; }
static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { PMAIN_WND_INFO Info; LRESULT Ret = 0; /* Get the window context */ Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (Info == NULL && msg != WM_CREATE) { goto HandleDefaultMessage; } switch(msg) { case WM_CREATE: { Info = (PMAIN_WND_INFO)(((LPCREATESTRUCT)lParam)->lpCreateParams); /* Initialize the main window context */ Info->hMainWnd = hwnd; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)Info); if (!InitMainWnd(Info)) SendMessage(hwnd, WM_CLOSE, 0, 0); /* Show the window */ ShowWindow(hwnd, Info->nCmdShow); } break; case WM_SETFOCUS: { if (Info->hTreeView != NULL) SetFocus(Info->hTreeView); } break; case WM_SIZE: { MainWndResize(Info, LOWORD(lParam), HIWORD(lParam)); } break; case WM_NOTIFY: { Ret = OnNotify(Info, lParam); } break; case WM_CONTEXTMENU: { OnContext(Info, lParam); } break; case WM_COMMAND: { MainWndCommand(Info, LOWORD(wParam), (HWND)lParam); goto HandleDefaultMessage; } case WM_MENUSELECT: { if (Info->hStatus != NULL) { if (!MainWndMenuHint(Info, LOWORD(wParam), MainMenuHintTable, sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]), IDS_HINT_BLANK)) { MainWndMenuHint(Info, LOWORD(wParam), SystemMenuHintTable, sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]), IDS_HINT_BLANK); } } } break; case WM_ENTERMENULOOP: { Info->InMenuLoop = TRUE; UpdateMainStatusBar(Info); break; } case WM_EXITMENULOOP: { Info->InMenuLoop = FALSE; UpdateMainStatusBar(Info); break; } case WM_CLOSE: { FreeDeviceStrings(Info->hTreeView); DestroyMenu(Info->hShortcutMenu); DestroyWindow(hwnd); } break; case WM_DESTROY: { HeapFree(ProcessHeap, 0, Info); SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); /* Break the message queue loop */ PostQuitMessage(0); } break; default: { HandleDefaultMessage: Ret = DefWindowProc(hwnd, msg, wParam, lParam); } break; } return Ret; }