MFC 静态数据成员初始化
要用到AfxBeginThread(threadproc,.....),函数threadproc()必须为静态函数,我使用这个函数需要调用如下静态成员但是我只能在.cpp...
要用到AfxBeginThread(threadproc,.....),函数threadproc()必须为静态函数,我使用这个函数需要调用 如下静态成员
但是我只能在 .cpp文件外部初始化为空。请问应该在哪给他们赋上后面的值,还是我的思路有问题。
pStc=(CStatic *)GetDlgItem(IDC_STATIC);
pStc->GetClientRect(&rect);
pDC=pStc->GetDC();
hDC=pDC->GetSafeHdc();
capture1=cvCreateFileCapture("。。。。"); 展开
但是我只能在 .cpp文件外部初始化为空。请问应该在哪给他们赋上后面的值,还是我的思路有问题。
pStc=(CStatic *)GetDlgItem(IDC_STATIC);
pStc->GetClientRect(&rect);
pDC=pStc->GetDC();
hDC=pDC->GetSafeHdc();
capture1=cvCreateFileCapture("。。。。"); 展开
1个回答
展开全部
描述有些混乱。
首先,如果这些代码在静态函数中,是有问题的,你必须先获取对话框窗口指针(如果不是,那么就不用)AfxGetMainWnd之类的方式即可。
提问中第一行代码有问题,IDC_STATIC不能作为可控制的静态框的ID,必须修改为其它ID(比如IDC_STATIC1)才可以成功获取。
是在没法确定你静态函数和代码有什么联系,静态函数(即使是类成员)也不能直接调用非静态的窗口操作函数,必须先获取一个合理的、实际存在的指针才可以操作。
首先,如果这些代码在静态函数中,是有问题的,你必须先获取对话框窗口指针(如果不是,那么就不用)AfxGetMainWnd之类的方式即可。
提问中第一行代码有问题,IDC_STATIC不能作为可控制的静态框的ID,必须修改为其它ID(比如IDC_STATIC1)才可以成功获取。
是在没法确定你静态函数和代码有什么联系,静态函数(即使是类成员)也不能直接调用非静态的窗口操作函数,必须先获取一个合理的、实际存在的指针才可以操作。
追问
这些代码肯定不在静态函数中,我不知道应该把他们放在哪。程序主体意思是利用opencv在静态控件中播放视频,但是循环视频时对话框中的按键不好用,所以我想启用一个新的线程。就得用afxbeginthread。我说的静态函数中需要用static的hDC,但我不知道hDC的初始化应该在哪。求大神指点。
追答
前面说过了,你需要的不是初始化,而是获取实际窗口和窗口DC的句柄。
你可以通过线程函数的参数,将对话框的指针或句柄传递过去,也可以通过AfxGetMainWnd之类的MFC标准方法在线程中获取。
取得对话框指针之后:
pDlg->GetDlgItem(IDC_STATIC1);
就可以获取控件的指针了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询