Dialogfenster wird in Windows XP falsch dargestellt



  • Mein Dialogfenster wird unter Windows XP mit aktivem Windows XP Theme falsch dargestellt. Der Effekt tritt auf, wenn bei geöffnetem Dialogfenster die Anwendung durch Betätigen der Windows Schaltfläches "Desktop anzeigen" minimiert wird und dann wieder hergestellt wird. Dann sind im Inneren des Fensterrandes 3 Pixel und oben sogar 29 Pixel des Fensters durchsichtig und ich kann den Desktop dort sehen. Dies tritt nur auf wenn der Windows XP Theme aktiviert ist. Bei meiner Anwendung ist es dann egal ob ich per manifest ebenfalls den XP Theme unterstütze oder das Manifest weglasse und die "alten" Controlls benutze.

    Hier ein Bild: http://img-up.net/?up=optionsY2FVhQFx.jpg

    Achja unter Win9x, WinME und WinVista funktioniert in das Proggy anstandslos. Ich bin jetzt echt ratlos, da ich noch VS6 benutze hab ich mir die die Funktionen "IsThemeActive" und "IsAppThemed" selbst zusammengestickt was soweit auch funktioniert, jetzt weiss mein Proggy zwar ob Theme läuft aber weiter bin ich nocht nicht. Mich wunderts daß dieses Problem hier noch nicht besprochen wurde, oder hab ich es übersehen?



  • Schreib mal den Source Code hier rein, du hast bestimmt etwas falsch bei den Koordinaten geschrieben !


  • Mod

    Und wie soll es ausehen? Hast Du da ein Tab-Control mit eingebaut, dass nicht sichtbar ist?



  • Schande über mich. Ich habe meinen Fehler entdeckt, und zwar hab ich die Events der Dialogbox falsch abgefangen, siehe die ausgeschaltete Zeile:

    LRESULT CALLBACK EH_User_Options_DLG(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    
    	switch (message){
    		case WM_INITDIALOG:
    			Init_Options(hWnd);
    			Init_TreeSelect(hWnd);
    			SetActiveWindow(GetDlgItem(hWnd, OP_SELECT_TREE));
    			break;
    		case WM_CLOSE:
    			EndDialog(hWnd, 0);
    			return 1;
    		case WM_DESTROY:
    			EndDialog(hWnd, 0);
    			return 1;
    		case WM_COMMAND:{
    			switch(LOWORD(wParam)){
    				case OP_DISCARD:
    					PostMessage(hWnd, WM_CLOSE, 0, 0);
    					break;
    				case OP_ACCEPT:
    					PostMessage(hWnd, WM_CLOSE, 0, 0);
    					break;
    				case OP_CANCEL:{
    					PostMessage(hWnd, WM_CLOSE, 0, 0);
    					break;
    				}
    				case OP_OK:{
    					PostMessage(hWnd, WM_CLOSE, 0, 0);
    					break;
    				}
    			}
    		}
    //		default: return DefWindowProc(hWnd, message, wParam, lParam);	//das hier war der Fehler, ohne diese Zeile läufts einwandfrei
    	}
    	return 0;
    }
    

Anmelden zum Antworten