diff options
author | fcolin | 2010-03-12 16:41:08 +0000 |
---|---|---|
committer | fcolin | 2010-03-12 16:41:08 +0000 |
commit | 576ad2b67bced04bde83de91f5e647af868c5fd4 (patch) | |
tree | 147725b5c27f1f31da1e879ac949822c75ac49a2 | |
parent | 74c0ac487332231e8dd6ba35580b07166ffbcfe2 (diff) | |
download | ivy-cplusplus-576ad2b67bced04bde83de91f5e647af868c5fd4.zip ivy-cplusplus-576ad2b67bced04bde83de91f5e647af868c5fd4.tar.gz ivy-cplusplus-576ad2b67bced04bde83de91f5e647af868c5fd4.tar.bz2 ivy-cplusplus-576ad2b67bced04bde83de91f5e647af868c5fd4.tar.xz |
mise en conformité des messages ping /pong
Correction pb a la fermeture d'ivy
-rw-r--r-- | Ivy/Ivy.cxx | 10 | ||||
-rw-r--r-- | Ivy/Ivy.h | 3 | ||||
-rw-r--r-- | Ivy/IvyApplication.cxx | 6 | ||||
-rw-r--r-- | Ivy/IvyApplication.h | 3 | ||||
-rw-r--r-- | Ivy/IvySynchroWnd.cxx | 139 | ||||
-rw-r--r-- | Ivy/IvySynchroWnd.h | 26 | ||||
-rw-r--r-- | Ivy/ThreadedSocket.cxx | 2 | ||||
-rw-r--r-- | IvyProbe/IvyProbe.rc | 21 | ||||
-rw-r--r-- | IvyProbe/IvyProbeDlg.cpp | 45 | ||||
-rw-r--r-- | IvyProbe/IvyProbeDlg.h | 2 | ||||
-rw-r--r-- | IvyProbe/Resource.h | 4 |
11 files changed, 206 insertions, 55 deletions
diff --git a/Ivy/Ivy.cxx b/Ivy/Ivy.cxx index 95035d1..1640b45 100644 --- a/Ivy/Ivy.cxx +++ b/Ivy/Ivy.cxx @@ -48,7 +48,7 @@ Ivy::~Ivy() delete server;
if ( synchronous )
{
- delete IvySynchronousCallback::m_synchro;
+ IvySynchroWnd::Finish();
delete application_callback;
}
}
@@ -59,8 +59,8 @@ Ivy::Ivy(const char* name, const char * ready, IvyApplicationCallback *callback, InitializeCriticalSection( &m_application_cs );
regexp_id = 0;
synchronous = Synchronous;
- if ( synchronous )
- IvySynchronousCallback::m_synchro = new IvySynchroWnd();
+ IvySynchroWnd::Init(synchronous);
+
ready_message = ready;
ApplicationName = name;
@@ -413,6 +413,10 @@ void Ivy::SetBindCallback( IvyBindingCallback* bind_callback ) {
binding_callback = synchronous ? new IvySynchronousBindingCallback(bind_callback) : bind_callback;
}
+void Ivy::SetDieCallback( IvyDieCallback* die_cb )
+{
+ die_callback = synchronous ? new IvySynchronousDieCallback(die_cb) : die_cb;
+}
void Ivy::SetFilter(int argc, const char **argv )
{
@@ -95,7 +95,8 @@ protected: ivy::string ready_message;
public:
-
+
+ void SetDieCallback( IvyDieCallback* die_callback );
void SetBindCallback( IvyBindingCallback* bind_callback );
void SetFilter( int argc, const char **argv );
void SendDieMsg( IvyApplication *app );
diff --git a/Ivy/IvyApplication.cxx b/Ivy/IvyApplication.cxx index 7b3cd2f..8ba70f6 100644 --- a/Ivy/IvyApplication.cxx +++ b/Ivy/IvyApplication.cxx @@ -5,7 +5,7 @@ #include "IvyApplication.h"
#include "IvyBinding.h"
-
+#include "IvySynchroWnd.h"
//#define IVY_DEBUG
@@ -272,11 +272,9 @@ void IvyApplication::OnReceive(char * line) #ifdef IVY_DEBUG
TRACE("Die Message id=%d msg='%s'\n", id, arg);
#endif //IVY_DEBUG
-
if ( bus->CallDieCallback( this, id, arg ) )
{
- PostMessage( NULL, WM_CLOSE, 0, 0);
- exit(-1);
+ IvySynchroWnd::PostQuit();
}
break;
case Ping:
diff --git a/Ivy/IvyApplication.h b/Ivy/IvyApplication.h index cd9b123..375ac25 100644 --- a/Ivy/IvyApplication.h +++ b/Ivy/IvyApplication.h @@ -5,10 +5,11 @@ //
#include "BufferedSocket.h"
#include "Ivy.h"
-#include "IvyBinding.h"
+//#include "IvyBinding.h"
/////////////////////////////////////////////////////////////////////////////
// IvyApplication command target
+class IvyBinding;
class IvyApplication : public CBufferedSocket
{
diff --git a/Ivy/IvySynchroWnd.cxx b/Ivy/IvySynchroWnd.cxx index 2c84ad5..374538c 100644 --- a/Ivy/IvySynchroWnd.cxx +++ b/Ivy/IvySynchroWnd.cxx @@ -2,15 +2,10 @@ //
#include "IvyStdAfx.h"
-
-
#include "IvySynchroWnd.h"
-
#define WM_IVY_CB WM_USER + 1001
-
-IvySynchroWnd* IvySynchronousCallback::m_synchro = NULL;
IvySynchroWnd* IvySynchroWnd::m_synchro = NULL;
/////////////////////////////////////////////////////////////////////////////
@@ -19,22 +14,22 @@ IvySynchroWnd* IvySynchroWnd::m_synchro = NULL; IvySynchroWnd::IvySynchroWnd()
{
m_hWnd = NULL;
- m_synchro = this;
+ //m_synchro = this;
WNDCLASS wc;
// Fill in the window class structure with parameters
// that describe the main window.
- wc.style = 0; // noredraw if size changes
- wc.lpfnWndProc = WindowProc; // points to window procedure
- wc.cbClsExtra = 0; // no extra class memory
- wc.cbWndExtra = 0; // no extra window memory
- wc.hInstance = 0; // handle to instance
- wc.hIcon = NULL; // predefined app. icon
- wc.hCursor = NULL; // predefined arrow
- wc.hbrBackground = 0; // white background brush
- wc.lpszMenuName = NULL; // no menu
+ wc.style = 0; // noredraw if size changes
+ wc.lpfnWndProc = WindowProc; // points to window procedure
+ wc.cbClsExtra = 0; // no extra class memory
+ wc.cbWndExtra = 0; // no extra window memory
+ wc.hInstance = 0; // handle to instance
+ wc.hIcon = NULL; // predefined app. icon
+ wc.hCursor = NULL; // predefined arrow
+ wc.hbrBackground = 0; // white background brush
+ wc.lpszMenuName = NULL; // no menu
wc.lpszClassName = TEXT("IvySynchroClass"); // name of window class
// Register the window class.
@@ -59,7 +54,16 @@ IvySynchroWnd::IvySynchroWnd() IvySynchroWnd::~IvySynchroWnd()
{
}
-
+void IvySynchroWnd::Init(bool synchronous)
+{
+ if ( synchronous && m_synchro == NULL )
+ m_synchro = new IvySynchroWnd();
+}
+void IvySynchroWnd::Finish()
+{
+ if ( m_synchro == NULL )
+ delete m_synchro;
+}
LRESULT CALLBACK IvySynchroWnd::WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
@@ -102,12 +106,57 @@ LRESULT IvySynchroWnd::OnIvyCB(WPARAM wParam, LPARAM lParam) }
void IvySynchroWnd::PostIvyCB( IvySynchronousCallback *cb )
{
+ BOOL doPost = FALSE;
EnterCriticalSection( &m_CritSection );
- if ( m_synchro->callbacklist.empty() )
- ASSERT(PostMessage(m_synchro->m_hWnd, WM_IVY_CB, 0, 0 ));
- m_synchro->callbacklist.push_back( cb );
+ doPost = callbacklist.empty();
+ callbacklist.push_back( cb );
LeaveCriticalSection( &m_CritSection );
+ if ( doPost )
+ ASSERT(PostMessage(m_hWnd, WM_IVY_CB, 0, 0 ));
+ // give a change to process messages
+ SwitchToThread();
+
}
+BOOL CALLBACK MyQuitWindows( HWND hwnd, LPARAM lParam )
+{
+ BOOL *posted = (BOOL*)lParam;
+ DWORD dwTheardId;
+ DWORD pid;
+ DWORD mypid = GetCurrentProcessId();
+ dwTheardId = ::GetWindowThreadProcessId( hwnd,&pid);
+ if ( pid == mypid )
+ {
+ // give a change to User for closing application safely, save file etc...
+ *posted = PostMessage( hwnd, WM_CLOSE, 0,0 );
+ }
+ return TRUE;
+}
+
+void IvySynchroWnd::PostQuit()
+{
+ BOOL posted = FALSE;
+ BOOL canceled = FALSE;
+ EnumWindows(MyQuitWindows, (LPARAM)&posted );
+ // give a change to process messages
+ if ( !SwitchToThread() )
+ {
+ Sleep( 200 );
+ }
+ if ( !posted )
+ {
+ PostQuitMessage( -1 );
+ // give a change to process messages
+ if ( !SwitchToThread() )
+ {
+ Sleep( 100 );
+ }
+ // ultimate close
+ exit(-1);
+ }
+}
+
+
+ //exit(-1);
//
//
IvySynchronousMessageCallback::IvySynchronousMessageCallback( IvyMessageCallback *cb )
@@ -128,7 +177,6 @@ IvySynchronousMessageCallback::~IvySynchronousMessageCallback() }
void IvySynchronousMessageCallback::OnMessage(IvyApplication *app, int argc, const char **argv )
{
- static int msg_count = 0;
// duplicate on the Message Queue
IvySynchronousMessageCallback *param = new IvySynchronousMessageCallback(target);
param->app = app;
@@ -142,12 +190,17 @@ void IvySynchronousMessageCallback::OnMessage(IvyApplication *app, int argc, con param->argv[i] = _strdup( argv[i]);
#endif
}
-// TRACE( "IvySynchronousMessageCallback::OnMessage msg count %d\n",wParam);
- m_synchro->PostIvyCB( param );
+#ifdef IVY_DEBUG
+ TRACE( "IvySynchronousMessageCallback::OnMessage Push callback %s argc=%d\n",typeid( *target).name(), argc);
+#endif
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousMessageCallback::CallCallback()
{
+#ifdef IVY_DEBUG
+ TRACE( "IvySynchronousMessageCallback::OnMessage Real callback %s argc=%d\n",typeid( *target).name(), argc);
+#endif
target->OnMessage( app, argc, (const char **) argv );
for( int i = 0; i < argc ; i++ )
delete argv[i];
@@ -165,7 +218,7 @@ void IvySynchronousApplicationCallback::OnApplicationConnected( IvyApplication * IvySynchronousApplicationCallback *param = new IvySynchronousApplicationCallback(target);
param->type = CONNECTED_CB;
param->app = app;
- m_synchro->PostIvyCB( param );
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousApplicationCallback::OnApplicationDisconnected( IvyApplication *app)
@@ -174,7 +227,7 @@ void IvySynchronousApplicationCallback::OnApplicationDisconnected( IvyApplicati IvySynchronousApplicationCallback *param = new IvySynchronousApplicationCallback(target);
param->type = DISCONNECTED_CB;
param->app = app;
- m_synchro->PostIvyCB( param );
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousApplicationCallback::CallCallback()
{
@@ -203,7 +256,7 @@ void IvySynchronousBindingCallback::OnAddBind( IvyApplication *app, int id, cons param->app = app;
param->id = id;
param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousBindingCallback::OnRemoveBind( IvyApplication *app, int id, const char *regexp)
@@ -214,7 +267,7 @@ void IvySynchronousBindingCallback::OnRemoveBind( IvyApplication *app, int id, param->app = app;
param->id = id;
param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousBindingCallback::OnFilterBind( IvyApplication *app, int id, const char *regexp)
{
@@ -224,7 +277,7 @@ void IvySynchronousBindingCallback::OnFilterBind( IvyApplication *app, int id, param->app = app;
param->id = id;
param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
}
void IvySynchronousBindingCallback::CallCallback()
{
@@ -244,4 +297,36 @@ void IvySynchronousBindingCallback::CallCallback() }
}
delete regexp;
+}
+
+IvySynchronousDieCallback::IvySynchronousDieCallback( IvyDieCallback *cb )
+{
+ target = cb;
+}
+bool IvySynchronousDieCallback::OnDie(IvyApplication *app, int id, const char *arg )
+{
+ static int msg_count = 0;
+ // duplicate on the Message Queue
+ IvySynchronousDieCallback *param = new IvySynchronousDieCallback(target);
+ param->app = app;
+ param->id = id;
+
+#ifdef UNDER_CE
+ param->arg = _strdup( argv);
+#else
+ param->arg = _strdup( arg);
+#endif
+
+// TRACE( "IvySynchronousMessageCallback::OnMessage msg count %d\n",wParam);
+ IvySynchroWnd::m_synchro->PostIvyCB( param );
+ return FALSE; // do not exit now wait for Quit on MessageQueue
+}
+void IvySynchronousDieCallback::CallCallback()
+{
+ // duplicate on the Message Queue
+ if ( !target ) return;
+ if ( target->OnDie ( app, id, arg ) )
+ {
+ IvySynchroWnd::m_synchro->PostQuit();
+ }
}
\ No newline at end of file diff --git a/Ivy/IvySynchroWnd.h b/Ivy/IvySynchroWnd.h index ffa44ba..b90e2a0 100644 --- a/Ivy/IvySynchroWnd.h +++ b/Ivy/IvySynchroWnd.h @@ -13,7 +13,7 @@ class IvySynchroWnd {
// Construction
public:
- IvySynchroWnd();
+
// Attributes
public:
@@ -21,7 +21,10 @@ public: // Operations
public:
+ static void PostQuit();
void PostIvyCB( IvySynchronousCallback *cb );
+ static void Init(bool synchronous);
+ static void Finish();
// Implementation
public:
@@ -30,8 +33,9 @@ protected: HWND m_hWnd;
protected:
+ IvySynchroWnd();
// Unique instance of this class
- static IvySynchroWnd *m_synchro;
+ static IvySynchroWnd *m_synchro; // for synchronous Windowed
// Generated message map functions
static LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
@@ -49,13 +53,14 @@ protected: LRESULT OnIvyCB(WPARAM wParam, LPARAM lParam);
friend class IvySynchronousMessageCallback;
friend class IvySynchronousApplicationCallback;
+ friend class IvySynchronousBindingCallback;
+ friend class IvySynchronousDieCallback;
};
class IvySynchronousCallback
{
protected:
IvyApplication *app;
- static IvySynchroWnd *m_synchro;
friend class Ivy;
public:
virtual void CallCallback() = 0;
@@ -107,3 +112,18 @@ protected: friend class IvySynchroWnd;
};
+
+class IvySynchronousDieCallback: public IvySynchronousCallback, public IvyDieCallback
+{
+public:
+ IvySynchronousDieCallback( IvyDieCallback *cb );
+ virtual void CallCallback();
+ virtual bool OnDie (IvyApplication *app, int id, const char *arg );
+protected:
+ IvyDieCallback *target;
+
+ int id;
+ const char *arg;
+
+ friend class IvySynchroWnd;
+};
\ No newline at end of file diff --git a/Ivy/ThreadedSocket.cxx b/Ivy/ThreadedSocket.cxx index 99caa80..147cb69 100644 --- a/Ivy/ThreadedSocket.cxx +++ b/Ivy/ThreadedSocket.cxx @@ -110,7 +110,7 @@ SOCKET CThreadedSocket::Accept(CThreadedSocket& rConnectedSocket, else
{
rConnectedSocket.m_hSocket = hTemp;
- rConnectedSocket.send_count = CreateSemaphore( NULL, 0, 100, NULL); // unnamed semaphore
+ rConnectedSocket.send_count = CreateSemaphore( NULL, 0, 200, NULL); // unnamed semaphore
if (rConnectedSocket.send_count == NULL)
return SOCKET_ERROR;
diff --git a/IvyProbe/IvyProbe.rc b/IvyProbe/IvyProbe.rc index 8fc9923..52746ec 100644 --- a/IvyProbe/IvyProbe.rc +++ b/IvyProbe/IvyProbe.rc @@ -83,22 +83,23 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
END
-IDD_IVYPROBE_DIALOG DIALOGEX 0, 0, 163, 152
+IDD_IVYPROBE_DIALOG DIALOGEX 0, 0, 281, 154
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "IvyProbe"
MENU IDR_MENU1
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- EDITTEXT IDC_BUSNUMBER,4,14,120,14,ES_AUTOHSCROLL
- PUSHBUTTON "Start",IDC_START,130,15,25,14
+ EDITTEXT IDC_BUSNUMBER,4,14,240,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Start",IDC_START,248,15,25,14
LTEXT "Bind:",IDC_STATIC_BIND,4,135,17,8
LTEXT "Msg:",IDC_STATIC_MSG,4,117,17,12
- COMBOBOX IDC_MSG,27,117,100,82,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- DEFPUSHBUTTON "Send",IDC_SEND,128,116,27,14
- PUSHBUTTON "Bind",IDC_BIND,128,132,27,14
- COMBOBOX IDC_REGEXP,27,133,100,66,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_TEXT,4,31,151,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | WS_VSCROLL
+ COMBOBOX IDC_MSG,27,117,213,82,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ DEFPUSHBUTTON "Send",IDC_SEND,246,116,27,14
+ PUSHBUTTON "Bind",IDC_BIND,246,132,27,14
+ COMBOBOX IDC_REGEXP,27,133,214,66,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_TEXT,99,29,171,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | WS_VSCROLL
+ LISTBOX IDC_CLIENT_LIST,4,29,92,84,LBS_SORT | LBS_MULTIPLESEL | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END
@@ -159,9 +160,9 @@ BEGIN IDD_IVYPROBE_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 4
- RIGHTMARGIN, 155
+ RIGHTMARGIN, 273
TOPMARGIN, 1
- BOTTOMMARGIN, 148
+ BOTTOMMARGIN, 150
END
END
#endif // APSTUDIO_INVOKED
diff --git a/IvyProbe/IvyProbeDlg.cpp b/IvyProbe/IvyProbeDlg.cpp index ef7bff8..35a9fe3 100644 --- a/IvyProbe/IvyProbeDlg.cpp +++ b/IvyProbe/IvyProbeDlg.cpp @@ -58,6 +58,7 @@ void CIvyProbeDlg::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_REGEXP, m_expr);
DDX_Control(pDX, IDC_MSG, m_msg);
DDX_Text(pDX, IDC_BUSNUMBER, m_busnumber);
+ DDX_Control(pDX, IDC_CLIENT_LIST, m_clients );
//}}AFX_DATA_MAP
}
@@ -74,6 +75,7 @@ BEGIN_MESSAGE_MAP(CIvyProbeDlg, MyDialog) //}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_SAVEBINDINGS, &CIvyProbeDlg::OnFileSavebindings)
ON_COMMAND(ID_FILE_LOADBINDINGS, &CIvyProbeDlg::OnFileLoadbindings)
+ ON_LBN_DBLCLK(IDC_CLIENT_LIST, &CIvyProbeDlg::OnLbnDblclkClientList)
END_MESSAGE_MAP()
@@ -136,7 +138,10 @@ BOOL CIvyProbeDlg::OnInitDialog() << item ( IDC_BUSNUMBER, GREEDY )
<< item ( IDC_START, NORESIZE )
)
- << item ( IDC_TEXT, GREEDY )
+ << ( pane( HORIZONTAL, GREEDY )
+ << item ( IDC_CLIENT_LIST, ABSOLUTE_HORZ )
+ << item ( IDC_TEXT, GREEDY )
+ )
<< ( pane( HORIZONTAL, ABSOLUTE_VERT )
<< item( IDC_STATIC_MSG, NORESIZE )
<< item( IDC_MSG, GREEDY )
@@ -160,7 +165,7 @@ BOOL CIvyProbeDlg::OnInitDialog() // Set Argument from Command Line
m_busnumber = cmd.m_busNumber;
- bus = new Ivy( "IvyProbe Windows","IvyProbe Windows Ready",this,FALSE);
+ bus = new Ivy( "IvyProbeWindows","IvyProbeWindows Ready",this,FALSE);
bus->SetBindCallback( this );
// bus->BindMsg("(.*)", BUS_CALLBACK_OF(CTestDlg, IvyCallback ));
@@ -232,11 +237,25 @@ TRACE(TEXT("Direct Msg Receive %d, %s\n"),id,arg ); void CIvyProbeDlg::OnApplicationConnected(IvyApplication *app)
{
- WriteMessage( "Application: %s ready",(LPCSTR)(app->GetName()) );
+ LPCSTR name = (LPCSTR)(app->GetName());
+ WriteMessage( "Application: %s ready", name );
+ int idx = m_clients.AddString( name );
+ m_clients.SetItemDataPtr( idx, app );
}
void CIvyProbeDlg::OnApplicationDisconnected(IvyApplication *app)
{
- WriteMessage( "Application: %s bye",(LPCSTR)(app->GetName()) );
+ LPCSTR name = (LPCSTR)(app->GetName());
+ WriteMessage( "Application: %s bye", name );
+ int nb = m_clients.GetCount();
+ for( int idx = 0; idx < nb ; idx++)
+ {
+ IvyApplication * appToRemove = (IvyApplication * )m_clients.GetItemDataPtr( idx );
+ if ( appToRemove == app )
+ {
+ m_clients.DeleteString( idx );
+ break;
+ }
+ }
}
void CIvyProbeDlg::OnAddBind (IvyApplication *app, int id, const char * regexp)
@@ -392,3 +411,21 @@ void CIvyProbeDlg::OnFileSavebindings() }
#endif
}
+
+void CIvyProbeDlg::OnLbnDblclkClientList()
+{
+ IvyApplication *app;
+ int nCount = m_clients.GetSelCount();
+ if ( nCount > 0 )
+ {
+ int* selected = new int[ nCount ];
+
+ int nb = m_clients.GetSelItems(nCount, selected );
+ for( int idx = 0; idx < nb ; idx++)
+ {
+ app = (IvyApplication * )m_clients.GetItemDataPtr( selected[idx] );
+ bus->SendDieMsg( app );
+ }
+ delete [] selected;
+ }
+}
diff --git a/IvyProbe/IvyProbeDlg.h b/IvyProbe/IvyProbeDlg.h index eee40ef..e196f57 100644 --- a/IvyProbe/IvyProbeDlg.h +++ b/IvyProbe/IvyProbeDlg.h @@ -61,6 +61,7 @@ public: CComboBox m_expr;
CComboBox m_msg;
CString m_busnumber;
+ CListBox m_clients;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
@@ -102,6 +103,7 @@ public: afx_msg void OnFileSavebindings();
public:
afx_msg void OnFileLoadbindings();
+ afx_msg void OnLbnDblclkClientList();
};
//{{AFX_INSERT_LOCATION}}
diff --git a/IvyProbe/Resource.h b/IvyProbe/Resource.h index afeece2..c88e5b4 100644 --- a/IvyProbe/Resource.h +++ b/IvyProbe/Resource.h @@ -30,6 +30,8 @@ #define IDC_REGEXP 1021
#define IDC_CLOCK_FAST_BACKWARD 1026
#define IDC_CLOCK_BACKWARD 1027
+#define IDC_CLIENTLIST 1027
+#define IDC_CLIENT_LIST 1027
#define IDC_CLOCK_START 1028
#define IDC_CLOCK_PAUSE 1029
#define IDC_CLOCK_FORWARD 1030
@@ -46,7 +48,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 134
#define _APS_NEXT_COMMAND_VALUE 32775
-#define _APS_NEXT_CONTROL_VALUE 1027
+#define _APS_NEXT_CONTROL_VALUE 1028
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif
|