Страница 2 из 4 Функции Обработка сообщений главного окна LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
Функция, которая будет вызываться для каждого окна при переборе всех окон static BOOL FAR PASCAL my_EnumWindowsProc(HWND hwnd, DWORD lParam);
Проверка наличия строки str2 в str1 BOOL Contain(char* str1, char* str2);
Скрывание с экрана очередного окна inline void HideNext(HWND hwnd){ ShowWindow(aHwnd[cHwnd++]=hwnd,SW_HIDE); }
Возврат всех спрятанных окон на экран inline void ShowAll(void) { while(cHwnd) ShowWindow(aHwnd[--cHwnd],SW_SHOW);}
Пройдемся по главным строкам функции NewWinMain * Получим INSTANCE модуля. Это нам нужно для регистрации оконного класса HINSTANCE hInst=GetModuleHandle(NULL);
* Зарегистрируем оконный класс WNDCLASS wc; wc.style = CS_HREDRAW|CS_VREDRAW ; wc.lpfnWndProc = (WNDPROC)MainWndProc; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszClassName = "CKMINT21WINDOWSHIDERPRO"; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.lpszMenuName=NULL; wc.cbClsExtra=0; wc.cbWndExtra=0; if (!RegisterClass(&wc)) MessageBox(0,"I can't register window class.","Error:",0), ExitProcess(0);
* Создаем главное окно приложения hwndMain=CreateWindow(wc.lpszClassName,"Small windows hider!", WS_BORDER|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX, CW_USEDEFAULT,0,291,180, NULL, NULL, hInst, NULL);
И помещаем на него две кнопки. Как видим, кнопки имеют класс "BUTTON". Они являются дочерними окну hwndMain. hwndButtonHide=CreateWindow("BUTTON","Hide!", WS_VISIBLE | WS_CHILD , 10,10,261,90, hwndMain, NULL, hInst, NULL); ShowWindow(hwndButtonHide,SW_SHOW), UpdateWindow(hwndButtonHide); hwndButtonEditFilter=CreateWindow("BUTTON","Edit filters", WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP , 10,110,261,30, hwndMain, NULL, hInst, NULL); ShowWindow(hwndButtonEditFilter,SW_SHOW), UpdateWindow(hwndButtonEditFilter);
Наконец, показываем главное окно ShowWindow(hwndMain,SW_SHOW), UpdateWindow(hwndMain);
Примечание: Так как кто-то этого может не знать, хочу отметить, что в языке С++ есть "операция следования" - запятая. Т.е. просто последовательно выполнятся обе функции ShowWindow и UpdateWindow (как отдельный блок). В вышеуказанной строке можно было бы и просто поставить ";", а вообще иногда это помогает избавиться от огромного количества фигурных скобок {}, в тексте программы. * Затем регистрируем в системе HotKeys. Они будут привязаны к главному окну, которому будут передаватся сообщения WM_HOTKEY. RegisterHotKey(hwndMain,HOTKEYHIDE,MOD_CONTROL,VK_F12) RegisterHotKey(hwndMain,HOTKEYSHOW,MOD_CONTROL,VK_F10)
* Затем считываем настройки из файла и запускаем главный цикл обработки оконных сообщений для текущего процесса. MSG msg; while(GetMessage(&msg,NULL,0,0)) TranslateMessage(&msg), DispatchMessage(&msg); |