Cum implementez un refresh la apasarea tastei F5?

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Cum implementez un refresh la apasarea tastei F5?

Post by mesajflaviu » 22 Dec 2008, 10:47

Buna . As vrea sa va mai intreb ceva : am o aplicatie Dialog Based in care am doua controale datetimepicker , un list box si un list control . Cum implementez un refresh list controlului care sa functioneze indiferent de unde se afla focusul pe fereastra ( de exemplu la apasarea tastei F5 cand focusul e pe un datetimepicker ..)



User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

Re: conexiune la internet

Post by MrSmersh » 22 Dec 2008, 10:55

Idee: sa il prinzi in PreTranslateMessage http://msdn.microsoft.com/en-us/library ... 80%29.aspx pe F5 si acolo sa intiezi refresh-ul? In metotda aia ajung cam toate mesajele (din dialog si controalele lui) inainte de a fi trimise la destinatiile lor finala.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Cum implementez un refresh la apasarea tastei F5?

Post by Ovidiu Cucu » 22 Dec 2008, 14:17

[ Mai intai te rog frumos sa deschizi un topic nou atuci cand ai o problema noua! Astfel e mai usor de urmarit. ]

Pentru scopul pe care ti l-ai propus de obicei se folosesc acceleratori.
Pentru ca ai o aplicatie dialog-based si wizard-ul nu-i pune by default trebuie sa ti-ii pui tu singur (dar nu-i un capat de lume... ;)).

Deci
  1. In editorul de resurse adaugi o tabela de acceleratori, sa-i zicem IDR_ACCELERATOR1 apoi mapezi o comanda la o tasta sau combinatie de taste (sa-i zicem ID_LIST_REFRESH la VK_F5)
    accelerator table.gif
    accelerator table.gif (3.91 KiB) Viewed 2416 times
  2. Adaugi un membru tip HACCEL in clasa care-ti incapsuleaza fereastra principala

    Code: Select all

    class CMainDialog : public CDialog
    {
        HACCEL m_hAccel;
    // ...
    };
  3. Undeva la inceput incarci tabela de acceleratori

    Code: Select all

    BOOL CMainDialog::OnInitDialog()
    {
        m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), 
                                 MAKEINTRESOURCE(IDR_ACCELERATOR1));
        // ...
    }
  4. Suprascrii functia virtuala PreTranslateMessage iar in ea chemi TranslateAccelerator

    Code: Select all

    BOOL CMainDialog::PreTranslateMessage(MSG* pMsg) 
    {
       BOOL bRet = TRUE;
       if(!::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
       {
          bRet = CDialog::PreTranslateMessage(pMsg);
       }
       return bRet;
    }
  5. Mai ramane doar sa mapezi comanda ID_LIST_REFRESH

    Code: Select all

    void CMainDialog::OnListRefresh() 
    {
        FillList();
    }
NOTA: De obicei comanda asociata cu un accelerator corespunde si la un item de menu si la un buton (dintr-un toolbar).

Am atasat aici o mica aplicatie demo.
Attachments
Demo.zip
(8.57 KiB) Downloaded 126 times

User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

Re: Cum implementez un refresh la apasarea tastei F5?

Post by MrSmersh » 22 Dec 2008, 15:52

Ce metoda down and dirty imi trecuse prin cap :biggrin:

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Cum implementez un refresh la apasarea tastei F5?

Post by Ovidiu Cucu » 22 Dec 2008, 16:44

MrSmersh wrote:Ce metoda down and dirty imi trecuse prin cap :biggrin:
Se numeste "Bangalore MFC" sau "Tot ce zboara se manaca in PreTranslateMessage"... :biggrin: ;)

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Cum implementez un refresh la apasarea tastei F5?

Post by mesajflaviu » 22 Dec 2008, 21:15

Solutia de mai sus merge brici !! Multam fain !!

User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

Re: Cum implementez un refresh la apasarea tastei F5?

Post by MrSmersh » 22 Dec 2008, 22:38

Ovidiu Cucu wrote:
MrSmersh wrote:Ce metoda down and dirty imi trecuse prin cap :biggrin:
Se numeste "Bangalore MFC" sau "Tot ce zboara se manaca in PreTranslateMessage"... :biggrin: ;)
Sau sechele :biggrin: am avut odata de facut un program normal de contabilitate, care avea 3 group box cu controale si 2 butoane... Si normal ca circulatia intre controalea din primele 2 group boxs se facea cu enter, la restul cu tab si citeva functionalitait exotice ale sagetilor, normal in functie de una si alta...

Post Reply