/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Windows GUI komponenter
Fra : Simon Veith Reinholt


Dato : 28-05-01 15:23

Jeg har forsøgt at lave windows komponenter som knapper, listboxe's osv, men
jeg synes ikke helt de ser ud som de bør ;) Teksten på komponenterne er
skrevet med System fonten.... og den er ikke videre fancy...
I mit program laver jeg kanppen med følgende kald:

windowhandle =
CreateWindowEx(WS_EX_WINDOWEDGE,TEXT("BUTTON"),captiontext,WS_CHILD |
WS_VISIBLE,x,y,width,height,hwndparent,(HMENU)id,((LPCREATESTRUCT)lParam)->h
Inst
ance,(LPCREATESTRUCT)lParam);

Hvad gør jeg galt?

mvh Simon




 
 
Simon Veith Reinholt (28-05-2001)
Kommentar
Fra : Simon Veith Reinholt


Dato : 28-05-01 15:25

Lige en ting mere.... :)

Iøvrigt er f.x. listboxen helt flad. Dvs. den har ingen 3d border men bare
en sort kant. Til gengæld ser knapperne rigtige ud.... ... meget mystisk...






Chris (28-05-2001)
Kommentar
Fra : Chris


Dato : 28-05-01 19:44

On Mon, 28 May 2001 16:24:32 +0200, "Simon Veith Reinholt"
<haze@ostenfeld.dtu.dk> wrote:

>Lige en ting mere.... :)
>
>Iøvrigt er f.x. listboxen helt flad. Dvs. den har ingen 3d border men bare
>en sort kant. Til gengæld ser knapperne rigtige ud.... ... meget mystisk...

Fjern WM_BORDER i under dwStyle og tilføj WS_EX_CLIENTEDGE under
dwExStyle.

Hygge
Chris

Chris (28-05-2001)
Kommentar
Fra : Chris


Dato : 28-05-01 19:48

On Mon, 28 May 2001 16:23:21 +0200, "Simon Veith Reinholt"
<haze@ostenfeld.dtu.dk> wrote:

>Jeg har forsøgt at lave windows komponenter som knapper, listboxe's osv, men
>jeg synes ikke helt de ser ud som de bør ;) Teksten på komponenterne er
>skrevet med System fonten.... og den er ikke videre fancy...
>I mit program laver jeg kanppen med følgende kald:
>
>windowhandle =
>CreateWindowEx(WS_EX_WINDOWEDGE,TEXT("BUTTON"),captiontext,WS_CHILD |
>WS_VISIBLE,x,y,width,height,hwndparent,(HMENU)id,((LPCREATESTRUCT)lParam)->h
>Inst
>ance,(LPCREATESTRUCT)lParam);
>
>Hvad gør jeg galt?

Udskift WS_EX_WINDOWEDGE med et 0 (nul).

For at ændre fonted skal du sende beskeden WM_SETFONT til vinduet
(knappen):

SendMessage (windowhandle, WM_SETFONT, (WPARAM) hFont, 0);

hFont er din handle til den font, som du vil benytte i stedet for
systemfonten.

Hygge
Chris

Simon Veith Reinholt (28-05-2001)
Kommentar
Fra : Simon Veith Reinholt


Dato : 28-05-01 21:09

Er der en systemdefineret font? Eller hvor kan jeg finde et handle til den
font windows bruger? Det kan vel ikke være meningen at hvert eneste program
skal loade en font bare for at tegne en knap...

mvh Simon

> Udskift WS_EX_WINDOWEDGE med et 0 (nul).
>
> For at ændre fonted skal du sende beskeden WM_SETFONT til vinduet
> (knappen):
>
> SendMessage (windowhandle, WM_SETFONT, (WPARAM) hFont, 0);
>
> hFont er din handle til den font, som du vil benytte i stedet for
> systemfonten.
>
> Hygge
> Chris



Chris (28-05-2001)
Kommentar
Fra : Chris


Dato : 28-05-01 21:39

On Mon, 28 May 2001 22:09:05 +0200, "Simon Veith Reinholt"
<haze@ostenfeld.dtu.dk> wrote:

>Er der en systemdefineret font? Eller hvor kan jeg finde et handle til den
>font windows bruger? Det kan vel ikke være meningen at hvert eneste program
>skal loade en font bare for at tegne en knap...

Jo!

Du skal bruge LOGFONT strukturen til at skabe din font, og derefter
sende en WM_SETFONT til knappen.

Inden dit program afsluttes skal du huske at kalde DeleteObject på din
font.

Jeg har skrevet en lille funktion, som jeg selv bruger til nemt at
hente de fonte, som jeg bruger (se nedenstående).

Så bruger jeg den sådan:
<snip>
HFONT hFont;
</snip>
<snip>
WM_CREATE:
SendMessage (hwnd, WM_SETFONT, (WPARAM) hFont = GetFont ("Tahoma",
13, FW_NORMAL), 0);
</snip>
<snip>
WM_DESTROY:
DeleteObject (hFont);
</snip>

Er det ikke nemt?

Hygge
Chris

PS. Sorry! Jeg udgiver under GPL, så hvis du bruger min funktion, så
vær venlig også at medtage license beskrivelsen.

/* GetFont.c
* Copyright (C) 2001 by Next Generation
* Written by Chris Hansen.
*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License as published
by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*
* NEXT GENERATION on the Web: www.nextgeneration.dk
* CONTACT: info@nextgeneration.dk
*/

#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>

HFONT
GetFont (const char *lpFont, long fSize, long fWeight)
{
LOGFONT logfont;
HFONT hFont;

logfont.lfHeight = fSize;
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = 0;
logfont.lfWeight = fWeight;
logfont.lfItalic = 0;
logfont.lfUnderline = 0;
logfont.lfStrikeOut = 0;
logfont.lfCharSet = DEFAULT_CHARSET;
logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
lstrcpy (logfont.lfFaceName, lpFont);
hFont = CreateFontIndirect (&logfont);

return hFont;
}


Chris (28-05-2001)
Kommentar
Fra : Chris


Dato : 28-05-01 23:03

On Mon, 28 May 2001 22:09:05 +0200, "Simon Veith Reinholt"
<haze@ostenfeld.dtu.dk> wrote:

>Er der en systemdefineret font? Eller hvor kan jeg finde et handle til den
>font windows bruger? Det kan vel ikke være meningen at hvert eneste program
>skal loade en font bare for at tegne en knap...

Jamen, sådan er det, når man laver rå API-programmering. Alt skal
skrives fra bunden. Men det gør det også nemt for dig at skabe en GUI,
som du synes er for syret

Med MFC og lignende er man begrænset til den slags ting. Til gengæld
skal der færre kodelinjer til at skabe en applikation.

Så kan man selv vælge sit udgangspunkt: Et program man selv er
(næsten) 100% herre over eller et program, hvor Microsoft har lavet
det hårde arbejde og som begrænser din frihed.

Hygge
Chris

Anders And (29-05-2001)
Kommentar
Fra : Anders And


Dato : 29-05-01 10:32

"Simon Veith Reinholt" <haze@ostenfeld.dtu.dk> wrote in message
news:9eub5h$h4d$1@eising.k-net.dk...
> Er der en systemdefineret font? Eller hvor kan jeg finde et handle til den
> font windows bruger? Det kan vel ikke være meningen at hvert eneste
program
> skal loade en font bare for at tegne en knap...

Brug GetStockObject() - SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));

Det er desuden god skik generelt at bruge GetSysColor(), GetSystemMetrics()
etc. til alt hvad du laver - i hvert fald hvis ikke du med vilje vil give
dit GUI et non-standard udseende. Lad være med at bruge absolutte værdier
svarende til dem, du tilfældigvis har dit system sat op til.

Kristian



Simon Veith Reinholt (30-05-2001)
Kommentar
Fra : Simon Veith Reinholt


Dato : 30-05-01 13:47

> Brug GetStockObject() - SelectObject(hdc,
GetStockObject(DEFAULT_GUI_FONT));
Det var vist den jeg ledte efter.....

takker - også jer andre.. :)





Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste