|
I don't use ::SendMessage(..) for this, i set a timer to set the size for this list control
with CListCtrl::SetSize(newsize) and new size is stl::map size, number of items in map.
Like you said i check first communication between worker and main thread.
I start this thread (worker) with a lowest priority.
|
|
|
|
|
if(uMsg == WM_MOUSEWHEEL)
{
return ;
}
return CDialog::PreTranslateMessage(pMsg);
}
|
|
|
|
|
Hi,
there is an return, that what i mean is i cant set a breakpoint in this function
when worker thread is running, there is an code for [strg + c] and [strg + v],
i mean for copy and paste , and this don't work and i dont know why?
Like i said before this works only if i stop a worker thread not when he is active.
So i think i do something wrong
Here is little more code:
if(WM_KEYDOWN == uMsg)
{
if(GetKeyState(VK_CONTROL) < 0)
{
if('C' == pMsg->wParam )
{
theApp.CopyToClipboard();
}
else if('V' == pMsg->wParam || 'v' == pMsg->wParam)
{
}
}
}
bosfan
|
|
|
|
|
Hi,
There is probably nothing syntactically wrong with your code. Your architecture is wrong. When worker thread B interacts with a window belonging to thread A... the windows subsystem (win32k.sys) associates thread B with the window and thread B will potentially recieve messages from the input queue... it actually depends on which thread is the 'foreground thread'.
This effectively causes worker thread B to eat your input message for lunch.
Best Wishes,
-David Delaune
P.S.
I assert that the documentation on MSDN is incomplete: About Keyboard Input[^]
The graph and description there is a simplification of what is actually happening and does not address thread groups.
Best Wishes,
-David Delaune
|
|
|
|
|
You're not trying to update the control inside of PreTranslateMessage are you?
The controls get updated from messages sent through the message pump. If you're blocking from inside of PreTranslateMessage, then your code could hang.
|
|
|
|
|
I am getting follwoing error when compiling in VS2010. The same code compiles in VC6. Any help on this?
error C2535:
d:\program files\microsoft visual studio 10.0\vc\include\xfunctional 341 TestVect
In Test.h file:
struct VerifyAddressAtAllSlots:
public binary_function<const long, const long, bool>
{
VerifyAddressAtAllSlots()
{
}
const bool
operator()(const long& thisAddress,
const long& thatAddress) const
{
return true;
}
};
In Test.cpp file:
std::vector<long> addrList;
long verifyAddress = 0;
for_each(addrList.begin(), addrList.end(), bind2nd(VerifyAddressAtAllSlots(), verifyAddress));
|
|
|
|
|
Try making the operator inline :
inline const bool
operator()(const long& thisAddress,
const long& thatAddress) const
{
return true;
}
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
I have created a toolbar in mfc. I want to add this toolbar on my dialog. So in the dialog's OnInitDialog() function I am trying to create this toolbar. But the toolbar is not coming. Please tell me how can create it.
[code]
BOOL CDlgsViewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CToolBar toolBar;
CRect rcClientOld; // Old Client Rect
CRect rcClientNew; // New Client Rect with Tollbar Added
GetClientRect(rcClientOld); // Retrive the Old Client WindowSize
toolBar.Create(this);
toolBar.LoadToolBar(IDR_MAINFRAME);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);
return TRUE; // return TRUE unless you set the focus to a control
}
[/code]
|
|
|
|
|
See here[^]
You talk about Being HUMAN. I have it in my name
AnsHUMAN
|
|
|
|
|
sujandasmahapatra wrote: CToolBar toolBar;
Shouldn't this be a member variable?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Hi friends,
When i close the dialog that time OnTimer function is automaticaly killed. I dont know what is the reason behind this. For your information this dialog is added in the PropertySheet. Normally, if dialog is closed also the onTimer function keep run.. But i my case OnTimer function is get killed.
Dialog contain CaptureOn and CaptureOff button. when captureOn button is pressed that time SetTime function get invoked and CapStopWatch function is called, to calculate and display time(like stopwatch) and when i press the CaptureOff button then timer get killed.
If i press CaptureOn button and close the dialog that time OnTimer function automatically get killed. When same dialog invoked after, OnTimer called automatically, and its operate every slower(more than 1000 to 2000) but Initially i called set timer function with 100millisecond and i given code for your reference.
void CReplay::OnCaptureOn()
{
CapWatchID = SetTimer(CAP_STOPWATCH, 100, TIMERPROC);
}
void CReplay::OnTimer(UINT nIDEvent)
{
if(CapWatchID)
{
CapStopWatch();
}
}
void CReplay::CapStopWatch()
{
CString sTime;
static clock_t tThisTime;
static int TempSec=0;
static int idelay=0;
tThisTime = clock();
dMin1++;
if(dMin1 == 10)
{
double TimeDiff = (double) ( tThisTime - tSimTime ) / CLOCKS_PER_SEC;
TempSec = (int)TimeDiff;
if( TempSec >= 60 )
{
niSec++;
tSimTime = clock();
}
else
niSec++;
if( niSec >= 60 )
{
nMin++;
niSec -= 60;
}
if( nMin >= 60 )
{
nHr++;
nTotHr++;
nMin -= 60;
tSimTime = clock();
}
sTime.Format("%02d:%02d:%02d",nHr,nMin,niSec);
iHrEnd = iCurHr= nHr;
iMinEnd = iCurMin= nMin;
iSecEnd = iCurSec = niSec;
if(CaptureRunning == 1)
{
m_CaptureSW.SetFont(&StopWatchFont);
m_CaptureSW.SetWindowText(sTime);
}
else if(ReplayRunning =1)
{
m_Elapsed.SetFont(&StopWatchFont);
m_Elapsed.SetWindowText(sTime);
}
}
if(nHr==12)
nHr=0;
}
if(dMin1 >= 10)
dMin1 =0;
}
Kindly help me friends...
Regards
S.Shanmugaraja.
|
|
|
|
|
A timer should be killed when the window that calls SetTimer() is closed / destroyed. If you need a timer that is also running when specific dialogs are not active, you should use it from within other windows like your main frame window.
|
|
|
|
|
Without seeing some of your code it is impossible to guess what may be happening. Where is your timer created and where is it destroyed?
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Dialog contain CaptureOn and CaptureOff button. when captureOn button is pressed that time SetTime function get invoked and CapStopWatch function is called, to calculate and display time(like stopwatch) and when i press the CaptureOff button then timer get killed.
If i press CaptureOn button and close the dialog that time OnTimer function automatically get killed. When same dialog invoked after, OnTimer called automatically, and its operate every slower(more than 1000 to 2000) but Initially i called set timer function with 100millisecond and i given code for your reference.
void CReplay::OnCaptureOn()
{
CapWatchID = SetTimer(CAP_STOPWATCH, 100, TIMERPROC);
}
void CReplay::OnTimer(UINT nIDEvent)
{
if(CapWatchID)
{
CapStopWatch();
}
}
void CReplay::CapStopWatch()
{
CString sTime;
static clock_t tThisTime;
static int TempSec=0;
static int idelay=0;
tThisTime = clock();
dMin1++;
if(dMin1 == 10)
{
double TimeDiff = (double) ( tThisTime - tSimTime ) / CLOCKS_PER_SEC;
TempSec = (int)TimeDiff;
if( TempSec >= 60 )
{
niSec++;
tSimTime = clock();
}
else
niSec++;
if( niSec >= 60 )
{
nMin++;
niSec -= 60;
}
if( nMin >= 60 )
{
nHr++;
nTotHr++;
nMin -= 60;
tSimTime = clock();
}
sTime.Format("%02d:%02d:%02d",nHr,nMin,niSec);
iHrEnd = iCurHr= nHr;
iMinEnd = iCurMin= nMin;
iSecEnd = iCurSec = niSec;
if(CaptureRunning == 1)
{
m_CaptureSW.SetFont(&StopWatchFont);
m_CaptureSW.SetWindowText(sTime);
}
else if(ReplayRunning =1)
{
m_Elapsed.SetFont(&StopWatchFont);
m_Elapsed.SetWindowText(sTime);
}
}
if(nHr==12)
nHr=0;
}
if(dMin1 >= 10)
dMin1 =0;
}
|
|
|
|
|
Please edit your previous message and put <pre> tags around your code; as it stands it's very difficult to understand.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
I assume you talk about MFC and CWnd::OnTimer()? If so, what you describe is how I would expect it to work.
That function and CWnd::SetTimer is a thin layer on the Win API ::SetTimer function and WM_TIMER message, where ::SetTimer is called with CWnd::m_hWnd as first arg.
If you want the timer to continue after the window is destroyed, why don't you just call ::SetTimer directly with a NULL hWnd and a TIMERPROC? That way your timer will run as long as the thread runs or until you destroy it with a call to ::KilllTimer.
|
|
|
|
|
Hi,
how to create "TIMERPROC".. Right now my application is developed using MCF. can you provide me any example code that may help me to resolve my problem.
Regrads,
S.Shanmugaraja
|
|
|
|
|
Create a console app and put this code in to see how it works, then you can adapt "myOnTimer" and the call to ::SetTimer to your code.
#include <windows.h>
#include <iostream>
void CALLBACK myOnTimer(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD tickCount)
{
std::cout << "Timer. id = " << idEvent << ", tick = " << tickCount << std::endl;
}
int main(int argc, char * argv[])
{
MSG msg;
UINT_PTR timerId = ::SetTimer(0, 42, 1000, myOnTimer);
std::cout << "Timer set, id = " << timerId << std::endl;
while(GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
|
|
|
|
|
But I am get error when i try to implement UINT_PTR timerId = ::SetTimer(0, 42, 1000, myOnTimer);
in MFC VS6
ErrorReport:
'SetTimer' : cannot convert parameter 4 from 'void (struct HWND__ *,unsigned int,unsigned long,unsigned long)' to 'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)'
|
|
|
|
|
I wrote that example for VS 2008, looks like the callback signature has changed a little since VS6. Try to change it to
void __stdcall myOnTimer(HWND hwnd, unsigned int uMsg, unsigned int idEvent, DWORD tickCount)
{
}
as the error message suggests. If you have an MSDN library with your VS then you should be able to find the correct callback function signature there. Maybe even an example.
|
|
|
|
|
|
Hi
code working good.. but I cant able to kill this timer... can you help to kill this call..
Regards,
S.Shanmugaraja
|
|
|
|
|
You just call ::KillTimer(0, timerId); where timerId is the timer id value you got back from ::SetTimer.
|
|
|
|
|
Thanks Thanks so much
|
|
|
|
|
Hi,
I am beginner to MFC application. I need your suggestion to improve my skill in MFC. How you come know about __stdcall and other functionality of MFC. Any material you have been using? kindly share your views and ideas. It may help me to improve my MFC skills. I am looking forward your valuable suggestion.
Regards,
S.Shanmugaraja
|
|
|
|