Seltsamer Dialog =)
-
Noch als kleiner Nachtrag: Selbst wenn ich eine einfach Message Box erscheinen lassen will (im ersten Codeteil), erscheint dieser erst nach drücken einer beliebigen Taste

-
Wie sieht denn dann dein korrigierter Code jetzt aus - aus deiner Beschreibung werde ich nicht so richtig schlau

-
Also hab noch ein wenig rumgedocktort
Also allgemein hat das Programm das Problem, wenn irgendetwas im WM_COMMAND case abgearbeitet werden soll:
Also ich schreibe zum Beispiel:case WM_COMMAND: MessageBox(NULL, "Hallo", "MyMessage", MB_OK); break;Selbst dabei muß ich erst irgendeine Taste drücken damit die MessageBox erscheint:
Wenn es vielleicht weiter hilft hier der MessageHandler zum Fenster:
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { int VertMin=0; int VertMax=VerticalFields * FieldHigth - WinY; int HorzMin=0; int HorzMax=HorizontalFields * FieldWidth - WinX; int iVertScrollPos = GetScrollPos(hWnd, SB_VERT); int iHorzScrollPos = GetScrollPos(hWnd, SB_HORZ); filesave[0] = NULL; SetScrollRange(hWnd, SB_VERT, VertMin, VertMax, TRUE); SetScrollRange(hWnd, SB_HORZ, HorzMin, HorzMax, TRUE); switch (msg) { case WM_VSCROLL: switch (LOWORD(wParam)) { if (VertMax > 0) { case SB_LINEDOWN: if (iVertScrollPos < VertMax) { iVertScrollPos+=FieldHigth; } break ; case SB_LINEUP: if (iVertScrollPos <= VertMax) { iVertScrollPos-=FieldHigth; } break; case SB_THUMBPOSITION: iVertScrollPos = HIWORD(wParam); break; case SB_PAGEUP: iVertScrollPos = 0; break; case SB_PAGEDOWN: iVertScrollPos = VertMax; break; default: return 0; break; } } SetScrollPos(hWnd, SB_VERT, iVertScrollPos, TRUE); InvalidateRect(hWnd, NULL, TRUE); return 0; break; case WM_HSCROLL: switch (LOWORD(wParam)) { case SB_LINERIGHT: if (iHorzScrollPos < HorzMax) { iHorzScrollPos+=FieldWidth; } break; case SB_LINELEFT: if (iHorzScrollPos > 0) { iHorzScrollPos-=FieldWidth; } break; case SB_PAGERIGHT: iHorzScrollPos = HorzMax; break; case SB_PAGELEFT: iHorzScrollPos = HorzMin; break; case SB_THUMBPOSITION: iHorzScrollPos = HIWORD(wParam); break; default: return 0; break; } SetScrollPos(hWnd, SB_HORZ, iHorzScrollPos, TRUE); InvalidateRect(hWnd, NULL, TRUE); return 0; break; // Irgendwo hier ist ein Problem =) case WM_COMMAND: switch (LOWORD(wParam)) { case MI_NEW: DialogBox(hInstMain, MAKEINTRESOURCE(DLG_DIALOG), hWnd, (DLGPROC) MapSetProc); break; } break; //Wo ist es bloß ???? case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_PAINT: if (NewMap == true || load == true) { Brett.drawMap(hWnd,hDC, iVertScrollPos); InvalidateRect(hWnd, NULL, FALSE); } return 0; // Return 0 end wichtig !!!! break; } return DefWindowProc(hWnd, msg, wParam, lParam); }
-
Reasar schrieb:
Also allgemein hat das Programm das Problem, wenn irgendetwas im WM_COMMAND case abgearbeitet werden soll:
Also ich schreibe zum Beispiel:case WM_COMMAND: MessageBox(NULL, "Hallo", "MyMessage", MB_OK); break;Selbst dabei muß ich erst irgendeine Taste drücken damit die MessageBox erscheint:
Das ist doch logisch - sonst bekommst du ja auch kein WM_COMMAND

-
Und deshalb muß ich eine Taste drücken ?
-
Acho so, versteh jetzt was du meinst
Ja aber das Problem habe ich ja auch wenn ich schreibecase WM_COMMAND: switch (LOWORD wParam)) { case ID_Test: MessageBox(NULL, "Hallo", "MyMessage", MB_OK); break; } break;Also hier bei ist ID_Test ein Menü Item
-
Das sollte dann kommen, wenn du den Menü-Eintrag anklickst

-
Das ist ja grade der springende Punkt :p Das tut es erst, wenn ich den Menüpunkt anklicke und dann eine beliebege Taste drücke
-
Mir fällt noch so auf, dass du in WM_PAINT den Fensterinhalt nirgendswo als gültig markierst.
D.h. Windows wird vermutl. laufen dein Fenster mit WM_PAINT Nachrichten zuspammen
Du solltest entweder BeginPaint() und EndPaint() benutzen oder ValidateRect() aufrufen...
-
Hatte den Code gar nicht so genau angeschaut, aber das von geeky ist natürlich vollkommen richtig.
Und dann noch InvalidateRect in WM_PAINT *schauder*