Я не могу изменить шрифт текста

#c #winapi #fonts

#c #winapi #шрифты

Вопрос:

Я хочу изменить шрифт текста, который пользователь вводит в текстовое поле. Вот путь к моему коду:

 HWND Edit = CreateWindowEx(...);
HFONT hfont = CreateFont(12, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "MS Sans Serif");
SendMessage(Edit, WM_SETFONT, WPARAM(hfont), TRUE);
  

Но я получаю какую-то странную ошибку. Странно, потому что все в Интернете используют этот метод, и, по-видимому, все в порядке. Вот сообщение об ошибке от gcc:

 C:UsersAdminDesktopwinapi>gcc main.c
main.c: In function 'WinMain':
main.c:86:32: error: expected expression before 'WPARAM'
  SendMessage(Edit, WM_SETFONT, WPARAM(hfont), TRUE);
                                ^~~~~~
In file included from c:mingwincludewindef.h:42:0,
                 from c:mingwincludewindows.h:42,
                 from main.c:1:
main.c:86:2: error: too few arguments to function 'SendMessageA'
  SendMessage(Edit, WM_SETFONT, WPARAM(hfont), TRUE);
  ^
In file included from c:mingwincludewindows.h:48:0,
                 from main.c:1:
c:mingwincludewinuser.h:4157:27: note: declared here
 WINUSERAPI LRESULT WINAPI SendMessageA (HWND, UINT, WPARAM, LPARAM);
                           ^~~~~~~~~~~~
  

Какие есть способы это исправить?

Комментарии:

1. Если вы не используете WPARAM(), жалуется ли он на недопустимое приведение?

2. #pragma comment(библиотека, «Gdi32.lib») (Пожалуйста, избавьтесь от MinGW)

3. комментарий #pragma(библиотека, «Gdi32.lib») изменил не все.

4. Пожалуйста, избавьтесь от MinGW . Но альтернатив нет.

5. Как насчет Visual Studio?

Ответ №1:

Это разница между C и C, в C это должно быть:

 SendMessage(Edit, WM_SETFONT, (WPARAM)hfont, TRUE);
  

Даже при представлении кода winapi большинство примеров, не относящихся к Microsoft, скорее всего, предполагают использование компиляции C .