HWND hwnd;
CWnd *pWnd;
pWnd = ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
hwnd = pWnd->GetDlgItem(IDD_CURRENT_CALL)->GetSafeHwnd();
我这样写,获得的hwnd是空的,是不是写的有问题!
11 个解决方案
#1
((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();返回的应该是CView*啊,再说了如果想在自己创建的类获取到windows的句柄那可以想要哪个windows的句柄就把哪个windows的句柄传给你的类对象就行了,可以通过函数或消息机制。
#2
补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。
#3
两个对象没有关系,现在情况是,我的一个线程收到数据后,进行处理存储,然后获取要更新数据的试图窗口句柄,并PostMessage通知对应的事件去更新窗口数据。
#4
根据线程处理的数据不同,获取不同的视图窗口句柄,通知对应的视图窗口更新数据!这里要获取不同的视图窗口,所以有没有获取任意视图窗口句柄的方法?
#5
顶起,别沉了!!!
#6
构造这个类时可以将视图窗口句柄保存到这个类中
#7
我这个类是单独的,是由多线程调用的,构造的时候怎么传参?这里只有把每个视图的指针或者视图的句柄先保存起来,然后通过全局APP或者MainFrame去调用?我不知道如何在APP或者MainFrame类中保存每个视图的指针?
#8
而且我这个是单文档项目。
#9
注意:
GetActiveView()前先SetActiveView
BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);
GetActiveView()前先SetActiveView
BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);
#10
直接这样写编译不过啊!SetActiveView(CXXView);
#11
谢谢大家的回复,问题已经解决!
#1
((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();返回的应该是CView*啊,再说了如果想在自己创建的类获取到windows的句柄那可以想要哪个windows的句柄就把哪个windows的句柄传给你的类对象就行了,可以通过函数或消息机制。
#2
补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。
#3
两个对象没有关系,现在情况是,我的一个线程收到数据后,进行处理存储,然后获取要更新数据的试图窗口句柄,并PostMessage通知对应的事件去更新窗口数据。
#4
根据线程处理的数据不同,获取不同的视图窗口句柄,通知对应的视图窗口更新数据!这里要获取不同的视图窗口,所以有没有获取任意视图窗口句柄的方法?
#5
顶起,别沉了!!!
#6
构造这个类时可以将视图窗口句柄保存到这个类中
#7
我这个类是单独的,是由多线程调用的,构造的时候怎么传参?这里只有把每个视图的指针或者视图的句柄先保存起来,然后通过全局APP或者MainFrame去调用?我不知道如何在APP或者MainFrame类中保存每个视图的指针?
#8
而且我这个是单文档项目。
#9
注意:
GetActiveView()前先SetActiveView
BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);
GetActiveView()前先SetActiveView
BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);
#10
直接这样写编译不过啊!SetActiveView(CXXView);
#11
谢谢大家的回复,问题已经解决!