Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Icon, Edit Feld, Farbe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.09.2004, 17:39 Uhr
A-l-e-x



Hi,
ich versuche gerade eine Anwendung ohne MFC zu machen. Hab auch schon was geschafft. Ich benutze DialogBox(…) . Hab jetzt aber einpaar Fragen:

1. Das Icon für die Anwendung hab ich hinbekommen LoadIcon(hInstance, MAKEINTRECOURCE(IDI_ICON1)) bloß das Kleine oben links kann ich nicht.

2. Das setzten des Textes eines Edit-Feldes kann ich mit SetDlgItemText(…) machen aber das lesen kann ich nicht. Hab schon mit GetDlgItemText(…) oder SendMessage(…) versucht aber gescheitert.

3. Wie färbe ich die Schrift bei Edit-Felder? Bin an SetBkMode(…) gescheitert.

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.09.2004, 18:37 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


1. Was meinst du mit "Icon für die Anwendung"?
2. Eine genauere Beschreibung wie du es versucht hast und die Rückgabewerte der Funktionen wären hilfreich.
3. Dazu gabs hier schonmal was, einfach mal die Suchfunktion benutzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.09.2004, 19:31 Uhr
A-l-e-x



1. Icon für die Anwendung ist das Icon was z.B. auf dem Desktop angezeigt wird. Kann ich. Das andere Kleine was auf der Titelleiste sitzt, will ich setzten!

2. Mit der Funktion hab ich rumprobiert und hab sie so versucht aus der was rauszuquetschen:

LPSTR string; // Die Variable sollte den Wert aufnehmen
GetDlgItemText(hWnd, IDC_EDIT1, string, sizeof(string));

// hab auch so versucht
char* a;
a = GetDlgItemText(hWnd,IDC_EDIT1, string, sizeof(string));

// auch so a = (char*)GetDlgItemText(…);
// doch nix funkt.

3. Hab auch geguckt. Bei SetTextColor brauch ich ein HDC, was ich nicht habe. Hab nur die ID des Edit Feldes. Bei SetBkMode brauche ich das auch. (Frage mich ob es die gleiche Funktion ist, denn sie nimmt die gleichen Parameter). Mit MFC hab ich das so gemacht

pDC->SetTextColor(RGB(255, 0, 0));

Geht aber nicht, da ich pDC auch nicht habe, oder etwa doch?

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.09.2004, 19:49 Uhr
Oliver
S2-Pixelgeneral


zu 1.) Bei den Parametern von der WNDCLASSEX Struktur gibt es noch einen Parameter (weiß jetzt nicht wie er heißt) wo du das kleine Icon einstellen kannst.

zu 2.) Probiere es mal mit GetWindowText(). Erst die Länge mit GetWindowTextLength ermitteln, dann Speicher allocieren und dann GetWindowTExt aufrufen.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.09.2004, 20:08 Uhr
~CDW
Gast


1) versuchs mal damit:

SendMessage,hWnd,WM_SETICON,TRUE,Iconhandle
dabei ist die hWnd das Handle zum Fenster... alles andere sollte eigentlich selbsterklärend sein (sorry dass ich kein C++ Syntax kann)

2)so wie ich das sehe erwartet GetDlgItemText hier die Adresse des strings:
LPTSTR lpString, // address of buffer for text
und
aufjedenfall liefert die funktion nur die anzahl der eingelesenen zeichen zurück
wenn ich das richtig weiß dann ist LPTSTR nur ein Pointertyp... irgendwo müsstest du schon Speicherplatz reservieren

Zitat:
LPTSTR A 32-bit pointer to a character string that is portable for Unicode and DBCS.


und winAPI ist eher C-Style, also einfach mal mit einem klassischen chararray versuchen
oder zumindest nicht nur einen leeren pointer angeben (ich bin des C++ nicht mächtig, aber ob hier automatisch ein chararray angelegt wird ?)

zu 3:
in deine Messageloop noch eine WM_CTLCOLOREDIT verarbeitung einfügen:


Code:
.ELSEIF uMsg==WM_CTLCOLOREDIT
        INVOKE SetTextColor,wParam,0ffba43h
        INVOKE SetBkColor,wParam,03f3333h
        
        mov eax, hBrush
        cmp eax, 0
        jne BrushAlreadyCreated

        invoke CreateSolidBrush,03f3333h
        mov hBrush, eax
        BrushAlreadyCreated:
          mov eax, hBrush
        ret


ok, ist zwar masm, aber ich glaube die erforderliche Struktur und die Apis sind ersichtlich (bevor ich hier falsches C++ poste )
zu de
du fragst einfach ab ob eine Brush besteht und wenn nicht erschaffst du eine
vielleicht hilft dir das etwas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.09.2004, 20:15 Uhr
Spacelord
Hoffnungsloser Fall


Sowohl LPSTR als auch char* sind nur Zeiger! Da muss schon Speicher hinter stehen.
Leg doch einfach nen Puffer an.

C++:
char puffer[256];
GetDlgItemText(hWnd, IDC_EDIT1, puffer, sizeof(puffer));



Zum zweiten Teil deines Problems:
Du brauchst ein Handle deines Dialogs,das werde ich hier im Beispiel jetzt hDlg nennen.


C++:
COLORREF oldColor;
COLORREF newColor= 0x00ff0000;
HWND hCtrl = GetDlgItem(hDlg,IDC_EDIT1);
HDC theDC = GetDC(hCtrl);
oldColor=SetTextColor(theDC,newColor);
.......



So sollte es eigentlich was werden.


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.09.2004, 19:37 Uhr
A-l-e-x



1) @Oliver: ich weis das in der WNDCLASSEX sowas geht. Blos hab ich extra oben erwent, dass ich den Dialog aus der Resoure hole un mit DialogBox(...) erstelle. So habe ich diese Klasse nicht und kann jetzt schwer auf die zugreifen. Wenn ich die hätte würde die Frage ja erübrigen.

2) @Spacelord: Klappt

3) Bin jetzt auch nicht schlauer. Hab bei der initalisirung (WM_INITDIALOG) und da wo CDW vorgeschlagen hat (WM_CTLCOLOREDIT) den Code von Spacelord versucht reinzusetzen. Leider ohne Erfolg.

@Spacelord: Die letze Zeile vestehe ich nicht. Wozu soll man die Farbe (in oldColor)speichern wenn sie schon gespeichert ist (bei mewColor).

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.09.2004, 20:35 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


zu 1: Windows nimmt automatisch das erste Icon in der Anwendung und zeigt es im Explorer und so an, dum usst dazu also nicht extra was machen. Um eins in der Titelleiste darzustellen nimmst du am besten, wie schon erwähnt, WM_SETICON.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.09.2004, 20:37 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
das speichern der Farbe ist nicht zwingend!SetTextColor liefert als Ergebnis die alte COLORREF Struktur zurück(eventuell brauchst du die ja nochmal?).

Wenn du WM_CTLCOLOREDIT bearbeitest musst du einen Brush für den Hintergrund zurückgebeben.

Zeig mal deine Routine.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.09.2004, 18:47 Uhr
A-l-e-x



zu 1) Hab mit SendMessage(hWnd, WM_SETICON, TRUE, IDC_ICON1) bei WM_INITDIALOG versuch. Es ist da jetzt zwar kein Icon aber eine leere Stelle.

zu 3) Hab so versucht

C++:
WM_CTLCOLOREDIT:
HWND hCtrl = GetDlgItem(hWnd, IDC_EDIT1);
HDC theDC = GetDC(hCtrl);
SetTextColor(theDC,RGB(255,0,0));
break;



ohne Erfolg

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: