Вход/Регистрация
Применение Windows API
вернуться

Легалов А. И.

Шрифт:

Константа, ID_MAIN, например, ссылается на иконки основной программы (большую и малую в том же самом ресурсе), главное меню, и строку с именем оконного класса. ID_CAPTION ссылается на строку заголовка окна. Такая организация данных поддерживает возможность многократного использования кода, не говоря уже о легкости локализации.

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, char* cmdParam, int cmdShow) {

 _set_new_handler(&NewHandler);

 // Using exceptions here helps debugging your program

 // and protects from unexpected incidents.

 try {

// Create top window class

TopWinClass topWinClass(ID_MAIN, hInst, MainWndProc);

// Is there a running instance of this program?

HWND hwndOther = topWinClass.GetRunningWindow ;

if (hwndOther != 0) {

::SetForegroundWindow(hwndOther);

if (::IsIconic(hwndOther)) ::ShowWindow(hwndOther, SW_RESTORE);

return 0;

}

topWinClass.Register;

// Create top window

ResString caption(hInst, ID_CAPTION);

TopWinMaker topWin(topWinClass, caption);

topWin.Create;

topWin.Show(cmdShow);

// The main message loop

MSG msg;

int status;

while ((status = ::GetMessage(&msg, 0, 0, 0)) != 0) {

if (status == –1) return –1;

::TranslateMessage(&msg);

::DispatchMessage(&msg);

}

return msg.wParam;

 } catch(WinException e) {

char buf [50];

wsprintf(buf, "%s, Error %d", e.GetMessage, e.GetError);

::MessageBox(0, buf, "Exception", MB_ICONEXCLAMATION | MB_OK);

 }

 catch (…) {

::MessageBox(0, "Unknown", "Exception", MB_ICONEXCLAMATION | MB_OK);

 }

 return 0;

}

WinClass

Давайте, рассмотрим WinClass. Он инкапсулирует предопределенную в Windows структуру WNDCLASSEX и обеспечивает приемлемые значения по умолчанию для всех ее полей. Этот класс получен из более простого класса WinSimpleClass, который Вы могли бы использовать, чтобы инкапсулировать некоторые встроенные в Windows классы (такие как кнопки, списки просмотров, и т.д.).

Я обеспечил примеры методами, которые могут использоваться, чтобы перестроить значения, устанавливаемые по умолчанию. Например, SetBgSysColor изменяет заданный по умолчанию цвет заднего фона окна к одному из предопределенных цветов системы. Метод SetResIcons загружает соответствующие иконки из ресурсов и присоединяетих к оконному классу. Эти иконки затем появятся в верхнем левом углу основного окна и на панели задач Windows.

TopWinClass наследует от WinClass и использует этот метод. Он также подцепляет меню в вершине оконного класса.

class WinSimpleClass {

public:

 WinSimpleClass(char const * name, HINSTANCE hInst) : _name (name), _hInstance (hInst) {}

 WinSimpleClass (int resId, HINSTANCE hInst);

 char const* GetName const { return _name.c_str ; }

 HINSTANCE GetInstance const { return _hInstance; }

 HWND GetRunningWindow;

protected:

 HINSTANCE _hInstance;

 std::string _name;

};

WinSimpleClass::WinSimpleClass(int resid, hinstance hinst) : _hInstance (hInst) {

 ResString resStr (hInst, resId);

 _name = resStr;

}

HWND WinSimpleClass::GetRunningWindow {

 HWND hwnd = ::FindWindow(getname, 0);

 if (::IsWindow(hwnd)) {

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: