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 schreibe

    case 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*


Anmelden zum Antworten