高手请看一下,非模态对话框调用,程序崩溃

SKzhinengjiagong 2011-10-09 10:34:45
点击按钮时 程序崩亏

void CMyDlg::OnSTART()
{
// TODO: Add your control notification handler code here
CSampleDlg * dialog = new CSampleDlg; //CSampleDlg 与对话框关联的类
dialog->Create(IDD_DIALOG1,this);///创建
dialog->ShowWindow(SW_SHOW); ///显示

}
程序崩溃 0x00407bc2指令引用 0xcdcdcdcd内存。 该内存不能为读
...全文
499 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_symbol 2012-08-15
  • 打赏
  • 举报
回复
我的ShowWindows也崩溃,DoModal没事,对话框 对象是类成员 变量
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
我的初始化下接着几个代码
BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();

float *pDataBuf=NULL;
h_count=0;
h_dbResolutionX=1;
count2=0;
SSy=0;
SSx=0;
return TRUE; // return TRUE unless you set the focus to a control

}
ddszhan 2011-10-10
  • 打赏
  • 举报
回复
dialog指针需要保存起来吧,不然以后你怎么释放这块内存。
gameslq 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dingdingyizu 的回复:]
高手我调整一下初始化 程序不崩溃了 但是为什么弹出的对话框会卡死 ,而且上面控件都不显示
[/Quote]
把初始化的里面的代码优化下,初始化代码里面好像有死循环了
dingdingyizu 2011-10-10
  • 打赏
  • 举报
回复
高手我调整一下初始化 程序不崩溃了 但是为什么弹出的对话框会卡死 ,而且上面控件都不显示
sichuanwww 2011-10-10
  • 打赏
  • 举报
回复
显示对话框没问题,是对话框初始化相关的地方出了问题
不二星空 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skzhinengjiagong 的回复:]

谢谢高手 我去看一下
[/Quote]
看的结果呢?

dialog->Create(IDD_DIALOG1,this);///创建
dialog->ShowWindow(SW_SHOW); ///显示
哪句崩了?
对话框的代码呢。。
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
我顶 顶。。。。
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
谢谢高手们的关心
孤客天涯 2011-10-10
  • 打赏
  • 举报
回复
你对话框指针用的是局部变量?
shen_wei 2011-10-10
  • 打赏
  • 举报
回复
本人QQ 383156647 部分已经实现了。。就是缺少数据内容了!!!
shen_wei 2011-10-10
  • 打赏
  • 举报
回复
我只是根据你的代码,写的测试。。。

到哪里就是 0,一直死循环了。。。
shen_wei 2011-10-10
  • 打赏
  • 举报
回复
DrawGrid2(CDC *pDC)
{
for(int t=0; t<=rect.right; t+=3*SSx)
} SSx = 0;这里都死循环了!!!朋友。。debug下就完了。。o(︶︿︶)o 唉
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
这本来是从 定时器了 用电脑随机数来获得数据的,在主对话框中已经实现了,我想再用个弹出对话框来用作曲线回放
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
高手 这就是
CSampleDlg.h文件

#if !defined(AFX_SAMPLEDLG_H__DF38A783_C8CB_4180_828C_8C5B0DF76920__INCLUDED_)
#define AFX_SAMPLEDLG_H__DF38A783_C8CB_4180_828C_8C5B0DF76920__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SampleDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CSampleDlg dialog

class CSampleDlg : public CDialog
{
// Construction
public:
int count2;
int SSy;
int SSx;
float h_dbResolutionX;
int h_count;
float * pDataBuf;
CSampleDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CSampleDlg)
enum { IDD = IDD_DIALOG1 };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSampleDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(CSampleDlg)
virtual void OnOK();
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
void DrawGrid2(CDC *pDC);
void DrawDataZ(CDC *pDC);
void DrawDataY(CDC *pDC);
void DrawDataX(CDC *pDC);
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SAMPLEDLG_H__DF38A783_C8CB_4180_828C_8C5B0DF76920__INCLUDED_)
shen_wei 2011-10-10
  • 打赏
  • 举报
回复
IDC_PAINT 是什么控件

pDataBuf[0] 是获取什么数据的,什么类型??

能否贡献下CSampleDlg.h文件。。。
shen_wei 2011-10-10
  • 打赏
  • 举报
回复
pDataBuf[0] 是怎么定义的?获取哪里的数据??

IDC_PAINT 是什么控件?
SKzhinengjiagong 2011-10-10
  • 打赏
  • 举报
回复
高手们 说得对 对话框就是不能拖动
这是所有代码
BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
float *pDataBuf=NULL;
h_count=0;
h_dbResolutionX=1;
count2=0;
SSy=0;
SSx=0;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void CSampleDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
CWnd *pWnd=GetDlgItem(IDC_PAINT);
pWnd->GetClientRect(&rect);
CDC memdc;
CBitmap memBitmap;
memdc.CreateCompatibleDC(&dc);
memBitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height());
memdc.SelectObject(&memBitmap);

memdc.SetMapMode(MM_ANISOTROPIC);
memdc.SetWindowOrg(0,0);

memdc.SetWindowExt(rect.Width(), -rect.Height());
memdc.SetViewportOrg(rect.left, rect.bottom);
memdc.SetViewportExt(rect.Width(), rect.Height());

// background fill
memdc.FillSolidRect(&rect,RGB(0,0,0));
memdc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));


//**************** 画刻度网格***************//
DrawGrid2(&memdc);


//**************** 画数据***************//
DrawDataX(&memdc);
DrawDataY(&memdc);
DrawDataZ(&memdc);
//************************************//

// 恢复内存memdc坐标映射模式,使之与dc一样
memdc.SetMapMode(dc.GetMapMode());
memdc.SetViewportOrg(dc.GetViewportOrg());
memdc.SetViewportExt(dc.GetViewportExt());
memdc.SetWindowOrg(dc.GetWindowOrg());
memdc.SetWindowExt(dc.GetWindowExt());

dc.BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);

memBitmap.DeleteObject();
memdc.DeleteDC();

}



void CSampleDlg::DrawDataX(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);

int nCoordWith = rect.right-rect.left,
nCoordHeight = rect.bottom;
int nOffsetX, nOffsetY; //数据的偏移量

CPen pen(PS_SOLID, 1, RGB(0, 255, 0));
pDC->SelectObject(&pen);
//--------------------------------------------------------------------
pDC->MoveTo(0, 0);
pDC->LineTo(0, pDataBuf[0]);
for(int i=1; i<h_count; i++) // 单位1的实现方法,不用坐标转化了
{
if(pDataBuf[i]==0) // 如果有数据为零,保持上一个数据值

pDataBuf[i]=pDataBuf[i-1];
//--------------------------------------------------------------------------------
nOffsetX = int(nCoordWith * (i+1) / nCoordWith*h_dbResolutionX);
nOffsetY = int(nCoordHeight * pDataBuf[i] / nCoordHeight); //

pDC->LineTo(nOffsetX, nOffsetY);

}

}

void CSampleDlg::DrawDataY(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);

int nCoordWith = rect.right-rect.left,
nCoordHeight = rect.bottom;
int nOffsetX, nOffsetY; //数据的偏移量

CPen pen(PS_SOLID, 1, RGB(0, 255, 0));
pDC->SelectObject(&pen);
//--------------------------------------------------------------------
pDC->MoveTo(0, 0);
pDC->LineTo(0, pDataBuf[0]);
for(int p=1; p<h_count; p++) // 单位1的实现方法,不用坐标转化了
{
if(pDataBuf[p]==0) // 如果有数据为零,保持上一个数据值

pDataBuf[p]=pDataBuf[p-1];
//--------------------------------------------------------------------------------
nOffsetX = int(nCoordWith * (p+1) / nCoordWith*h_dbResolutionX);
nOffsetY = int(nCoordHeight * pDataBuf[p] / nCoordHeight); //

pDC->LineTo(nOffsetX, nOffsetY);
}
}
void CSampleDlg::DrawDataZ(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);

int nCoordWith = rect.right-rect.left,
nCoordHeight = rect.bottom;
int nOffsetX, nOffsetY; //数据的偏移量

CPen pen(PS_SOLID, 1, RGB(0, 255, 0));
pDC->SelectObject(&pen);
//--------------------------------------------------------------------
pDC->MoveTo(0, 0);
pDC->LineTo(0, pDataBuf[0]);
for(int q=1; q<h_count; q++) // 单位1的实现方法,不用坐标转化了
{
if(pDataBuf[q]==0) // 如果有数据为零,保持上一个数据值

pDataBuf[q]=pDataBuf[q-1];
//--------------------------------------------------------------------------------
nOffsetX = int(nCoordWith * (q+1) / nCoordWith*h_dbResolutionX);
nOffsetY = int(nCoordHeight * pDataBuf[q] / nCoordHeight); //

pDC->LineTo(nOffsetX, nOffsetY);
}
}

void CSampleDlg::DrawGrid2(CDC *pDC)
{

CRect rect;
GetClientRect(&rect);

//创建画笔对象
CPen PenRed,PenYellow,PenGreen,PenLBlue, PenPurple;
CPen * pOldPen;
//
PenYellow.CreatePen(PS_SOLID, 1, RGB(192,192, 0 )); //创建黄色画笔
//
PenGreen.CreatePen(PS_SOLID, 1, RGB(0,128, 64 )); //创建绿色画笔
//
PenPurple.CreatePen(PS_SOLID, 1, RGB(0,192, 0 )); //创建亮绿色色画笔
//
PenLBlue.CreatePen(PS_SOLID, 1, RGB(0,0,192)); //创建蓝色画笔
//
PenRed.CreatePen(PS_SOLID,2, RGB(192,0,0 )); //创建红色画笔

//-------------------------绘图区-------------------------------

pOldPen=pDC->SelectObject(&PenRed); //将画笔选入画笔对象,并保存原先画笔
// 绘制X轴
pDC->MoveTo(-5,0);
pDC->LineTo(rect.right,0);

//--------------------------------------------------------------------------------
for(int t=0; t<=rect.right; t+=3*SSx) // 每三个大格画一个刻度线 Sx=30 // X轴的刻度线
{
//memdc.MoveTo(0,0);
//memdc.LineTo(rect.right,0);
pDC->MoveTo(t,0); //绘制刻度线,且具有移动功能
pDC->LineTo(t,-6);
}
//------------------------------------------------------------------------------------
for(int tm=0;tm<=rect.right;tm+=SSx) // 每个小格的画一个刻度线 Sx=30
{
//memdc.MoveTo(0,0);
//memdc.LineTo(rect.right,0);
pDC->MoveTo(tm,0); //绘制刻度线,且具有移动功能
pDC->LineTo(tm,-3);
}
//-----------------------------------------------------------------------------------
// 绘制Y轴
pDC->MoveTo(0,0);
pDC->LineTo(0,rect.bottom);
//-----------------------------------------------------------------------
//将画笔选入画笔对象
pDC->SelectObject(pOldPen); // 回复原来的画笔
pDC->SelectObject(&PenGreen); //选入蓝色画笔
//----------------------------------------------------------------------------------//
//-------------------------Y轴上半轴网线--------------------------------------------//
int y,count_y;
for(y=rect.top; y<rect.bottom; y+=15)
{ pDC->MoveTo(rect.left,y);
pDC->LineTo(rect.right,y);

}
//------------------------------------------------------------------------------------//
//-------------------------x轴网线 有滚动的效果---------------------------------------//

int x;
for(x=0; x<rect.right; x+=15)
{
pDC->MoveTo(x,rect.top);
pDC->LineTo(x,rect.bottom+30);
}

//----------------------------------------------------------------------------------------------

CString stry; //Y轴上半轴刻度值
for(float z=0; z<=rect.bottom; z+=2*SSy)
{
count2=z;
stry.Format("%.3f",count2); //["." prec] 指定精度,对于浮点数效果最佳
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(-65, z+10, stry);
}
//----------------------------------------------------------

int county=0; //绘制刻度线
for(int u=0;u<=rect.bottom;u+=1*SSy)
{
if(county==0)
{
pDC->SelectObject(&PenRed);
pDC->MoveTo(0,u);
pDC->LineTo(-6,u);
}
else
{
pDC->SelectObject(&PenRed);
pDC->MoveTo(0,u);
pDC->LineTo(-4,u);
}
county++;
if (county>1)
county=0;
}


}
pop1210 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ddszhan 的回复:]
dialog指针需要保存起来吧,不然以后你怎么释放这块内存。
[/Quote]
非模态对话框通常都delete this;自删除
不二星空 2011-10-10
  • 打赏
  • 举报
回复
Onpait函数里有做什么吗 窗口可以拖动吗,如果不能拖动里面肯定有死循环之类的阻塞了
加载更多回复(5)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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