Написание экстра-маленьких Win32 приложений на С++ от 1 КБ
Страница 3. Оконная процедура


 

Оконная процедура

// Тут все довольно стандартно. Делаем switch (msg).
// ...
case WM_HOTKEY:
if (HOTKEYSHOW == (int)wParam)
// показываем все, что мы до этого прятали, а так же главное
// окно программы
ShowAll(), ShowWindow(hwnd,SW_SHOW);

if (HOTKEYHIDE == (int)wParam)
// Скрываем наше главное окно и запускаем перебор всех окон в
// системе - EnumWindows. Теперь будет вызываться функция
// my_EnumWindowsProc для каждого обнаруженного в системе окна.
ShowWindow(hwnd,SW_HIDE), EnumWindows((int (__stdcall *)(struct
HWND__ *,long))my_EnumWindowsProc, 0);
break;
// ...

// Если программу пытаются минимизировать, просто скрываем ее
// .........................
case WM_SYSCOMMAND:
if(SC_MINIMIZE == wParam) { ShowWindow(hwnd,SW_HIDE); return 0; }
break;
// Внимание, после ShowWindow(hwnd,SW_HIDE) мы пишем return 0,
// вместо break. Почему? Да потому что не хотим, чтобы это
// сообщение пошло дальше в систему. Мы его уже обработали
// по-своему.
// ...
// А затем обрабатываем нажатия на кнопки.
case BN_CLICKED:
if (hwndButtonHide==(HWND)lParam)ShowWindow(hwndMain,SW_HIDE);
if (hwndButtonEditFilter==(HWND)lParam)ShellExecute(NULL,"open",
szFilterStringsFile,NULL,NULL,SW_SHOWMAXIMIZED);
break;

Рассмотрим функцию my_EnumWindowsProc

Пропустим все невидимые окна

if (!IsWindowVisible(hwnd)) return TRUE;

Получим TITLE очередного окна

GetWindowText(hwnd, szWindowsTitle, SSZZ)

Затем перебираем все стоки из файла настроек

 for(i=0;i<MAXFIL;i++)
if (FilterStrings[i]) // если это начало строки, то
{
if (Contain(szWindowsTitle, FilterStrings+i)) HideNext(hwnd);
// скроем окно, если эта строка содержится в szWindowsTitle
while(FilterStrings[i]) i++;
// сместим указатель на следующий 0
}

Продолжаем дальнейший перебор окон

return TRUE;

(Если бы было return FALSE, перебор бы закончился.)

В остальных функциях особо описывать нечего.

 
« Предыдущая статья   Следующая статья »