CTreeView OnKeyDown beep

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

CTreeView OnKeyDown beep

Post by mesajflaviu » 14 Jun 2012, 23:07

De ceva timp incerc sa rezolv o problema : intr-un CTreeView daca se apasa tasta 'TAB' (sau inca cateva taste sistem (Enter, etc.), PC-ul scoate un beep :

Code: Select all

void CTestTreeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

	if(VK_TAB == nChar)
	{
		CChildFrame* pChild = (CChildFrame*)GetParentFrame();
		CTestListView* pList = (CTestListView*)pChild->GetListView();
		pList->SetFocus();
		pList->GetListCtrl().SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
	}

	CTreeView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Daca fac acelasi lucru intr-un view derivat din CListView, tasta 'TAB' merge fara sa scoata nici un sunet :

Code: Select all

void CTestListView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

	if(VK_TAB == nChar)
	{
		CChildFrame* pChild = (CChildFrame*)GetParentFrame();
		CTestListView* pTree = (CTestListView*)pChild->GetTreeView();
		pTree->SetFocus();
	}

	CListView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Cel mai bine se ilustreaza problema in proiectelul atasat ... care sa fie problema ? Daca tratez tasta 'TAB' in CTestTreeView::OnPreTranslateMessage(...) nu mai am acel beep ciudat, dar din cate stiu e de evitat sa se suprascrie OnPreTranslateMessage ... cazul asta sa fie o exceptie ?
Attachments
TestTree.zip
(43.81 KiB) Downloaded 196 times



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

Re: CTreeView OnKeyDown beep

Post by Ovidiu Cucu » 15 Jun 2012, 11:35

Pai, bipaiala aia tine de setarile de sistem (sunetele pentru evenimentele de aplicatie).
Ca sa scapi de ea te duci frumusel in registry la HKEY_CURRENT_USER\AppEvents\Schemes\Apps si adaugi o cheie cu acelasi nume ca aplicati ta, sa-i zicem "TestTree".
Dupa care, din Control Panel de duci la "Sounds" si cauti "TestTree" in lista de "Program Events".
O selectezi si apoi alegi "No Sounds" din combo-ul "Sound Scheme".
Apesi "Apply" si gata... nu mai bipaie.
Application Sound Scheme.jpg
Application Sound Scheme.jpg (38.83 KiB) Viewed 3207 times
Nu stiu deocamdata daca exista o functie API care sa-ti faca asta din program (exceptand cele pentru registry).
Uita-te mai cu atentie la SystemParametersInfo, desi s-ar parea ca nu poate.
Nu stiu nici pe unde se tine setarea pentru schema de sunet a unei aplicatii.
S-ar putea sa fie printr-un folder special AppData sau s-ar putea sa fie tot prin registry.

Mai uita-te si tu si te rog sa ne spui si noua ce-ai gasit. ;)

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

Re: CTreeView OnKeyDown beep

Post by mesajflaviu » 20 Jun 2012, 15:02

Bun, dar daca acest beep e beep de aplicatie, atunci cum de nu are beep si listview-ul ?

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

Re: CTreeView OnKeyDown beep

Post by mesajflaviu » 28 Jun 2012, 17:46

M-am uitat la SystemParametersInfo si poate inceta beep-urile, de tot, insa solutia de a scrie in registrii o intrare pentru o aplicatie anume mi se pare peste mana ... cred ca acesta este un caz in care e bine sa tratez OnPreTranslateMessage pentru a scapa de acest beep in treeview ...

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

Re: CTreeView OnKeyDown beep

Post by Ovidiu Cucu » 28 Jun 2012, 19:44

Daca beep-ul ala-i un mesaj sistem inseamna ca nu-i pus acolo degeaba.
Oricum, eu zic sa ai grija ce faci prin PreTranslateMessage.
Si, in fond si la urma urmei de ce vrei neaparat sa schimbi panelurile cu Tab?
Ce te faci daca intr-un panel ai un form view cu controlale intre care un user e obisnuit sa navigheze cu Tab? Il zapacesti de tot?

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

Re: CTreeView OnKeyDown beep

Post by mesajflaviu » 28 Jun 2012, 20:05

Aplicatia e un fel de explorer, si, ca in Windows Explorer, cu 'TAB' se muta focusul din tree in list ...

Post Reply