03. april 2001 - 01:13
Der er
25 kommentarer og 1 løsning
Font loading til en edit box i VC++ (ikke MFC)
Jeg er interesseret i at loade fontet TERMINAL til brug i en edit box (fonten kan ses i Notepad... en OEM/DOS font) Hvordan gør jeg det?? (ser ikke ud som om at at fonten ligger noget fysisk sted når man søger efter den) - Karl
Annonceindlæg fra Computerworld it-jobbank
03. april 2001 - 09:27
#2
Jeg kan desværre ikke hjælpe dig med hvordan man loader den font =( Men jeg kan fortælle dig at fonten hedder: \"Vgaoem.fon\" og ligger i c:\\windows\\fonts folderen. Håber at der er andre der kan hjælpe dig med koden...
03. april 2001 - 09:46
#3
Det her virker på min NT-maskine : < snip > LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = 12; strcpy(lf.lfFaceName, \"Terminal\"); HFONT hfont; VERIFY( hfont = CreateFontIndirect (&lf)); GetDlgItem(IDC_EDIT1)->SendMessage (WM_SETFONT, (UINT) hfont, 0L); GetDlgItem(IDC_EDIT1)->Invalidate(); < /snip > IDC_EDIT1 er et editfelt på dialogen... /wisen
03. april 2001 - 09:56
#4
Ser ud som om at koden virker fint indtil VERIFY.. VERIFY funktionen og GetDlgItem funktionen er MFC funktioner... Kender du nogle tilsvarende funktioner som IKKE ER I MFC ???
03. april 2001 - 10:06
#5
Ups, ja undskyld, jeg tænkte mig vist ikke om :) (1) Verify skal du bare skifte ud med hfont = CreateFontIndirect (&lf)); if ( hfont ) { GetDlgItem(IDC_EDIT1)->SendMessage (WM_SETFONT, (UINT) hfont, 0L); GetDlgItem(IDC_EDIT1)->Invalidate(); } (2) GetDlgItem skal du bare skifte ud med editfeltets hwnd, som du faktisk skal bruge i sendmessage(pEdit->hwnd, WM_SETFONT, (UINT) hfont, 0L); Invalidate() skal også laves om, men jeg kan ikke lige huske til hvad, når det er direkte API :)
03. april 2001 - 10:17
#6
Prøv med det her i stedet : LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = 12; strcpy(lf.lfFaceName, \"Terminal\"); HFONT hfont; hfont = CreateFontIndirect (&lf); if( hfont ) { ::SendMessage(m_Edit.m_hWnd, WM_SETFONT, (UINT) hfont, 0L); ::InvalidateRect(m_Edit.m_hWnd, NULL, true); }
03. april 2001 - 10:22
#7
Til WISEN..: skummelt.. virker ikke.. =( altså...: jeg har en dialog box hvorpå der en knap, hvis man trykker på denne sker der dette: DialogBox( inst2, (LPCTSTR) 3000, win, &ViewInfo ); Den der kode skal den ligge indeni denne kaldtes WM_INITDIALOG part ?? Hvad skal jeg skrive i stedet for GetDlgItem osv..?? min DialogBox hedder \'3000\' og editboxen hedder \'IDC_NFOBOX\' Mvh: Karl
03. april 2001 - 10:23
#8
så ja.. fonten skal indlæses i en ny \'POPUP dialog box\' -Karl
03. april 2001 - 10:24
#9
Den Dialog jeg knappen sidder på hedder \'1000\'
03. april 2001 - 10:30
#10
Jo, Initdialog er et godt sted at ligge koden. Det du skal have fat i, er bare et handle til det editfelt du vil sætte fonten på...
03. april 2001 - 10:41
#11
Jeg har lige sat denne kode ind i WM_INITDIALOG i den dialog hvor jeg ønsker at bruge fonten...: LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = 12; strcpy(lf.lfFaceName, \"Terminal\"); HFONT hfont; hfont = CreateFontIndirect (&lf); if ( hfont ) { HWND hej = GetDlgItem( h, IDC_NFOBOX ); SendMessage ( hej, WM_SETFONT, (UINT) hfont, 0L ); //HWND hej = GetDlgItem( h, IDC_NFOBOX ); //Invalidate(); } Bruger du de GetDlgItem funktioner for at få en pointer til vinduet så du kan bruge SendMessage funktionen ?? h = HWND i dialogboxen hvori jeg ønsker at bruge fonten..
03. april 2001 - 10:46
#12
Nej, GetDlgItem giver dig en \"CEdit\", men den har en membervariabel \"m_hWnd\", som er dens windowhandle, det er det du skal bruge...
03. april 2001 - 10:48
#13
ved ikke hvad der er galt.. =( men den laver noget med editboksen.. alt teksten forsvinder... Så den må jo næsten lave noget bare ikke til ende.. Kan det være den Invalidate() kommando.. ??
03. april 2001 - 10:49
#14
husk på det er IKKE MFC.. =(
03. april 2001 - 10:50
#15
The GetDlgItem function retrieves the handle of a control in the specified dialog box.
03. april 2001 - 10:54
#16
du skal bruge : \"::InvalidateRect(m_Edit.m_hWnd, NULL, true);\"
03. april 2001 - 11:10
#17
Ok... status... den laver fonten om... men den laver den ikke om til TERMINAL ser det ud til... =( Jeg skal vise de ascii tegn som er tilstede i DOS også... Og det gør den ikke... Hmmmmm... Kan det være fordi at fonten at usynlig at den ikke kan eller skal jeg kalde den med noget andet navn ?? (hvordan får du dine point ??)
03. april 2001 - 11:15
#18
Det kan være at du skal rode lidt med instilingerne på fonten, prøv at slå \"LOGFONT\" op i hjælpen... Ang. pointene, så burde der være en knap i bunden af dit billede, som hedder noget i retning af \"acceptér\"...
03. april 2001 - 11:16
#19
Da fonten er en OEM / DOS font skal jeg så sætte noget specielt op før at den gider at vise de specielle ascii tegn jeg ønsker ?? ( til ascii grafik )
03. april 2001 - 11:18
#20
Du kan prøve at med \"lf.CharSet = OEM_CHARSET\" ... Som sagt prøv at slå det op i hjælpen, der er en væld af muligheder og instillinger...
03. april 2001 - 11:26
#21
Det Virker... !!! =) =) =) =) =) =) Jeg TAKKER MANGE GANGE.... Nu mangler jeg bare at fylde en PROGRESS BAR op.. noget du også har tjeck på ?? jeg gir 150 point for den også... =)
03. april 2001 - 11:31
#22
Nej, desværre den har jeg kun leget med i MFC, at bruge den via API kender jeg ikke lige :(
03. april 2001 - 11:52
#23
Ved du forresten hvorfor at min tekst i min edit box er markeret ?? kan man slå det fra ??
03. april 2001 - 12:10
#24
Hmm, det ved jeg ikke lige....
03. april 2001 - 12:11
#25
kan der være deselect eller lignende funktion..
03. april 2001 - 12:16
#26
Det her burde fjerne selektionen : SendMessage(m_Edit.m_hWnd, EM_SETSEL, (WPARAM) -1, (LPARAM) 0);
Kurser inden for grundlæggende programmering