Стили классов в WNDCLASS, на что они ссылаются? Win32 - PullRequest
0 голосов
/ 03 марта 2012

что означает классовый стиль на самом деле?это смутило меняэто из MSDN: style Определяет стиль (ы) класса.Этот член может быть любой комбинацией стилей класса.

typedef struct _WNDCLASS { 
    UINT       style; 
    WNDPROC    lpfnWndProc; 
    int        cbClsExtra; 
    int        cbWndExtra; 
    HINSTANCE  hInstance; 
    HICON      hIcon; 
    HCURSOR    hCursor; 
    HBRUSH     hbrBackground; 
    LPCTSTR    lpszMenuName; 
    LPCTSTR    lpszClassName; 
} WNDCLASS, *PWNDCLASS; 

1 Ответ

5 голосов
/ 03 марта 2012

Стили классов - это свойства, которые влияют на каждый экземпляр окна этого определенного класса.Чтобы уточнить, давайте сравним свойства экземпляра окна со свойствами класса ниже.Предполагается, что вы создаете новый класс Windows с именем MyCoolControl и создаете несколько его экземпляров:

  • Каждый экземпляр будет иметь свое собственное местоположение, текст окна, а также включенное и видимое состояние - этиявляются свойствами экземпляра окна, и вы можете установить их в одном окне независимо от других.

  • Однако все экземпляры этого элемента управления будут использовать тот же WndProc, как указано в WNDCLASS, который выиспользовать для создания класса.Они также будут иметь те же свойства класса, например, будут ли окна получать сообщения двойного щелчка вместо двух отдельных сообщений щелчка (бит стиля класса CS_DBLCLKS), или будет ли окно полностью перерисовано при изменении размера (CS_HREDRAW, CS_VREDRAW), илиокна имеют тень (CS_DROPSHADOW).Полный список стилей классов приведен в MSDN здесь .

Так, например, если вы хотите, чтобы у окна была граница или нет, это окнобит стиля (WS_BORDER), и вы указываете его как значение стиля окна в CreateWindow (или можете изменить его позднее для каждого окна с помощью SetWindowLongPtr (GWL_STYLE)), и это влияет только на это окно.Но если вы хотите создать окно с тенью, вы указываете это в элементе стиля WNDCLASS, и оно влияет на все экземпляры этого класса.

(Есть некоторые исключения из этого - WndProcуказанный в WNDCLASS действительно является стандартным wndproc для этого класса окон, вы можете переопределить его для каждого экземпляра, если хотите. Но общая картина по-прежнему в основном та же: стили WNDCLASS и CS_ являются общими настройками,в то время как единицы WS_ и параметры для CreateWindow являются специфическими для этого одного окна.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...