本人是刚从.net和java方向转到VC++开发的新手,现遇到一个问题想请教各位大师:
本人定义了一个3重拆分框架(类似于FlashGet),要通过一个线程获得最里面一层SplitterWnd框架所包含的CFormView,然后再获得CFormView试图的List控件(使用GetDlgItem),最后在List控件上动态输出一些内容。但是,这个线程的过程函数不再MainFrm和其他试图文档类中,而是在一个普通的C++自定义类中(该类没有继承任何文档和视图),因此我要讲“什么(问题1)”参数传到过程函数中,在过程函数(独立的C++类中)中又如何获得所需要的List控件。
本人试过很多方法,但是一到在普通自定义的C++类中用 (相关FormView句柄——如何获得?(问题2))->GetDlgItem(...)就出断言错,
本人定义了一个3重拆分框架(类似于FlashGet),要通过一个线程获得最里面一层SplitterWnd框架所包含的CFormView,然后再获得CFormView试图的List控件(使用GetDlgItem),最后在List控件上动态输出一些内容。但是,这个线程的过程函数不再MainFrm和其他试图文档类中,而是在一个普通的C++自定义类中(该类没有继承任何文档和视图),因此我要讲“什么(问题1)”参数传到过程函数中,在过程函数(独立的C++类中)中又如何获得所需要的List控件。
本人试过很多方法,但是一到在普通自定义的C++类中用 (相关FormView句柄——如何获得?(问题2))->GetDlgItem(...)就出断言错,
解决方案 »
- 类似atoi、atol的函数有多少?
- 求教 OpenProcess打不开的进程
- BCGPro Rebar动画框的位置问题?
- 关于SetWindowRgn函数的疑问(在线)
- 多线程编程高手看看我的代码有什么问题。
- 初学VC
- 高分求救,VC中怎样通过ODBC调用Oracle存储过程?
- 请教new[]函数编译出错的问题!
- InstallShield Profession6.22, 如何调用外部执行程序,有无象VC的CreateProcess()API ?
- 谁做过把某一目录下所有bitmap文件显示到一个控件里,然后从中可以选择任意一个的程序?请提供技术帮助。谢谢
- 在动态库中添加资源
- 如何枚举窗口得到窗口句柄,再得到窗口所属进程?
CWnd* GetPane( int row, int col );
先通过这个获得你view的指针
然后通过这个获得的指针去调用GetDlgItem获得formview上的控件指针,
int row,
int col
) const;
的得到MainFrame;
2.用(CMyFormView*)MainFrame->m_wndSplitter.GetPane(1, 1);
得到试图指针。
3。就不用说了直接用这个指针调用GetDlgItem吧
UINT opDown( LPVOID pWnd )//--------->该函数在一个自定义的普通C++类中
{
CFormView * p_hWnd = ( CFormView * )pWnd; CListCtrl * cw = (CListCtrl *)p_hWnd->GetDlgItem(IDC_RIGHT2);
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.iSubItem = 0;
lvc.pszText = (LPTSTR) _T( "名称 " );
lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
cw->InsertColumn( 0, &lvc);
lvc.iSubItem = 1;
lvc.pszText = (LPTSTR) _T( "大小 " );
lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
cw->InsertColumn( 1, &lvc);
lvc.iSubItem = 2;
lvc.pszText = (LPTSTR) _T( "已完成数 " );
lvc.cx = cw->GetStringWidth(lvc.pszText)+80;
cw->InsertColumn( 2, &lvc); CString strText;
cw->InsertItem( LVIF_TEXT|LVIF_STATE, 0, strText, (0%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0);
strText.Format(TEXT("%s, %s"), paraArray.fileName, paraArray.httpAddress);
cw->SetItemText(0, 0, strText);
return 0;
}
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);//设置新风格
SetWindowLong(p_hWnd->m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
唉,我设了风格还是不可以,法1:
UINT opDown( LPVOID pWnd )
{
CFormView * p_hWnd = ( CFormView * )pWnd; CListCtrl * cw = (CListCtrl *)p_hWnd->GetDlgItem(IDC_RIGHT2);
DWORD dwStyle = GetWindowLong(p_hWnd->m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
SetWindowLong(p_hWnd->m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
法2:
在PreCreateWindow()中设上述方法都不奏效