|
Jusef Marzbany wrote: Secondly: I just want to get assurance no more way I got, after that I'll create
a hidden window.
I don't know how you will get assurance
Jusef Marzbany wrote: Firstly: I'm sure WM_KEYDOWN and WM_KEYUP are recieved to threads message queue!
without this how WM_CHAR/WM_DEADCHAR message will be generated.
What i mean is your thread gets the WM_KEYDOWN/WM_KEYUP messages but
TranslateMessage() will produce WM_CHAR or WM_DEADCHAR message and that is what is failing.
If i understand correctly It will put WM_CHAR messages to message queue which fails in your case. TranslateMessage will not alter the lpMsg parameter.
I hope it helps. all the best
Regards,
Sandip.
|
|
|
|
|
Thank you and I realy want you not to leave me until we've reached something.
Let's clarify every thing! Here's my thread message looooooooop:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case WM_KEYDOWN:
MessageBox("WM_KEYDOWN");
break;
case WM_KEYUP:
MessageBox("WM_KEYUP");
break;
case WM_CHAR:
MessageBox("WM_KEYDOWN");
break;
}
if(!TranslateMessage(&msg))MessageBox("TranslateMessage failed!");
}
Now imagine I've pressed a key ... I get the followings:
1) MessageBox("WM_KEYDOWN");
2) MessageBox("WM_KEYUP");
2) MessageBox("TranslateMessage failed!");
|
|
|
|
|
First:
Jusef Marzbany wrote: case WM_KEYDOWN:
MessageBox("WM_KEYDOWN");
break;
case WM_KEYUP:
MessageBox("WM_KEYUP");
break;
case WM_CHAR:
MessageBox("WM_KEYDOWN");
Remove message box calls as these cause lot of problems because your messages will be processed till you close them. Use some trace statements or Log the data to some text files.
Second:
WM_KEYDOWN and WM_KEYUP combinations produce a WM_CHAR or WM_DEADCHAR message.
so if you do not get the WM_KEYUP it has to fail.
I have strong feeling that it is failing because of messagebox.
Regards,
Sandip.
|
|
|
|
|
OK! I'll do so and inform you the result. But you're my hero now and I don't want to lose you at all!
1) Could you please send me your eMail address to Marzbany@yMail.com so that I can
ask you other questions just in this single case for once
2) Why should NOT one use MessageBox() in such a cases (sorry I didn't get it )
modified on Monday, September 15, 2008 9:43 AM
|
|
|
|
|
Jusef Marzbany wrote: Why should NOT one use MessageBox() in such a cases (sorry I didn't get it Sigh )
Main reason is it is a modal window.
Currently i don't recall a instance but i have seen unexpected behaviors due to message box.
So i always use file logging or Trace statements for debugging.
Regards,
Sandip.
|
|
|
|
|
And your eMail?
|
|
|
|
|
I will drop a mail on your id..
Regards,
Sandip.
|
|
|
|
|
Thank you very much master!
Earth change to Gold for you!
Good bye
|
|
|
|
|
Did it work??
Regards,
Sandip.
|
|
|
|
|
Tsk Tsk
The last thing I told you yesterday was do NOT use MessageBox
to debug your message loop. Use trace messages instead.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I am woking on an MFC Application. In my application I am Using a CListCtrl.
The values in the CListCtrl are fetched from server after evry 8 second.The Focus is set after 8 second on the first row.
Now what i want to know is that when the focus is on first row and i move the down key to move the focus to the second record it treats the index of first one. Similarly when i click third row it shows the index 20 be second.
Kindly tell me which window message is used when we move keys up and down for a CListCtrl. If possible please give me an example.
Thanks
Dhiraj
|
|
|
|
|
Im not sure do you need to NM_CLICK? or keyboard messages?
|
|
|
|
|
I have handled mouse click messages. Its just i want to handle keyboard up down key events.
|
|
|
|
|
Did you check WM_KEYDOWN/UP?
|
|
|
|
|
No but the control for which i want the window message is CListCtrl. So i think it should be something with LVS or LVN.
|
|
|
|
|
|
Greetings all,
While coding for a certain logic, I encountered an error (application crash-not often reproducible) which arose due to the fact that an object of a class was still being accessed by one or more threads. Now the proposed solution is to signal the thread and wait for its completion. What I have is only the thread id.
Is it possible to get the handle to the thread using it's id(I can't do this at the time of thread creation as it is already implemented and I can't change the way it is done) so that I can use WaitForMultipleObjects and wait for the threads to finish their processing before objects of the class are destroyed?
Any help / pointers : appreciated.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Do you intend this [^]?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
How can I set two different timmers and , I want to call two different timmer handlers respectively
|
|
|
|
|
the first parameter of SetTimer is an ID, which you define. so, you just give each of your timers a different ID:
SetTimer(1, 200);
SetTimer(2, 2000);
...
and then you check the timer ID in OnTimer, to see which timer has fired.
void CMyWnd::OnTimer(UINT nEventID)
{
switch (nEventID)
{
case 1: .... break;
case 2: .... break;
}
}
|
|
|
|
|
If I got you:
ptr_Electron wrote: How can I set two different timmers
Call two times the SetTimer function.
ptr_Electron wrote: I want to call two different timmer handlers respectively
provide two different callbacks as arguments of the above SetTimer calls.
For instance:
UINT_PTR iTimer1 = SetTimer( hMyWnd, nIDEvent1, uElapse1, lpCallback1);
UINT_PTR iTimer2 = SetTimer( hMyWnd, nIDEvent2, uElapse2, lpCallback2);
);
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Its simple you can calll two different SetTimer.
|
|
|
|
|
Hi,
i coded a sdi project with 3 horizonta splitters, no problem.
But now i want a vertical Splitter in the first pane,
********************
*------*-----------*
*------*-----------*
********************
*------------------*
*------------------*
*------------------*
********************
*------------------*
*------------------*
*------------------*
********************
but this doesn't wotk
I don't get an error, but the chilsSplitter isn't shown !
Here is my code:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect cr;
GetClientRect(&cr);
m_Splitter_Main.CreateStatic(this, 3, 1);
m_Splitter_Main.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext);
m_Splitter_Main.CreateView(1, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext);
m_Splitter_Main.CreateView(2, 0, RUNTIME_CLASS(CTest_01View), CSize(cr.Width(), cr.Height()/3), pContext);
m_Splitter_Child_1.CreateStatic(&m_Splitter_Main, 1, 2, WS_CHILD | WS_VISIBLE, m_Splitter_Main.IdFromRowCol(0, 0));
m_Splitter_Child_1.CreateView(0, 0, RUNTIME_CLASS(CTest_01View), CSize(100, 0), pContext);
m_Splitter_Child_1.CreateView(0, 1, RUNTIME_CLASS(CTest_01View), CSize(0, 0), pContext);
return TRUE;
}
Many, many thanx for your help !
Best regards
Croc
|
|
|
|
|
You might also need:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
if(::IsWindow(m_Splitter_Main.m_hWnd) && ::IsWindow(m_Splitter_Child_1.m_hWnd))
{
m_Splitter_Main.SetRowInfo(0, cy/3, 10);
m_Splitter_Main.SetRowInfo(1, cy/3, 10);
m_Splitter_Main.SetRowInfo(2, cy/3, 10);
m_Splitter_Child_1.SetColumnInfo(0, cx/2, 10);
m_Splitter_Child_1.SetColumnInfo(1, cx/2, 10);
RecalcLayout();
}
} You could probably call SetRowInfo() and SetColumnInfo() at the end of OnCreateClient() , but I did not try.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Thx very much !
Now it works !
Best regards
Croc !
|
|
|
|
|