[ Foro de C++ ]

La fuente con WINAPI

31-Jan-2020 21:05
Jorge d r (+1)
2 Respuestas

Buenas me he metido un lío con la API y me gustaría cambiar la fuente de unos controles edit pero no salgo. Lo hago de la siguiente manera y no me funciona:
hfont = (HFONT)GetStockObject(SYSTEM_FONT); // es una fuente del stock de fuentes del sistema
int idc = 8000;
HDC hdc;
HFONT hfont_anterior;
for (int i = 0; i < dimension; i++) {
for (int x = 0; x < dimension; x++) {

hMatriz_[i][x] = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, L"EDIT", L"", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,
79 + (x * ancho) ,36 + (i * alto), /* Posición */ 40, 25, /* Tamaño */ hwnd,  (HMENU)idc++,  datos->instancia, NULL);
hdc = GetDC(hMatriz_[i][x]);
(HFONT)SelectObject(hdc, hfont);

}
}
A ver si me podeis ayudar alguno no estoy seguro de que esto se haga así la verdad no tengo ni idea.
Gracias


02-Feb-2020 08:36
Nacho Cabanes (+83)

Te respondo... pero para decir que no te puedo ayudar... hace muchos años que no toco la API. Desde que surgieron herramientas visuales como Visual Basic, Delphi, o, más recientemente, Visual C++ y Visual C#. Incluso en los primeros tiempos de la programación Windows no visual (hace casi 30 años) no hice cosas avanzadas, y ya no recuerdo lo poco que llegué a aprender, porque era tremendamente engorroso.


02-Feb-2020 17:27
Jorge d r (+1)

Gracias de todas maneras, pues ahí estoy dándolo todo con la API.
Al final conseguí arreglarlo de la siguiente manera por a alguien le sirve.
Primero creo mi propia fuente.
hfont = CreateFont(15, 0, 0, 0, 300, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, DEFAULT_PITCH | FF_ROMAN, L"Times New Roman");
y luego con el mensaje WM_SETFONT se la meto a hm[i][x] que es un array de manipuladores de edits.
SendMessage(hm[i][x], WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE, 0));
No se porque con las fuentes de stock no funcionaba, o quizás es que no enviaba el mensaje SETFONT y lo hacía a través del DC. Misterios sin resolver.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)