两个窗口之间的通信,你能想到什么
来源:互联网 发布:淘宝新买的牛仔裤超臭 编辑:程序博客网 时间:2024/04/29 14:17
我首先想到发消息,SendMessage也好,PostMessage也好。
还有什么呢,直接加个B类变量作为A的成员变量,之后进行操作。
还有一种方法,就是开个监听事件线程,以A实时响应B的操作为例:
A.h
protected:
HANDLE m_hListenCorrAnsThread;
static DWORD WINAPI ListenCorrAnswersThread(LPVOID lParam);
BOOL StartThreadListenCorrAnswer();
public:
static CEvent s_evtCorrAnswer; //用于监视学生答案是否提交
static CString s_sCorrAnswer;
static int s_nCorrPercent;
A.cpp
CString A::s_sCorrAnswer = "";
int A::s_nCorrPercent = 0;
CEvent A::s_evtCorrAnswer;
void A::OnInitialUpdate()
{
......
if (!StartThreadListenCorrAnswer())
{
MessageBox("开启正确答案监听线程失败!");
}
// TODO: Add your specialized code here and/or call the base class
}
/******************************************************************
* Function :开启监听正确答案线程
* Input Parameters :
* Output Parameters:
* Return Value :
* Created By :yal 2013.08.29
*******************************************************************/
BOOL A::StartThreadListenCorrAnswer()
{
LOG(_T("启动客观题统计监听正确答案线程!\n"));
CWinThread* hThread = ::AfxBeginThread((AFX_THREADPROC)A::ListenCorrAnswersThread, (LPVOID)this);
m_hListenCorrAnsThread = hThread->m_hThread;
return (m_hListenCorrAnsThread != NULL);
}
/******************************************************************
* Function :监听正确答案处理函数
* Input Parameters :
* Output Parameters:
* Return Value :
* Created By :yal 2013.08.29
*******************************************************************/
DWORD WINAPI A::ListenCorrAnswersThread(LPVOID lParam)
{
TRACE(_T("CObjectiveStatisticsView::ListenCorrAnswersThread\n"));
CObjectiveStatisticsView* pObjectView = (CObjectiveStatisticsView*)lParam;
while (TRUE)
{
if (WAIT_FAILED == ::WaitForSingleObject(s_evtCorrAnswer.m_hObject, INFINITE))
{
DWORD dError = ::GetLastError();
LOG("WaitForSingleObject函数出现错误,错误代码:%d,程序退出", dError);
return 1;
}
if(!s_sCorrAnswer.IsEmpty())
{
//得到正确率百分比区域
CDC* pDc = pObjectView->GetDlgItem(IDC_OBJECTIVE_PERCENTAGE_CORRECT)->GetDC();
CRect rect;
pObjectView->GetDlgItem(IDC_OBJECTIVE_PERCENTAGE_CORRECT)->GetClientRect(&rect);
pObjectView->InvalidateRect(&rect,TRUE);
pObjectView->UpdateWindow();
//设置字体
CFont m_Font;
m_Font.CreateFont(100,0,0,0,FW_NORMAL,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,FF_SWISS,"Arial");
//CFont *pOldFont = (CFont*)pDc->SelectObject(&m_Font);
pDc->SelectObject(&m_Font);
pDc->SetTextColor(RGB(94,179,19));
pDc->SetBkMode(TRANSPARENT);
//画百分比
CString sPercent;
sPercent.Format("%d",s_nCorrPercent);
if (s_nCorrPercent >= 100)
{
pDc->DrawText(sPercent, CRect(2,25,60,128), DT_NOCLIP);
}
else if (s_nCorrPercent >= 10)
{
pDc->DrawText(sPercent, CRect(25,25,60,128), DT_NOCLIP);
}
else
{
pDc->DrawText(sPercent, CRect(50,25,60,128), DT_NOCLIP);
}
}
}
return 0;
}
B.cpp
void B::OnEnKillfocusEditAnswer()
{
// TODO: Add your control notification handler code here
SetEvent(A::s_evtCorrAnswer);
}
- 两个窗口之间的通信,你能想到什么
- 看“黄宗泽”的经历,你能想到什么?
- 提到线程你能想到什么?
- 成功项目管理的保障措施。只此一张图片,你能想到什么?
- 笔试面试题二:Java中交换两个变量的值,你能想到几种方法?
- 父子窗口之间的通信
- 两个SWF之间的通信
- 两个应用程序之间的通信
- 两个JFramen之间的通信
- 两个进程之间的通信
- 讨人喜欢的27个原则,你也能想到的。
- 讨人喜欢的27个原则,你也能想到的。
- 讨人喜欢的27个原则,你也能想到的
- 多线程编程 好玩的.你能想到吗?
- 亲,你能想到更好的解决方法吗?
- 你能想到的sql查询,查询表,数据库,索引。
- Android工具类,你能想到的都在这里
- 软件工程项目管理软实力:体制与文化建设。只此图片,你能想到什么?
- 机房收费系统合作版——开幕
- PHP初起航基础工具篇
- ogg里连接不上mysql的错误解决
- 如何检查用户的ios设备上是否安装了某些app?
- 关于在数据库中插入一个单引号括起来的字段问题
- 两个窗口之间的通信,你能想到什么
- win7下安装svn服务器
- 一个简单的选择排序
- MYSQL和ORACLE的一些区别
- Java基础22:网络基础
- ACM训练集
- 我总结的18个非常好用的vim指令
- 防污剂以防止污垢或减缓结垢率的3种简单易行的方法
- OpenURL的使用方法