窗口切分

blue_teeth 2001-09-23 04:20:54
我在CMainFrame::WindowProc函数中,对一个消息进行了相应。
相应的过程就是起个线程:
case MYWM_SHOWCALLDATA:
{
if(CreateThread(NULL,
0,
(unsigned long (__stdcall *)(void *))CallResultShow,
(void *)0,
0,
NULL
) == NULL)
{
AfxMessageBox("启动线程失败!");
}
break;
}

现在出问题的地方是:
线程中得到切分窗口时,出现了大红叉,
DWORD WINAPI CallResultShow(LPVOID lpvThreadParm)
{
//获得列表的指针
CMainFrame * pFWnd = (CMainFrame *)AfxGetMainWnd();
pFWnd->ShowWindow(SW_SHOWNA);
/*pFWnd->SetActiveWindow();*/
CRightList * pListView =
(CRightList*)pFWnd->m_wndSplitter.GetPane(0,1);
ASSERT(pListView != NULL);
CListCtrl& lstRight = pListView->GetListCtrl();

LONG lStyle;
lStyle=GetWindowLong(lstRight.m_hWnd,GWL_STYLE);//获取当前窗口类型
lStyle&=~LVS_TYPEMASK; //清除显示方式位
lStyle|=LVS_REPORT; //设置显示方式
SetWindowLong(lstRight.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型
lstRight.SetExtendedStylelstRight.GetExtendedStyle) |LVS_EX_FULLROWSELECT);

我的线程函数CallResultShow主要是负责:在切分窗口(右边)中以报表的形式显示数据
但是在语句CRightList * pListView =
(CRightList*)pFWnd->m_wndSplitter.GetPane(0,1);
出现错误!!!

望高人指点!!!急!急!急!急!急!!!!!!!!
...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_teeth 2001-09-25
  • 打赏
  • 举报
回复
我现在知道,如果在启动线程之前CMainFrame * pFWnd = (CMainFrame *)AfxGetMainWnd();
然后把pFWnd 作为参数传进线程就不会有问题了。

我想知道为什么。
CMainFrame * pFWnd = (CMainFrame *)AfxGetMainWnd();
也是得到主窗口的指针啊。
蒋晟 2001-09-24
  • 打赏
  • 举报
回复
子线程的AfxGetMainWnd()指向一个句柄和主窗口一样的CWnd对象。
abcicq 2001-09-24
  • 打赏
  • 举报
回复
CMainFrame * pFWnd = (CMainFrame *)AfxGetMainWnd();
这儿有问题。(不该这么用)
CMainFrame* pFWnd = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
就该可以了。
wilddragon 2001-09-24
  • 打赏
  • 举报
回复
好困呀
blueskyweave 2001-09-24
  • 打赏
  • 举报
回复
是不是打错了?为什么创建线程是没有参数?
蒋晟 2001-09-24
  • 打赏
  • 举报
回复
>我是对CMainFrame * pFWnd 的公有变量进行操作
AfxGetMainWnd()指向的又不是一个CMainFrame对象,你想做什么操作?
lonsy 2001-09-24
  • 打赏
  • 举报
回复
pFWnd->ShowWindow(SW_SHOWNA);
这一句有用吗?没用就删掉试试!
blue_teeth 2001-09-24
  • 打赏
  • 举报
回复
to blueskyweave(枫枫) :
我是对CMainFrame * pFWnd 的公有变量进行操作,所以不用参数(只是为了完成工作进度,不好意思,不想考虑太多)

to abcicq(219241) :
这样用过了,还是一样。

做成线程是因为对数据库的访问很慢,不做成线程(至少现在我只知道这个方法),
整个Main窗口就如死了一样,这样的显示数据,是用户所不能接受的。

有别的好方法,请大家告知一下。

blue_teeth 2001-09-23
  • 打赏
  • 举报
回复
somebody help me~~~~~
我不是大明 2001-09-23
  • 打赏
  • 举报
回复
不懂…!
blue_teeth 2001-09-23
  • 打赏
  • 举报
回复
敬请关注

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧