none
Problemi Message Handler con ListBox RRS feed

  • Discussione generale

  • Salve a tutti,

    Nel file intestazione della mia classe CEnroll ho definito una costante enumerativa WMUS=WM_USER+1 e una funzione AddStatus per inviare messagi ad una listbox presente nell'interfaccia. Ovviamente ho anche definito un Message Handler indicando la mia costante WMUS e la funzione Notify che nel mio caso, a secondo della situazione, dovrebbe settare attraverso la funzione addstatus una stringa nella list box.

    il problema è che se chiamo addstatus con un bottone la stringa viene settata correttamente, quindi la funzione in se non ha problemi, ma se chiamo WMUS attraverso una funzione della SDK di un device USB, nella OnInitDialog della classe, la listbox non viene settata.

    La funzione mi chiede, oltre all' HWND della finestra che setto a m_hwnd, di specificare ULONG umsg ed io inserisco la mia costante WMUS.

     

    Grazie In anticipo a tutti quelli che si interesseranno.

    Di seguito riporto il codice del file intestazione:

    class CEnroll : 
    	public CAxDialogImpl<CEnroll>
    {
    public:
    	CEnroll()
    	{
    	}
    
    	~CEnroll()
    	{
    	}
    
    	enum { IDD = IDD_ENROLL };
    	enum { WMUS = WM_USER+1};
    
    BEGIN_MSG_MAP(CEnroll)
    	MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    	COMMAND_HANDLER(IDOK, BN_CLICKED, OnClickedOK)
    	COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel)
    	CHAIN_MSG_MAP(CAxDialogImpl<CEnroll>)
    	COMMAND_HANDLER(IDC_BUTTON1, BN_CLICKED, OnBnClickedButton1)
    	MESSAGE_HANDLER(WM_MOVE, OnMove)
    	MESSAGE_HANDLER(WMUS, Notify)
    END_MSG_MAP()
    
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    
    LRESULT OnClickedOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    	{
    		EndDialog(wID);
    		return 0;
    	}
    
    LRESULT OnClickedCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    	{
    		EndDialog(wID);
    		return 0;
    	}
    LRESULT OnBnClickedButton1(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
    	LRESULT OnMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    	
    void AddStatus(LPCTSTR s);
    LRESULT Notify(UINT uMsg, WPARAM wParam, LPARAM lParam,BOOL& bHandled);
    	};
    
    

     

    Qui il codice del file .cpp:

     

    LRESULT CEnroll::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){
    CAxDialogImpl<CEnroll>::OnInitDialog(uMsg, wParam, lParam, bHandled);
    	bHandled = TRUE;
    	HDPOPERATION op;
    	HRESULT ok=DPFPInit();
    	if(ok==S_OK)
    
    SetDlgItemText(IDC_EDITBOX1,L"Init Del dispoditivo eseguito");
    
    	ok=DPFPCreateAcquisition(DP_PRIORITY_NORMAL,GUID_NULL,DP_SAMPLE_TYPE_IMAGE,m_hWnd,WMUS,&op);
    	if(ok==S_OK)
    		SetDlgItemText(IDC_EDITBOX1,L"Creazione avviata");
    	else
    		SetDlgItemText(IDC_EDITBOX1,L"Creazione non avviata");
    
    	return TRUE;
    	}
    
    int count=0;
    
    LRESULT CEnroll::OnBnClickedButton1(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    	{
    	
    	SetDlgItemText(IDC_EDITBOX1,L"Button1 Cliccato");
    	AddStatus(_T("Button1 Cliccato"));
    	return 0;
    	}
    
    LRESULT CEnroll::OnMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    	{
    	
    	wchar_t string[100];
    	count++;
    	_itow_s(count,string,10);
    	SetDlgItemText(IDC_EDITBOX1,string);
    	//SetDlgItemText(IDC_EDITBOX1,L"la Finestra si è mossa");
    	return 0;
    	}
    
    void CEnroll::AddStatus(LPCTSTR s) {
    	int lIdx = SendDlgItemMessage(IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)s);
    	SendDlgItemMessage(IDC_LIST1, LB_SETTOPINDEX, lIdx, 0);
    	}
    
    LRESULT CEnroll::Notify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
    	switch(wParam) {
    	case WN_COMPLETED: {
    		AddStatus(_T("Fingerprint image captured"));
    		break;
    		}
    	case WN_ERROR: {
    		AddStatus(_T("Errore"));
    		break;
    		}
    	case WN_DISCONNECT:
    		AddStatus(_T("Fingerprint reader disconnected"));
    		break;
    	default:
    		AddStatus(_T("Sono opzione default "));
    		}
    	return 0;
    	}
    


     

    domenica 3 luglio 2011 20:02

Tutte le risposte

  • Problema risolto con l'utilizzo di WMUS=WM_USER, questo perchè windows riserva i messaggi da 0 a WM_USER-1 per il S.O. , mentre da WM_USER a 0x7FFF per l'utente.

     

    Grazie a tutti coloro che hanno visitato il post.

     


    Dario Pizzuto
    giovedì 7 luglio 2011 21:09