проблема с использованием WM_GETFONT со стандартным flatstyle - PullRequest
2 голосов
/ 31 декабря 2010

Я пытаюсь получить шрифт кнопки в других приложениях.

Когда я пытаюсь WM_GETFONT, он возвращает 0. Это мой код:

[DllImport("User32.DLL")] public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 

IntPtr fx = SendMessage(button1.Handle, 0x31, 0, 0); 

Мне известна причина проблемы из-за свойства FlatStyle

Смотрите эту ссылку

http://www.siao2.com/2008/09/26/8965526.aspx

Как я могу решить эту проблему?

Я использую C # под Windows 7.

1 Ответ

2 голосов
/ 31 декабря 2010

Вы получаете это значение, потому что проверяемый элемент управления использует системный шрифт по умолчанию.
Если пользовательский шрифт не был явно указан, это именно те значения, которые вам следуетОжидайте.

Сообщение WM_GETFONT всегда будет возвращать 0 (или NULL), если системный шрифт по умолчанию используется для рисования текста элемента управления.Согласно документации :

Возвращаемое значение является дескриптором шрифта, используемого элементом управления, или NULL, если элемент управления использует системный шрифт.

Аналогично для функции GetTextFace.В этом случае документация к связанному сообщению WM_SETFONT дает некоторые поясняющие сведения: если значение wParam равно NULL, элемент управления будет использовать системный шрифт по умолчанию для рисования своего текста.


Очевидно, вы не не изменили шрифт, или, по крайней мере, Windows не думает, что вы это сделали.Вы упоминаете, что пытаетесь получить шрифт других приложений - как вы меняете шрифт, который используется для рисования текста на элементах управления в другом приложении?

Если вы измените свойсистемный шрифт по умолчанию, описанное выше поведение остается в силе, независимо от того, отличается ли то, что вы видите на экране.

Если вы отправляете сообщение WM_SETFONT, возможно, вы забыли сообщить элементу управленияэто должно перерисовать себя.Снова, извлекая из документации, связанной с выше:

lParam

Слово младшего разряда lParam указывает, должен ли элемент управления перерисовываться сразу после установкишрифт.Если этот параметр равен TRUE, элемент управления перерисовывается сам.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...