首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

GetDlgItemIn为什么在视图类中获取不到值?该怎么解决

2012-05-01 
GetDlgItemIn为什么在视图类中获取不到值?void CGeoTransView::OnMove(){// 获取文档指针CGeoTransDoc* pD

GetDlgItemIn为什么在视图类中获取不到值?
void CGeoTransView::OnMove() 
{
// 获取文档指针
CGeoTransDoc* pDoc = GetDocument();

// 获取输入图像DIB对象指针
ImgCenterDib* pDib = pDoc->GetPDib();

//只处理灰度和彩色图像
if(pDib->m_nBitCount!=8 && pDib->m_nBitCount!=24)
{
::MessageBox(0, "只处理灰度和彩色图像", MB_OK, 0);
return ;
}
  // 对话框对象
MoveDlg MoveDlgObj;
if (IDOK == MoveDlgObj.DoModal())
{
// 方法一:运行出错,获取用户输入的平移量
int OffsetX = MoveDlgObj.GetDlgItemInt(ID_HMOVE);
int OffsetY = MoveDlgObj.GetDlgItemInt(ID_VMOVE);

// 方法二:获取不到EDIT控件中的值,获取用户输入的平移量
int OffsetX = GetDlgItemInt(ID_HMOVE);
int OffsetY = GetDlgItemInt(ID_VMOVE);

// 方法三:获取不到EDIT控件中的值,获取用户输入的平移量
HWND hh = MoveDlgObj.GetSafeHwnd();
BOOL flag;UINT ui= ::GetDlgItemInt(hh,IDC_H_MOVE, &flag, true);

  }

[解决办法]
MoveDlg MoveDlgObj;
if (IDOK == MoveDlgObj.DoModal())

从你的代码看出 ,你创建的是一个模态对话框,在if (IDOK == MoveDlgObj.DoModal())这一句代码,消息被中断了,然后只有你点击OK或者Cancel之后消息才会向下执行,然后,当你点击了OK后,你的模态对话框会立刻被销毁,所以你下面的MoveDlgObj应该是一个空值

你可以先用 IsWindow(MoveDlgObj)来判断MoveDlgObj是否已经被销毁,如果对话框还在在再调用其
GetDlgItemInt()来取值


所以你这里应该使用非模态的对话框
[解决办法]
DoModal后 窗口已经被销毁
可以在模态对话框中 和控件关联变量 DoModal后从关联的变量取值

热点排行