Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Terriermon

Frischling

  • »Terriermon« ist der Autor dieses Themas

Beiträge: 52

Wohnort: Finnland :-)

  • Private Nachricht senden

1

17.08.2005, 15:31

Listbox funktioniert nicht

Hallo,

ich arbeite gerade an einem Konfigurationsdialog für meine Engine, in dem man die Tastaturbelegung über eine 2spaltige Listbox einstellen können soll (wie in Tony Hawk 3). Ich erstelle die Listbox im Ressourcen-Editor (VC++ 6.0), und sie wird auch angezeigt, allerdings funktionieren die Nachrichten (LB_ADDSTRING und so weiter) nicht!
Mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
INT_PTR CALLBACK DialogProc(HWND hDlg, unsigned int uiMsg, WPARAM wParam, LPARAM lParam)
{
    char*   acText;
    acText = "Das ist ein\t Test."; // \t = Tabulator

    switch(uiMsg)
    {
    case WM_INITDIALOG:
        SendDlgItemMessage(hDlg, SETUP_CONTROLS, LB_ADDSTRING, 0, (LPARAM)(acText));
        break;

    case WM_CLOSE:
        EndDialog(hDlg, 1);
        break;

    default:
        return 0;
    }
return 1;
}


Listbox-Einstellungen:Sichtbar, Tabstopps,Auswahl Einzeln, Besitzerzeichnung fixiert, Mit Zeichenfolgen, Rand, Benachrichtigung, Vertik. Bildlauf, Keine Gesamthöhe

Wenn ich eine eigene Dialogbox erstellen will, wird diese auch nicht angezeigt:

C-/C++-Quelltext

1
2
3
4
5
6
    HWND hListBox;
    hListBox = CreateWindow("ListBox", NULL,
                 WS_CHILD | WS_VISIBLE,
                 308, 177, 166, 172,
                 hWnd, NULL, hInst, NULL);
    ShowWindow(hListBox, 0);


Kann mir jemand helfen???

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

17.08.2005, 16:55

Doch doch die funktionieren schon, aber du sendet die Message ja an deinen Dialog, nicht an die Listbox ;). Bei SendDlgItemMessage musst du als ersten Parameter das Handle (HWND) der Listbox angeben. Du übergibst das des Dialgoes. :D

Terriermon

Frischling

  • »Terriermon« ist der Autor dieses Themas

Beiträge: 52

Wohnort: Finnland :-)

  • Private Nachricht senden

3

17.08.2005, 16:57

Und wie finde ich das Handle dieser Listbox heraus? Ist das die Nummer, die in der resource.h steht (=SETUP_CONTROLS) ?

4

17.08.2005, 17:04

GetDlgItem(...)

kannst aber sicher auch das verwenden:
SendDlgItemMessage(...)
weil gegen dem was koschka schreibt steht hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/getdlgitem.asp

"hDlg
[in] Handle to the dialog box that contains the control."

Terriermon

Frischling

  • »Terriermon« ist der Autor dieses Themas

Beiträge: 52

Wohnort: Finnland :-)

  • Private Nachricht senden

5

17.08.2005, 17:14

Zitat von »"0x00000023"«

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/getdlgitem.asp

"hDlg
[in] Handle to the dialog box that contains the control."


Eben, da hab ich es ja auch gelesen! Aber wenn ich mit dem gleichen Befehl eine Combobox ansteuere

C-/C++-Quelltext

1
SendDlgItemMessage(hDlg, SETUP_RESOLUTION, CB_ADDSTRING, 0, (LPARAM)(acText));

funktioniert es!
Und mit GetDlgItem geht es auch nicht...

6

17.08.2005, 17:21

versuchs mal so:

CListBox *lb = (CListBox*)CWnd::GetDlgItem(...);
if (!lb){
//fehler
}

lb->AddString("asdasdasd");

hier noch ein link
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_clistbox.3a3a.addstring.asp


ach stop ich seh grad du arbeitest nicht mit der mfc....l*code anschau*

lol..deine frage, wie du an das handle deiner listbox kommen sollst ist lustig:

das ist der rückgabewert von CreateWindow("ListBox",...) !!!!
also: hListBox in SendMessage einsetzten:

lResult = SendMessage(
(HWND) hListBox,
(UINT) LB_ADDSTRING,
(WPARAM) wParam,
(LPARAM) "meinstring"
);

probier mal !

Terriermon

Frischling

  • »Terriermon« ist der Autor dieses Themas

Beiträge: 52

Wohnort: Finnland :-)

  • Private Nachricht senden

7

17.08.2005, 17:24

Aber CreateWindow funktioniert doch auch nicht, oder muss man das noch extra dazu schreiben??? :crying:

8

17.08.2005, 17:25

hab grade auch gesehen und post modifiziert. schau noch mal !

9

17.08.2005, 17:31

mal was anderes: wieso:
ShowWindow(hListBox, 0);
wäre
ShowWindow(hListBox, SW_SHOW);
nicht logischer ?
immerhin: SW_HIDE == 0 !
bedeutet das du mit ShowWindow(hListBox, 0); eigentl.
deine listbox unsichtbar machst

Terriermon

Frischling

  • »Terriermon« ist der Autor dieses Themas

Beiträge: 52

Wohnort: Finnland :-)

  • Private Nachricht senden

10

17.08.2005, 17:49

Jetzt wird die Listbox (CreateWindow) zwar angezeigt, aber ich kann sie trotzdem noch nicht mit SendMessage/LB_ADDSTRING befüllen...

Werbeanzeige