Re: Logging starategy
On Oct 16, 11:37 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
Logging has nothing to do with replaying, and in fact replaying has numer=
ous technical
challenges, which require a lot of work to overcome.
Logging WM_ messages will almost certainly result in failure. Imagine =
that you log a
message OnRButtonDown which has a particular x,y coordinate. Play it b=
ack with the
application a half-inch to the left. What do you think you will get?
One approach is to divide your program into two components: GUI manipulat=
ion and object
manipulation. The GUI is just a way to manipulate objects. Record t=
he object
manipulations and ignore the existence of the GUI.
Note that this only works if your initial state on replay is identical to=
the initial
state during recording.
=
joe
On Thu, 16 Oct 2008 02:57:52 -0700 (PDT), Kuenga <sagku...@gmail.com> wro=
te:
Hi,
I am working on an MFC application and want to record all the events
carried out by user. Selecting a object, a menu item, invoking dialog
etc, so that I can replay it later.
What's the strategy to start with ? Which desing pattern suitable for
this ?
By logging the WM_message, is it a good idea and then for replay I use
POSTMessage ?
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm
I am working on large code base. So came up with the following logging
strategy. I am just logging the menu commands. Is it correct way of
doing it or there exist better way ?
BOOL CTestApp::PreTranslateMessage( MSG* pMsg )
{
if (pMsg->message == WM_COMMAND)
{
if(gCommandDumpFlag==1){
if(HIWORD(pMsg->wParam)==0)
{
CString str;
CWnd *wnd = CWnd::FromHandle(pMsg->hwnd);
if(wnd) {
wnd->GetWindowText(str);
gCmdDump.WriteToBuffer(str);
CMenu *pCMenu = wnd->GetMenu();
if(pCMenu) {
CString str;
pCMenu->GetMenuString(LOWORD(pMsg->wParam),str,MF_BYCOMMAND);
char buf[255];
sprintf(buf," ID=%d",LOWORD(pMsg->wParam));
str+=" ";
str+=buf;
gCmdDump.WriteToBuffer(str);
}
}
}
}
return CWinApp::PreTranslateMessage(pMsg);
}