// 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函数 然后也出现了上面的问题
{
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函数 然后也出现了上面的问题
m_PIso1;//是什么,控件?
窗口显示前不能对控件赋值!
Isd.m_PIso1=context->volume->minIso;
Isd.m_PIso2=context->volume->maxIso;
if (IDOK==Isd.DoModal()) {对话框应该可以出来。
{
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函数了
#include "MIPVAD.h"
#include "testDlg.h"
#include "afxdialogex.h"
// testDlg dialogIMPLEMENT_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()
testDlg *ptd=new testDlg;
ptd->DoModal();
: CDialog(testDlg::IDD, pParent)
{// F9 这里停一下看看?
}
再停在入口
停入口那里看看
是不是系统没安装好?
#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);
};
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,但然后就是对话框闪了一下就不见了,程序就卡在了那里的,求大神解决