Написание экстра-маленьких Win32 приложений на С++ от 1 КБ - Функции
ОГЛАВЛЕНИЕ
Функции
Обработка сообщений главного окна
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);