, // 大小变量的高字节
dwMemoryFileSize*sizeof(TCHAR), // 大小变量的低字节
sMemoryFileNcom // 文件名称
);
DWORD dwError = GetLastError();
if ( ! m_hFileMapping )
{
MessageBox(_T("Creating of file mapping failed"));
}
枫叶文学网www.fywxw.com
第9 章 多线程
·231·
else
{
// 映shè文件
m_pViewOfFile = MapViewOfFile(
m_hFileMapping, // 句柄
FILE_MAP_ALL_ACCESS, // 访问属xìng
0,
0,
0); // 映shè所有文件
if ( ! m_pViewOfFile )
{
MessageBox(_T("MapViewOfFile failed"));
}
}
if ( dwError == ERROR_ALREADY_EXISTS )
{
// 已经有程序运行
// 从内存文件中读取数据并且写入文本框
if ( m_pViewOfFile )
{
//从内存文件中读取数据
TCHAR s[dwMemoryFileSize];
lstrcpy(s, (LPCTSTR) m_pViewOfFile);
// 写入文本框
m_bNotify = FALSE;
m_input.SetWindowText(s);
m_bNotify = TRUE;
}
}
return TRUE;
}
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·232·
(7)响应文本框输入
响应文本框输入的消息EN_CHANGE,代码如下:
void CIPCDemoDlg::OnChangeEditInput()
{
// TODO: Add your control notification handler code here
if ( m_bNotify )
{
// 将字符写入映shè内存文件
if ( m_pViewOfFile )
{
TCHAR s[dwMemoryFileSize];
m_input.GetWindowText(s, dwMemoryFileSize);
lstrcpy( (LPTSTR) m_pViewOfFile, s);
// 给其他线程发消息, 文本框中的字符发生变化
::PostMessage(HW