PDA

View Full Version : [C++] Problema con la titlebar delle finestre


IceCoder
29-09-2008, 11:02
Buongiorno a tutti, ho un problema veramente strano con le API C++ per creare una finestra su windows.


hClientWnd = CreateWindowA("project_client", "Project", WS_THICKFRAME | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 100, 50, 1024, 768, NULL, NULL, hInst, NULL);



Quello che vedete è il codice che crea la finestra, ma in vari sorgenti (stranamente solo nei miei) mi è capitato di avviare l'eseguibile e notare che la finestra che appare possiede nella titlebar SOLTANTO la prima lettera della caption.
Esempio: in questo codice, la finestra dovrebbe avere in titlebar "Project", invece appare soltanto "P".... sapete dirmi dove sbaglio? Io non me ne sono mai accorto perchè alla fine i codici li scrivo tutti allo stesso modo..ormai sono mesi che mi capita e non riesco a venirne a capo da solo :/

Grazie a tutti in anticipo :)

71104
29-09-2008, 17:33
il problema si verifica quando passi una stringa Unicode ad una funzione ANSI. la chiamata esemplificativa che hai riportato nel tuo post è corretta, ma evidentemente nel codice hai passato la stringa "Project" o con la macro _T (avendo definito nel progetto la macro UNICODE prima di includere windows.h) o col prefisso L, quindi avresti fatto una chiamata analoga ad una delle seguenti due:
hClientWnd = CreateWindowA("project_client", _T("Project"), WS_THICKFRAME | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 100, 50, 1024, 768, NULL, NULL, hInst, NULL);
hClientWnd = CreateWindowA("project_client", L"Project", WS_THICKFRAME | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 100, 50, 1024, 768, NULL, NULL, hInst, NULL);
per risolvere usa la versione Unicode della funzione, oppure passa una stringa ANSI.

IceCoder
29-09-2008, 19:55
il problema si verifica quando passi una stringa Unicode ad una funzione ANSI. la chiamata esemplificativa che hai riportato nel tuo post è corretta, ma evidentemente nel codice hai passato la stringa "Project" o con la macro _T (avendo definito nel progetto la macro UNICODE prima di includere windows.h) o col prefisso L, quindi avresti fatto una chiamata analoga ad una delle seguenti due:


per risolvere usa la versione Unicode della funzione, oppure passa una stringa ANSI.

Ho provato sia ad utilizzare la versione unicode con le dovute correzioni alle due stringhe, che a dichiarare una variabile char e utilizzare quella..ma il problema persiste :/

EDIT: ho anche tentato di utilizzare la funzione SetWindowText, sia la versione ANSI che UNICODE ma non cambia nulla..