自定义消息的问题 在一个基于对话框文件的一般类里面向主对话框发送自定义消息,怎样获取这个主对话框的句柄啊? 难道只能将主对话框中获得的句柄通过调用一般类的函数来传给一般类么?有没的直接在一般类里面获取对话框句柄的法子啊? 请赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 AfxGetApp()->m_pMainWnd就是你主对话框的指针了 向主对话框发消息就把句柄置为NULL就行了 这样获得的是窗口指针你还得GetSafeHandle才是句柄 WM_VERIFY = WM_USER + 105, ON_MESSAGE(WM_VERIFY, OnVerifyNews)void CServerDlg::OnVerifyNews(WPARAM wParam, LPARAM lParam){/* m_Log=(CString)lParam; CTime time = CTime::GetCurrentTime(); CString strPath = time.Format("%Y%m%d%H%M%S"); strPath +="Logs.txt"; //日志文件名字 CFile cf(strPath,CFile::modeCreate | CFile::modeReadWrite); char buffer[10000]; //存放日志信息 memset(buffer,0,10000); int length = m_Log.GetLength(); sprintf(buffer,m_Log.GetBuffer(m_Log.GetLength())); //buffer=m_Log.GetBuffer(m_Log.GetLength()); //WideCharToMultiByte(CP_OEMCP,NULL,m_Log,-1,buffer,10000, NULL,false); //转换存储方式 cf.Seek(cf.GetLength(),CFile::begin); cf.Write(buffer,length); cf.Close(); */ //MessageBox("消息传送成功");}::SendMessage(NULL,WM_VERIFY,0,(LPARAM)&m_Input); GetSafeHandle在一般类里面可以用? 头文件呢?OnVerifyNews怎么写的,写在哪里的?用AfxGetApp()->m_pMainWnd->SendMessage(WM_VERIFY,0,(LPARAM)&m_Input); ::SendMessage(NULL,WM_VERIFY,0,(LPARAM)&m_Input); =========如果用API发的话,第一个参数要接收窗口的句柄,楼上已经说得很清楚了。 SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd, WM_USER_MESSAGE, wp, lp)或SendMessage(AfxGetMainWnd()->m_hWnd, WM_USER_MESSAGE, wp, lp); 随便给你写一个:参考一下CMainFrame* frame = (CMainFrame*)AfxGetApp()->GetMainWnd(); if(frame != NULL) { CView* view = frame->getActiveView(); if(view != NULL) { view->SendMessage(WM_COMMAND, ID_PEN_SELCHANGE, (LPARAM)&penBar); } } switch(stat)时stat值明明是1,然后却跑向default执行。真怪了。 【急】如何调用外部编辑器 加载位图? 怎么在vc6.0里调用web service? 关于list控件中如何添加一个小的缩略图的问题 飞蛾领分,兼对话框中另外一个问题! dll中显示对话框??? findwindow问题 谁用过VC7? ABOUT CORBA!!! listctrl图标排列问题 关于广角镜头的畸变校正
就把句柄置为NULL就行了
这样获得的是窗口指针
你还得GetSafeHandle才是句柄
ON_MESSAGE(WM_VERIFY, OnVerifyNews)
void CServerDlg::OnVerifyNews(WPARAM wParam, LPARAM lParam)
{
/* m_Log=(CString)lParam;
CTime time = CTime::GetCurrentTime();
CString strPath = time.Format("%Y%m%d%H%M%S");
strPath +="Logs.txt"; //日志文件名字
CFile cf(strPath,CFile::modeCreate | CFile::modeReadWrite);
char buffer[10000]; //存放日志信息
memset(buffer,0,10000);
int length = m_Log.GetLength();
sprintf(buffer,m_Log.GetBuffer(m_Log.GetLength()));
//buffer=m_Log.GetBuffer(m_Log.GetLength());
//WideCharToMultiByte(CP_OEMCP,NULL,m_Log,-1,buffer,10000, NULL,false); //转换存储方式
cf.Seek(cf.GetLength(),CFile::begin);
cf.Write(buffer,length);
cf.Close();
*/
//MessageBox("消息传送成功");}
::SendMessage(NULL,WM_VERIFY,0,(LPARAM)&m_Input);
用AfxGetApp()->m_pMainWnd->SendMessage(WM_VERIFY,0,(LPARAM)&m_Input);
=========
如果用API发的话,第一个参数要接收窗口的句柄,楼上已经说得很清楚了。
if(frame != NULL)
{
CView* view = frame->getActiveView();
if(view != NULL)
{
view->SendMessage(WM_COMMAND, ID_PEN_SELCHANGE, (LPARAM)&penBar);
}
}