Avatar billede karlkoder Nybegynder
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
Avatar billede wisen Nybegynder
03. april 2001 - 09:26 #1
Jeg ved ikke lige med at finde fonten, men du kan sende en \"WM_SETFONT\" til edit-kontrollen for at loade den. Se her : http://msdn.microsoft.com/library/psdk/winui/controls_7v90.htm
Avatar billede vakseviggo Nybegynder
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...
Avatar billede wisen Nybegynder
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
Avatar billede karlkoder Nybegynder
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 ???
Avatar billede wisen Nybegynder
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 :)

Avatar billede wisen Nybegynder
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);
}
Avatar billede karlkoder Nybegynder
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
Avatar billede karlkoder Nybegynder
03. april 2001 - 10:23 #8
så ja.. fonten skal indlæses i en ny \'POPUP dialog box\'

-Karl
Avatar billede karlkoder Nybegynder
03. april 2001 - 10:24 #9
Den Dialog jeg knappen sidder på hedder \'1000\'
Avatar billede wisen Nybegynder
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å...
Avatar billede karlkoder Nybegynder
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..
Avatar billede wisen Nybegynder
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...

Avatar billede karlkoder Nybegynder
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.. ?? 
Avatar billede karlkoder Nybegynder
03. april 2001 - 10:49 #14
husk på det er IKKE MFC..  =(
Avatar billede karlkoder Nybegynder
03. april 2001 - 10:50 #15
The GetDlgItem function retrieves the handle of a control in the specified dialog box.

Avatar billede wisen Nybegynder
03. april 2001 - 10:54 #16
du skal bruge :

\"::InvalidateRect(m_Edit.m_hWnd, NULL, true);\"
Avatar billede karlkoder Nybegynder
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 ??)
Avatar billede wisen Nybegynder
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\"...
Avatar billede karlkoder Nybegynder
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 )
Avatar billede wisen Nybegynder
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...

Avatar billede karlkoder Nybegynder
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å...  =)
Avatar billede wisen Nybegynder
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 :(
Avatar billede karlkoder Nybegynder
03. april 2001 - 11:52 #23
Ved du forresten hvorfor at min tekst i min edit box er markeret ??

kan man slå det fra ??
Avatar billede wisen Nybegynder
03. april 2001 - 12:10 #24
Hmm, det ved jeg ikke lige....
Avatar billede karlkoder Nybegynder
03. april 2001 - 12:11 #25
kan der være deselect eller lignende funktion..
Avatar billede wisen Nybegynder
03. april 2001 - 12:16 #26
Det her burde fjerne selektionen :

SendMessage(m_Edit.m_hWnd, EM_SETSEL, (WPARAM) -1, (LPARAM) 0);

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester