SetFocus beep ?



  • Hi,..

    ich habe mir eine art dialogbox gebastelt, diese enthält
    zwo edit boxen.

    diese editboxen habe ich gesubclast um tab und enter abzufangen.

    Wenn ich Enter oder Tab drücke bekomme ich ein Beep!
    Kann ich das abstellen?

    HWND __getnext_handle(size_t now, size_t __max)
    	{
    
    		for( size_t i=0; i<MAX_TAB;i++)
    			{
    				now=__next(now,__max);
    				if(
    					hTabHandle[now]
    					) return hTabHandle[now];
    			};
    		return NULL;
    	};
    
    LRESULT CALLBACK KeySubClass(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
    	{
    if(!hWnd) return 0;
    
    size_t iIndex=0;
    for(size_t i=0; i<MAX_TAB; i++)
    	{
    		if(hWnd==hTabHandle[i])
    			{iIndex=i;}
    	};
    switch(msg)
    	{
    	case WM_KEYDOWN:
    		{
    			if(VK_TAB==wParam)
    				{
    					SetFocus(__getnext_handle(iIndex,MAX_TAB));
    				};
    			if(VK_RETURN==wParam)
    				{
    					PostMessage(GetParent(hWnd),MSG_OK,NULL,NULL);
    				};
    			return 0;
    		};
    
    	default: break;
    	};
    
    return CallWindowProc(wpOld[iIndex],hWnd,msg,wParam,lParam);	
    };
    


  • Für gesubclasste Edit-Controls sollte kein beep ertönen. Ich setze hierfür allerdings WM_KEYUP ein.


  • Mod

    1. Wenn ds ein Dialog ist kannst Du einfach EndDialog benutzen.
    2. Gibt es die nette Nachricht WM_NEXTDLGCTL die man eher benutzen sollte als SetFocus
    Siehe http://blog.m-ri.de/index.php/2007/08/24/setfocus-versus-wm_nextdlgctl/
    Damit sparst Du dir auch den unsinnigen Array...

    BTW: Man kann auch GetNextDlgTabItem benutzen um das nächste Tab-Control zu ermitteln.
    http://msdn.microsoft.com/en-us/library/ms645495(VS.85).aspx



  • @ Martin Richter, Er will aber Subclasses einsetzen und damit Tastatureingaben in Edit-Controls abfangen, die dort standardgemäss nicht berücksichtigt werden. Ein beep gehört da einfach nicht hin. Kann sein, dass man return und tab auch anders regeln kann - wie du das vorschlägst. Nachvollziehen kann ich das Problem mit dem beep jedoch auch nicht. Bei mir gibt es da keine beeps.


Log in to reply