在一个函数中调用domodal后,函数后面的所有语句直接跳过都不执行了呢?

时间:2021-12-02 07:19:46
在一个函数中 新建了一个对话框对象,然后调用了DoModal()后 并不现实对话框,而且单步执行时发现domadol函数之后的语句都跳过不执行了?为什么会跳出整个函数了呢?部分代码如下:

CIsoSetDlg Isd;
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;
if (IDOK==Isd.DoModal()) {

if(Isd.m_PIso1<Isd.m_PIso2)
{
context->volume->minIso=Isd.m_PIso1;
context->volume->maxIso=Isd.m_PIso2;
}
else
{
context->volume->minIso=Isd.m_PIso2;
context->volume->maxIso=Isd.m_PIso1;
}
}

39 个解决方案

#1


大牛快来呀。。。。。

#2


对话框创建失败。

#3


为什么对话框创建失败?是我创建对话框时出了问题?为了测试我新建了另一个对话框,在那个对话框生成的.cpp文件里我没有添加任何东西,然后测试也出现了同样的问题,这也是对话框创建失败吗?

#4


你Debug下调试一下你的CIsoSetDlg类,看看对话框初始化的地方,比如OnInitDialog函数里写了什么?

#5


BOOL CIsoSetDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_PSld1.SetRange(-1024, 3071);
m_PSld1.SetTicFreq(200);
m_PSld2.SetRange(-1024, 3071);
m_PSld2.SetTicFreq(200);

m_PSpin1.SetBuddy(&m_PEdit1);
m_PSpin2.SetBuddy(&m_PEdit2);

m_PSpin1.SetRange(-1024, 3071);
m_PSpin2.SetRange(-1024, 3071);

   // Set current position
m_PSpin1.SetPos(m_PIso1);
m_PSpin2.SetPos(m_PIso2);
m_PSld1.SetPos(m_PIso1);
m_PSld2.SetPos(m_PIso2);
UpdateData(false);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}
这是我OnInitDialog的函数,里面是一些控件的初始化,另外,类里面一定要有OnInitDialog函数吗?我另创建了一个对话框,里面没有OnInitDialog函数 然后也出现了上面的问题

#6


Isd. m_PIso1=context->volume->minIso;
m_PIso1;//是什么,控件?
窗口显示前不能对控件赋值!

#7


不是控件 只是一个int型变量

#8


在资源中打开你的对话框,按Ctrl+T 看看对话框能不能出来。

#9


可以出来

#10


那去掉:
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;

if (IDOK==Isd.DoModal()) {

对话框应该可以出来。

#11


我觉得不是这个问题,Isd.m_PIso1只是普通的int变量,而且为了测试我新建了另外一个对话框,里面什么都没做,还是会出现调用对话框的函数后面的代码都不执行的问题,是不是跟父窗口有关呢,或者是我创建对话框时除了问题,OnInitDialog()函数是自动生成的吗,我新创建的那个对话框里为什么没有OnInitDialog()函数呢?

#12


void CMipvadKernel::ssd()
{
sr->enable = TRUE;
clear3DDlg();
getSSDDlg().ShowWindow(TRUE);
testDlg td;
td.DoModal();
/* CIsoSetDlg Isd;
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;
if (IDOK==Isd.DoModal()) {

if(Isd.m_PIso1<Isd.m_PIso2)
{
context->volume->minIso=Isd.m_PIso1;
context->volume->maxIso=Isd.m_PIso2;
}
else
{
context->volume->minIso=Isd.m_PIso2;
context->volume->maxIso=Isd.m_PIso1;
}
}*/
if (sr->Init(getSSDDlg().GetWindowDC(), RGB(0,0,0)))
{

TRACE("Render ok\n");
ssdResize();
sr->load(context->volume);
}
else
{
TRACE("Render failed\n");
}

// ssdResize();
ssdRender();
get3DDlg().Invalidate();

}
如上程序,testDlg是我新建的一个对话框,但是调试时发现程序执行到td.DoModal()后,就跳出ssd函数了

#13


#include "stdafx.h"
#include "MIPVAD.h"
#include "testDlg.h"
#include "afxdialogex.h"


// testDlg dialog

IMPLEMENT_DYNAMIC(testDlg, CDialog)

testDlg::testDlg(CWnd* pParent /*=NULL*/)
: CDialog(testDlg::IDD, pParent)
{

}

testDlg::~testDlg()
{
}

void testDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(testDlg, CDialog)
END_MESSAGE_MAP()

#14


正常时应该:
testDlg *ptd=new testDlg;
ptd->DoModal();



#15


还是不行,为什么会直接跳出那个ssd()函数了呢,就是那个函数后面的语句都不执行了,直接去执行下一个函数了

#16


testDlg::testDlg(CWnd* pParent /*=NULL*/)
: CDialog(testDlg::IDD, pParent)
{// F9 这里停一下看看?
    
}

#17


没有问题,下一步就到了ptd->DoModal();

#18


那就加一个WM_INITDIALOG
再停在入口

#19


为什么我的class wiza里的message里没有WM_INITDIALOG呢?

#20


难道这是要手工添加的?

#21


应该有,不用手工加。
你的系统是不是有毛病?

#22


难道是我的vs2010的问题?但是虚函数选项里有OnInitDialog,应该一样的吧?

#23


有了就行:点 OnInitDialog 加函数,
停入口那里看看

#24


程序执行到ptd->DoModal();转入OnInitDialog 函数正常执行,但是执行完OnInitDialog 函数并不显示对话框,而且转回后调用它的函数ssd()后面的语句都不执行了,而是去执行下一个函数了?

#25


在OnCancel和OnOK中停停看。
是不是系统没安装好?

#26


重装vs2010

#27


好像是因为我的调用对话框的那个函数所在的类不是基于对话框的类,我把它换到一个基于对话框的类的函数中调用,就可以啦,是这样吗?
可是为什么我的对话框的控件的标题换成汉字的时候是横着的呢?怎样能换回来呢?

#28


‘是这样吗?’
一般不是这样的。

‘标题换成汉字’
资源中字体错了。

#29


那到底是怎么回事呢?还是我系统的问题? 又该怎样设置资源中的字体呢?

#30


那又是怎么回事呢?我把它换到一个基于对话框的函数中调用,确实可以正常显示了,程序也能正常执行了。
还有,该怎样设置控件中的字体呢?

#31


那个带‘@’的字体是转90°的,不要搞错了。

#32


原来是这样呀,这个已经弄好了,呵呵,谢谢谢谢!
可是那个对话框又是怎么一回事呢,我在一个普通的类里调用,就出问题
然后我把它转到一个基于对话框的类里调用,就正常了。我还以为这个跟父窗口什么的有关呢

#33


“在一个普通的类里调用”
看看这个类的定义(头文件)

#34


#pragma once
#include <string>
#include <map>
#include <math.h> 

// ok
class CMIPVADDlg;
class CDataDlg;
class C2DDlg;
class CDicomArrayBox;
//
class CDataContext;
class C3DDlg;
class CVRTDlg;
class CVolumeRender;
class CSSDDlg;
class CSurfaceRender;
class CMPRDlg;
class CMPRTHICKDlg;
class CMIPDlg;
class CMIPTHINDlg;
class CCTSlice;
class VrtVolumeRenderingSystem;
class CParaLine;
class CCADDlg;
class VOLUME;
class CIsoSetDlg;
class testDlg;
class CMipvadKernel
{
public:
CMipvadKernel(void);
~CMipvadKernel(void);

// GUI
void initGUI();
inline CMIPVADDlg* getMainDlg();
inline CDataDlg& getDataDlg();
inline C2DDlg& get2DDlg();
inline C3DDlg& get3DDlg();
void clear3DDlg();
inline CVRTDlg& getVRTDlg();
inline CSSDDlg& getSSDDlg();
inline CMPRDlg& getMPRDlg();
inline CMPRTHICKDlg& getMPRTHICKDlg();
inline CMIPDlg& getMIPDlg();
inline CMIPTHINDlg& getMIPTHINDlg();
inline CCADDlg& getCADDlg();
void mainResize();
void tabChange();

// 数据
CDataContext *context;
void DataSearch(CString path);
void OnTvnSelchangedTreeDicomShow(HTREEITEM item);
void load();
void DirectLoad(CString path, int gourpIndex, int firstInstance, int lastInstance);

std::map<HTREEITEM,CString> items;

//2d
CDicomArrayBox *lightbox;
void prepare2D();
void setLBRect(CRect &rect, CDC *pDC);
void LBdraw(CDC *pDC);
void LBselect(CPoint &point);
void LBMaxOne(CPoint &point);
void OnLBVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
void LBreload();
void LBinfo();
void LBMaxSelected();
void LBInvertColor();
void LBVflip();
void LBHflip();
void LBLrotate();
void LBRrotate();
void LBSetWindow();
void LBSetDefaultWindow();
void LBguchuang();
void LBfeichuang();
void LBfuchuang();
void LBzongge();
void LBlunao();
void LByaozhui();
void LBgandan();
void reloadImage();
void invertImage();
void rotateImage();
void flipImageLr();
void flipImageUd();
void flipImageDj();
void saveBmp();

//3d
void prepare3D();
void set3DWindow();
void set3DDefaultWindow();
void set3Dguchuang();
void set3Dfeichuang();
void set3Dfuchuang();
void set3Dzongge();
void set3Dlunao();
void set3Dyaozhui();
void set3Dgandan();

//# vrt
void vrt();
void vrtRender();
void vrtResize();
CVolumeRender *vr;

//# ssd
void ssd(int minIso,int maxIso);
void ssdRender();
void ssdResize();
void ssdLButtonDown(UINT nFlags, CPoint point);
void ssdMouseMove(UINT nFlags, CPoint point);
CSurfaceRender *sr;
   
//# mpr
void mpr();
CCTSlice *ctSlice;
CBitmap * bmpA, * bmpC, * bmpS;

void  DisplayBitmap(CDC *pDC,CRect &r,CBitmap* mpBitmap);

//# mpr thick thin
void mprthick();
void mipthin();

//# mip
void mip();
VrtVolumeRenderingSystem *vrs;

//# vrt_old
VOLUME *v ;
void vrt_old_pre();
void vrt_old_render();
CPoint m_LeftDownPos;
void vrt_old_A_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_A_MouseMove(UINT nFlags, CPoint point);
void vrt_old_S_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_S_MouseMove(UINT nFlags, CPoint point);
void vrt_old_C_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_C_MouseMove(UINT nFlags, CPoint point);

//# paraLine
void paraLine();
void updatePLine();
CParaLine *pLine;

// CAD


void ssdMouseWheel(UINT nFlags, short zDelta, CPoint pt);
void ssdRButtonDown(UINT nFlags, CPoint point);
};

#35


我就是在那个ssd()函数里调用,然后就一直出现开始的那个问题

#36


界面类 一定要从CWnd 或 CObject 派生。

一般类不存在消息循环,不能用于图形界面。

#37


原来是这样,终于明白一点了,太感谢你了

#38


想问一下,你那个对话框出来一下就不见了的问题是怎么解决的呀,我遇到了同样的问题的,求帮助

#39


代码是这样的:
bool CInterfacePhsFile::GetInitWorkCaseNumer()
{
CCaseConDlg mCaseConDlg;
mCaseConDlg.m_strCaseFileName = m_strDataFileName;
//  int m_n;
//  m_n=mCaseConDlg.DoModal();
//  CString m_c;
//  m_c.Format("%d",m_n);
//  AfxMessageBox(m_c);
// MSG msg;
//        while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
if(mCaseConDlg.DoModal()==IDOK/*&&SendMessage(WM_CLOSE)/*&&CommDlgExtendedError()*/)
{
m_iWorkCase = mCaseConDlg.m_iWorkCaseNumer;
m_iInitCase = mCaseConDlg.m_iInitCaseNumer;
m_iSpringLoadType = mCaseConDlg.m_iSpringLoadType;
}
else
{
// CommDlgExtendedError();
return false;
}
return true;
}
注释的地方是我用来调试的,可以不用看,就是在if(mCaseConDlg.DoModal()==IDOK)之后GetInitWorkCaseNumer()函数的代码都不执行了,对话框就是闪了一下然后就没了,程序也执行不动了的
初始化对话框函数中的代码是:
BOOL CCaseConDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
CString strText;
//ifstreamex fin;
BOOL bInitSet = FALSE;
BOOL bWorkSet = FALSE;

//chenbl 2011.08.31 为了适应在VS2005 unicode方式编译,所以改成UEStdioFile
//fin.open(m_strCaseFileName,ios::in);

UEStdioFileIs mFile;
if ( !mFile.Open( m_strCaseFileName, CFile::modeRead ) )
return TRUE;

while( mFile.ReadString( strText ) /*!fin.eof()*/ )
{
//fin.getline(strText.GetBufferSetLength(255),255);
//strText.ReleaseBuffer();
CString strLoad;
strLoad.LoadString(IDS_ER_LOADCASE);
if( strText.Find( strLoad ) != -1)
{
while( mFile.ReadString( strText ) /*!fin.eof()*/)
{
//fin.getline(strText.GetBufferSetLength(255),255);
//strText.ReleaseBuffer();
if( strText.IsEmpty() )
continue;
if( strText.Find( _T("-----------------------") ) != -1)
break;
int pos = m_InitListCtrl.AddString(strText);
int pos1 = m_WorkListCtrl.AddString(strText);
if (strText.Find( _T("SUS") ) != -1 && !bInitSet)
{
m_InitListCtrl.SetCurSel(pos);
bInitSet = TRUE;
}
if (strText.Find( _T("OPE") ) != -1 && !bWorkSet)
{
m_WorkListCtrl.SetCurSel(pos1);
bWorkSet = TRUE;
}
}
break;
}
}
//fin.close();
mFile.Close();

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}
它就是打开那个文件去读,然后把想要的东西加到对话框的两个列表框中去,我调试之后它都读成功了,也返回了TRUE,但然后就是对话框闪了一下就不见了,程序就卡在了那里的,求大神解决

#1


大牛快来呀。。。。。

#2


对话框创建失败。

#3


为什么对话框创建失败?是我创建对话框时出了问题?为了测试我新建了另一个对话框,在那个对话框生成的.cpp文件里我没有添加任何东西,然后测试也出现了同样的问题,这也是对话框创建失败吗?

#4


你Debug下调试一下你的CIsoSetDlg类,看看对话框初始化的地方,比如OnInitDialog函数里写了什么?

#5


BOOL CIsoSetDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_PSld1.SetRange(-1024, 3071);
m_PSld1.SetTicFreq(200);
m_PSld2.SetRange(-1024, 3071);
m_PSld2.SetTicFreq(200);

m_PSpin1.SetBuddy(&m_PEdit1);
m_PSpin2.SetBuddy(&m_PEdit2);

m_PSpin1.SetRange(-1024, 3071);
m_PSpin2.SetRange(-1024, 3071);

   // Set current position
m_PSpin1.SetPos(m_PIso1);
m_PSpin2.SetPos(m_PIso2);
m_PSld1.SetPos(m_PIso1);
m_PSld2.SetPos(m_PIso2);
UpdateData(false);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}
这是我OnInitDialog的函数,里面是一些控件的初始化,另外,类里面一定要有OnInitDialog函数吗?我另创建了一个对话框,里面没有OnInitDialog函数 然后也出现了上面的问题

#6


Isd. m_PIso1=context->volume->minIso;
m_PIso1;//是什么,控件?
窗口显示前不能对控件赋值!

#7


不是控件 只是一个int型变量

#8


在资源中打开你的对话框,按Ctrl+T 看看对话框能不能出来。

#9


可以出来

#10


那去掉:
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;

if (IDOK==Isd.DoModal()) {

对话框应该可以出来。

#11


我觉得不是这个问题,Isd.m_PIso1只是普通的int变量,而且为了测试我新建了另外一个对话框,里面什么都没做,还是会出现调用对话框的函数后面的代码都不执行的问题,是不是跟父窗口有关呢,或者是我创建对话框时除了问题,OnInitDialog()函数是自动生成的吗,我新创建的那个对话框里为什么没有OnInitDialog()函数呢?

#12


void CMipvadKernel::ssd()
{
sr->enable = TRUE;
clear3DDlg();
getSSDDlg().ShowWindow(TRUE);
testDlg td;
td.DoModal();
/* CIsoSetDlg Isd;
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;
if (IDOK==Isd.DoModal()) {

if(Isd.m_PIso1<Isd.m_PIso2)
{
context->volume->minIso=Isd.m_PIso1;
context->volume->maxIso=Isd.m_PIso2;
}
else
{
context->volume->minIso=Isd.m_PIso2;
context->volume->maxIso=Isd.m_PIso1;
}
}*/
if (sr->Init(getSSDDlg().GetWindowDC(), RGB(0,0,0)))
{

TRACE("Render ok\n");
ssdResize();
sr->load(context->volume);
}
else
{
TRACE("Render failed\n");
}

// ssdResize();
ssdRender();
get3DDlg().Invalidate();

}
如上程序,testDlg是我新建的一个对话框,但是调试时发现程序执行到td.DoModal()后,就跳出ssd函数了

#13


#include "stdafx.h"
#include "MIPVAD.h"
#include "testDlg.h"
#include "afxdialogex.h"


// testDlg dialog

IMPLEMENT_DYNAMIC(testDlg, CDialog)

testDlg::testDlg(CWnd* pParent /*=NULL*/)
: CDialog(testDlg::IDD, pParent)
{

}

testDlg::~testDlg()
{
}

void testDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(testDlg, CDialog)
END_MESSAGE_MAP()

#14


正常时应该:
testDlg *ptd=new testDlg;
ptd->DoModal();



#15


还是不行,为什么会直接跳出那个ssd()函数了呢,就是那个函数后面的语句都不执行了,直接去执行下一个函数了

#16


testDlg::testDlg(CWnd* pParent /*=NULL*/)
: CDialog(testDlg::IDD, pParent)
{// F9 这里停一下看看?
    
}

#17


没有问题,下一步就到了ptd->DoModal();

#18


那就加一个WM_INITDIALOG
再停在入口

#19


为什么我的class wiza里的message里没有WM_INITDIALOG呢?

#20


难道这是要手工添加的?

#21


应该有,不用手工加。
你的系统是不是有毛病?

#22


难道是我的vs2010的问题?但是虚函数选项里有OnInitDialog,应该一样的吧?

#23


有了就行:点 OnInitDialog 加函数,
停入口那里看看

#24


程序执行到ptd->DoModal();转入OnInitDialog 函数正常执行,但是执行完OnInitDialog 函数并不显示对话框,而且转回后调用它的函数ssd()后面的语句都不执行了,而是去执行下一个函数了?

#25


在OnCancel和OnOK中停停看。
是不是系统没安装好?

#26


重装vs2010

#27


好像是因为我的调用对话框的那个函数所在的类不是基于对话框的类,我把它换到一个基于对话框的类的函数中调用,就可以啦,是这样吗?
可是为什么我的对话框的控件的标题换成汉字的时候是横着的呢?怎样能换回来呢?

#28


‘是这样吗?’
一般不是这样的。

‘标题换成汉字’
资源中字体错了。

#29


那到底是怎么回事呢?还是我系统的问题? 又该怎样设置资源中的字体呢?

#30


那又是怎么回事呢?我把它换到一个基于对话框的函数中调用,确实可以正常显示了,程序也能正常执行了。
还有,该怎样设置控件中的字体呢?

#31


那个带‘@’的字体是转90°的,不要搞错了。

#32


原来是这样呀,这个已经弄好了,呵呵,谢谢谢谢!
可是那个对话框又是怎么一回事呢,我在一个普通的类里调用,就出问题
然后我把它转到一个基于对话框的类里调用,就正常了。我还以为这个跟父窗口什么的有关呢

#33


“在一个普通的类里调用”
看看这个类的定义(头文件)

#34


#pragma once
#include <string>
#include <map>
#include <math.h> 

// ok
class CMIPVADDlg;
class CDataDlg;
class C2DDlg;
class CDicomArrayBox;
//
class CDataContext;
class C3DDlg;
class CVRTDlg;
class CVolumeRender;
class CSSDDlg;
class CSurfaceRender;
class CMPRDlg;
class CMPRTHICKDlg;
class CMIPDlg;
class CMIPTHINDlg;
class CCTSlice;
class VrtVolumeRenderingSystem;
class CParaLine;
class CCADDlg;
class VOLUME;
class CIsoSetDlg;
class testDlg;
class CMipvadKernel
{
public:
CMipvadKernel(void);
~CMipvadKernel(void);

// GUI
void initGUI();
inline CMIPVADDlg* getMainDlg();
inline CDataDlg& getDataDlg();
inline C2DDlg& get2DDlg();
inline C3DDlg& get3DDlg();
void clear3DDlg();
inline CVRTDlg& getVRTDlg();
inline CSSDDlg& getSSDDlg();
inline CMPRDlg& getMPRDlg();
inline CMPRTHICKDlg& getMPRTHICKDlg();
inline CMIPDlg& getMIPDlg();
inline CMIPTHINDlg& getMIPTHINDlg();
inline CCADDlg& getCADDlg();
void mainResize();
void tabChange();

// 数据
CDataContext *context;
void DataSearch(CString path);
void OnTvnSelchangedTreeDicomShow(HTREEITEM item);
void load();
void DirectLoad(CString path, int gourpIndex, int firstInstance, int lastInstance);

std::map<HTREEITEM,CString> items;

//2d
CDicomArrayBox *lightbox;
void prepare2D();
void setLBRect(CRect &rect, CDC *pDC);
void LBdraw(CDC *pDC);
void LBselect(CPoint &point);
void LBMaxOne(CPoint &point);
void OnLBVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
void LBreload();
void LBinfo();
void LBMaxSelected();
void LBInvertColor();
void LBVflip();
void LBHflip();
void LBLrotate();
void LBRrotate();
void LBSetWindow();
void LBSetDefaultWindow();
void LBguchuang();
void LBfeichuang();
void LBfuchuang();
void LBzongge();
void LBlunao();
void LByaozhui();
void LBgandan();
void reloadImage();
void invertImage();
void rotateImage();
void flipImageLr();
void flipImageUd();
void flipImageDj();
void saveBmp();

//3d
void prepare3D();
void set3DWindow();
void set3DDefaultWindow();
void set3Dguchuang();
void set3Dfeichuang();
void set3Dfuchuang();
void set3Dzongge();
void set3Dlunao();
void set3Dyaozhui();
void set3Dgandan();

//# vrt
void vrt();
void vrtRender();
void vrtResize();
CVolumeRender *vr;

//# ssd
void ssd(int minIso,int maxIso);
void ssdRender();
void ssdResize();
void ssdLButtonDown(UINT nFlags, CPoint point);
void ssdMouseMove(UINT nFlags, CPoint point);
CSurfaceRender *sr;
   
//# mpr
void mpr();
CCTSlice *ctSlice;
CBitmap * bmpA, * bmpC, * bmpS;

void  DisplayBitmap(CDC *pDC,CRect &r,CBitmap* mpBitmap);

//# mpr thick thin
void mprthick();
void mipthin();

//# mip
void mip();
VrtVolumeRenderingSystem *vrs;

//# vrt_old
VOLUME *v ;
void vrt_old_pre();
void vrt_old_render();
CPoint m_LeftDownPos;
void vrt_old_A_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_A_MouseMove(UINT nFlags, CPoint point);
void vrt_old_S_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_S_MouseMove(UINT nFlags, CPoint point);
void vrt_old_C_LButtonDown(UINT nFlags, CPoint point);
void vrt_old_C_MouseMove(UINT nFlags, CPoint point);

//# paraLine
void paraLine();
void updatePLine();
CParaLine *pLine;

// CAD


void ssdMouseWheel(UINT nFlags, short zDelta, CPoint pt);
void ssdRButtonDown(UINT nFlags, CPoint point);
};

#35


我就是在那个ssd()函数里调用,然后就一直出现开始的那个问题

#36


界面类 一定要从CWnd 或 CObject 派生。

一般类不存在消息循环,不能用于图形界面。

#37


原来是这样,终于明白一点了,太感谢你了

#38


想问一下,你那个对话框出来一下就不见了的问题是怎么解决的呀,我遇到了同样的问题的,求帮助

#39


代码是这样的:
bool CInterfacePhsFile::GetInitWorkCaseNumer()
{
CCaseConDlg mCaseConDlg;
mCaseConDlg.m_strCaseFileName = m_strDataFileName;
//  int m_n;
//  m_n=mCaseConDlg.DoModal();
//  CString m_c;
//  m_c.Format("%d",m_n);
//  AfxMessageBox(m_c);
// MSG msg;
//        while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
if(mCaseConDlg.DoModal()==IDOK/*&&SendMessage(WM_CLOSE)/*&&CommDlgExtendedError()*/)
{
m_iWorkCase = mCaseConDlg.m_iWorkCaseNumer;
m_iInitCase = mCaseConDlg.m_iInitCaseNumer;
m_iSpringLoadType = mCaseConDlg.m_iSpringLoadType;
}
else
{
// CommDlgExtendedError();
return false;
}
return true;
}
注释的地方是我用来调试的,可以不用看,就是在if(mCaseConDlg.DoModal()==IDOK)之后GetInitWorkCaseNumer()函数的代码都不执行了,对话框就是闪了一下然后就没了,程序也执行不动了的
初始化对话框函数中的代码是:
BOOL CCaseConDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
CString strText;
//ifstreamex fin;
BOOL bInitSet = FALSE;
BOOL bWorkSet = FALSE;

//chenbl 2011.08.31 为了适应在VS2005 unicode方式编译,所以改成UEStdioFile
//fin.open(m_strCaseFileName,ios::in);

UEStdioFileIs mFile;
if ( !mFile.Open( m_strCaseFileName, CFile::modeRead ) )
return TRUE;

while( mFile.ReadString( strText ) /*!fin.eof()*/ )
{
//fin.getline(strText.GetBufferSetLength(255),255);
//strText.ReleaseBuffer();
CString strLoad;
strLoad.LoadString(IDS_ER_LOADCASE);
if( strText.Find( strLoad ) != -1)
{
while( mFile.ReadString( strText ) /*!fin.eof()*/)
{
//fin.getline(strText.GetBufferSetLength(255),255);
//strText.ReleaseBuffer();
if( strText.IsEmpty() )
continue;
if( strText.Find( _T("-----------------------") ) != -1)
break;
int pos = m_InitListCtrl.AddString(strText);
int pos1 = m_WorkListCtrl.AddString(strText);
if (strText.Find( _T("SUS") ) != -1 && !bInitSet)
{
m_InitListCtrl.SetCurSel(pos);
bInitSet = TRUE;
}
if (strText.Find( _T("OPE") ) != -1 && !bWorkSet)
{
m_WorkListCtrl.SetCurSel(pos1);
bWorkSet = TRUE;
}
}
break;
}
}
//fin.close();
mFile.Close();

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}
它就是打开那个文件去读,然后把想要的东西加到对话框的两个列表框中去,我调试之后它都读成功了,也返回了TRUE,但然后就是对话框闪了一下就不见了,程序就卡在了那里的,求大神解决