您的位置:首页 > 其它

一个可以用于输出信息的窗口程序

2009-07-13 21:01 447 查看
In general, we can set breakpoints under the debug mode when our program encounters some problems. However, it's inconvenient to stop the program to debug sometimes, or it's not so easy to solve some logical error just by step debuging. Besides, there will no debug environment on the customer's machine so that it's unable to debug there. And you may just hope to output some information to judge the state of certain running program.

I develop a program that can receive messages from other processes. Maybe you can use it to help you under ciucumstances described above. The principle is very easy. Use one of the interprocess mechanism: windows message. As a result, only a small segment of code need to be inserted to your code. And, I devide messages into different grade: information, warning and error. The code of my test case is shown bellow:

#define INFO_MESSAGE      WM_USER + 500             // 信息消息ID
#define WARN_MESSAGE      WM_USER + 501             // 警告消息ID
#define ERROR_MESSAGE     WM_USER + 502             // 错误消息ID

void CTestTraceDlg::OnBnClickedSendInfo()
{
// TODO: 在此添加控件通知处理程序代码
HWND hMessWnd = ::FindWindow(NULL, "TraceWindow");
if (hMessWnd)
{
UpdateData();
int nLen = m_str.GetLength();
if (nLen > 255)
{
AfxMessageBox("不能超过255个字符");
return;
}
ATOM hMsg = GlobalAddAtom(m_str);
if (hMsg)
{
::PostMessage(hMessWnd, INFO_MESSAGE, hMsg, 0);
}
}
}

void CTestTraceDlg::OnBnClickedSendWarn()
{
// TODO: 在此添加控件通知处理程序代码
HWND hMessWnd = ::FindWindow(NULL, "TraceWindow");
if (hMessWnd)
{
UpdateData();
int nLen = m_str.GetLength();
if (nLen > 255)
{
AfxMessageBox("不能超过255个字符");
return;
}
ATOM hMsg = GlobalAddAtom(m_str);
if (hMsg)
{
::PostMessage(hMessWnd, WARN_MESSAGE, hMsg, 0);
}
}
}

void CTestTraceDlg::OnBnClickedSendError()
{
// TODO: 在此添加控件通知处理程序代码
HWND hMessWnd = ::FindWindow(NULL, "TraceWindow");
if (hMessWnd)
{
UpdateData();
int nLen = m_str.GetLength();
if (nLen > 255)
{
AfxMessageBox("不能超过255个字符");
return;
}
ATOM hMsg = GlobalAddAtom(m_str);
if (hMsg)
{
::PostMessage(hMessWnd, ERROR_MESSAGE, hMsg, 0);
}
}
}


And the interface of this message window and the test program is shown below:



Note that the overhead of message-passing should be considered if you need to take some operation very fast. The result may be not uncertain if you insert the code of sending message.

The downloading address is http://download.csdn.net/source/1486883.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐