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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

21

07.10.2007, 19:25

errrrrrr geht es nun um den Codestyle oder um das Problem? Warum fehlt bei dem Codeausschnitt die WndProc? Also gerade der Teil der interessant ist? Den wollte ich als komplettes Konstrukt sehen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Sheddex

unregistriert

22

07.10.2007, 19:30

lol, die hab' ich jetzt echt vergessen^^

Also, hier ist sie:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
RESULT Window::Proc(HWND Window, UINT Message, WPARAM WParam, LPARAM LParam)
{
  for (std::map<std::wstring, ListBox>::iterator i = ListBoxes.begin(); i != ListBoxes.end(); ++i)
    i->second.Changed = false;

  for (std::map<std::wstring, ComboBox>::iterator i = ComboBoxes.begin(); i != ComboBoxes.end(); ++i)
    i->second.Changed = false;

  switch (Message)
  {
    case WM_COMMAND:
    {
      for (std::map<std::wstring, ListBox>::iterator i = ListBoxes.begin(); i != ListBoxes.end(); ++i)
      {
        if (LParam == reinterpret_cast<LPARAM>(i->second.Handle) && HIWORD(WParam) == LBN_SELCHANGE)
          i->second.Changed = true;
      }

      for (std::map<std::wstring, ComboBox>::iterator i = ComboBoxes.begin(); i != ComboBoxes.end(); ++i)
      {
        if (LParam == reinterpret_cast<LPARAM>(i->second.Handle) && HIWORD(WParam) == CBN_SELCHANGE)
          i->second.Changed = true;
      }
    } break;

    default:
    {
      return DefWindowProc(Window, Message, WParam, LParam);
    }
  }

  return 0;
}


Da gibt's aber eigentlich nichts Neues zu sehen.

@David_pb: Was genau findest du daran eigentlich so schlimm?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

23

07.10.2007, 19:34

Zitat von »"DragonFlame"«


@David_pb: Was genau findest du daran eigentlich so schlimm?


Die Idee die hinter diesem Codefragment steckt ist zwar interessant, aber ich finde sowas sollte eine Idee bleiben und nicht eingesetzt werden. DAS ist daran schlimm. Ansonsten ist der Code, wie gesagt, ganz ok aber halt verbesserungswürdig. Auf die Details geh ich jetzt nicht ein, da Nox ja bereits zum Thema zurück führte.
@D13_Dreinig

Sheddex

unregistriert

24

07.10.2007, 20:31

Ich habe jetzt per Zufall rausgefunden, dass es mit CBS_DROPDOWN funktioniert, mit dem von mir die ganze Zeit verwendeten CBS_DROPDOWNLIST jedoch nicht.
Ich kann mir das überhaupt nicht erklären, ich habe auch in keinem über Google gefunden Code irgendein #define oder sonstwas gesehen...
Weiß jemand, warum es so nicht funktioniert?

25

07.10.2007, 20:46

Ehm naja deine Klasse hat einen großen Nachteil: Du kannst sie nur mühselig erweitern. Das solltest du dir als 1. überlegen und dann darauf kommen das dein Klassendesign sehr fragwürdig ist. Wenn du das Problem beseitigt hast und dein Klassendesign keine groben Schnitzer mehr drin hat, dann kannst du ans Implementieren gehen.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

26

07.10.2007, 20:57

Ich glaube die Lösung ist ganz simpel. Deine Nachricht LBN_SELCHANGE kommt rein->er setzt die Einträge in der Map zurück->du setzt das Change auf true. Eine andere Nachricht kommt rein->er setzt die Einträge in der Map zurück->Change ist wieder auf false.


Teste mal ob obige Überlegung der Fall ist.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Sheddex

unregistriert

27

07.10.2007, 21:14

Ja, das Design ist wirklich schlecht, das will ich schon noch ändern.

So und jetzt geht ein großer Dank an Nox, es geht jetzt.
Und irgendwie war die Lösung wirklich verdammt simpel...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Window::Update(void)
{
  MSG Message;

  for (std::map<std::wstring, ListBox>::iterator i = ListBoxes.begin(); i != ListBoxes.end(); ++i)
    i->second.Changed = false;

  for (std::map<std::wstring, ComboBox>::iterator i = ComboBoxes.begin(); i != ComboBoxes.end(); ++i)
    i->second.Changed = false;

  GetMessageW(&Message, NULL, 0, 0);
  TranslateMessage(&Message);
  DispatchMessageW(&Message);
}


Nochmal vielen Dank an alle, die sich den Code durchgelesen haben.

Werbeanzeige