Заметки по WinAPI

  • что такое
    • некоторая бинарная информация, которую можно добавить к exe-файлу
    • бывают стандартные
      • иконки, курсоры, меню и т.д.
  • как грузить FindResource -> LoadResource -> LockResource
  • основные типы ресурсов
    • курсоры CreateCursor // создать свой курсор во время работы программы LoadCursor // загрузить курсор из ресурсов или системный LoadCursorFromFile // название говорит само за себя (файл должен быть .CUR или .ANI) (Get)SetCursor // устанавливает свой курсор, работает только есл икурсор либо в клиентской части, либо Captured (Get)ClipCursor // задает область, в которой курсор может двигаться (Get)SetCursorPos // управляет положением курсора DestroyCursor
    • иконки CreateIcon // создать иконку во время работы прогграммы LoadIcon // загрузить иконку стандартную или из определенного модуля DestroyIcon
    • меню
      • схема
        • есть основная панель (на ней отображатся пункты)
        • есть пункты, это обычно выпадающие менюшки
        • элементы выпдаающих могут быть командами или также еще выпадающими менюшками
        • также вып HMENU CreateMenu( void ) // создать пустую панель меню HMENU CreatePopupMenu( void ) // создать пустое выпадающее меню BOOL TrackPopupMenuEx( // отображает выпадающее меню (при помощи этогоможно сделать конекстное меню) HMENU, // меню, которое нужно отобразить fuFlags, // куча флагов отображений (x,y задают координаты лево парво верх вниз центр, какими кнопками можно выбирать пункты, анимации, отсылать или сообщения родителю) int x, int y, // координаты меню HWND, // хэндл кона, которое получает соощения от этого меню (если не утановлен блокирующий флаг) LPTPMPARAMS) // указатель на спец. структуру ( правда там всего одно поле, какой прямоугольник не включать) BOOL SetMenu( HWND, HMENU ) // установить у HWND окна HMENU меню !!WARNING!! она не удаляет старое меню (просто не отображает) BOOL InsertMenuItem( // добавить новый итем в меню HMENU, // хэндл в меню UINT uItem, // либо идшник меню, либо позиция BOOL fByPosition, // параметр, различающий что выше передавался айдишник или позиция LPCMENUITEMINFO lpmii) // указатель на структуру typedef struct tagMENUITEMINFO { UINT cbSize; UINT fMask; // какие папрамтеры структуры учитывать при UINT fType; // тип пункта, может быть барьером, просто меню, битмапой UINT fState; // текущее состояние (checked/unchecked/enabled/highlited) UINT wID; // HMENU hSubMenu; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; ULONG_PTR dwItemData; LPTSTR dwTypeData; UINT cch; HBITMAP hbmpItem; } MENUITEMINFO, *LPMENUITEMINFO; BOOL S(GeT)etMenuItemInfo( HMENU, UINT uItem, BOOL fByPosition, LPMENUITEMINFO ) DrawMenuBar( HWND ) // перерисовывает меню у окна LoadMenu( HINSTANCE, LPCTSTR lpMenuName ) // загрузить меню DestroyMenu( HMENU ) //
    • строковые таблицы LoadString( HINSTANCE, UINT uID, LPTSTR lpBuffer, nBufferMax ) // загрузка строки
    • ускорители LoadAccelerators( hInstance, lpTableName )
      DestroyAcceleratorTable( HACCEL )
    • версия
      • вроде явно грузить и не надо
  • строковые и числовые идентификаторы ресурсов
    • есть строковые, они прописаные в RC_файле
    • есть числовые, обычно, есть хжер ресурсов, который содержит айдишники и их значения
  • добавление custom ресурса
    • создать .rc файл и
    • добавить свой rc файл в Compile-Time directives