照书上的例子作了一个播放avi动画的程序,为什麽对话框中的ID号和.cpp中的程序文件的ID不一致?以下是我的程序:
void CDlgExampleDlg::OnBnClickedOpen(void)
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(true,"G:\WINNT\clock.avi");
int ret=dlg.DoModal();
if(ret==IDOK)
{
m_FileName=dlg.GetFileName();
}
if(!m_Animate.Open(m_FileName))

m_Animate.Play(0,-1,-1);
}void CDlgExampleDlg::OnBnClickedPlay(void)
{
// TODO: 在此添加控件通知处理程序代码
m_Animate.Play(0,-1,-1);
}
我已经在资源视图中把button的id都改成了IDC_OPEN,IDC_PLAY,IDC_STOP,IDC_EXIT,但程序中的if(ret==IDOK)中的
IDOK是哪里来的,只要把IDOK改成IDC_OPEN等程序就不能播放avi动画,这是为什麽?请指点!

解决方案 »

  1.   

    IDOK是微软定义好了的ID,你可以使用Go to define 察看定义DoModal()返回值默认为IDOK和IDCANCEL,你可以用Enddialog(1000) 返回你的1000,1000可为你定义的任意值
      

  2.   

    首先:这个IDOK并不是一个resource ID,IDOK是一个宏定义:如下:
    //winuser.h
     * Dialog Box Command IDs
     */
    #define IDOK                1
    #define IDCANCEL            2
    #define IDABORT             3
    #define IDRETRY             4
    #define IDIGNORE            5
    #define IDYES               6
    #define IDNO                7
    #if(WINVER >= 0x0400)
    #define IDCLOSE         8
    #define IDHELP          9
    #endif /* WINVER >= 0x0400 */在vc里面,对一些你不知道的东西,比如IDOK,你可以在编辑环境下选中IDOK,然后右键,在弹出菜单里面选择 Go to definition.
      

  3.   

    多谢指点!这句:int ret=dlg.DoModal();为什麽ret要声明为int 型的?ret地返回值不是IDOK或IDCANCEL吗?他们又不是数字,不应该声明成整形int啊?!这是为什麽?   “if(ret==IDOK)”中==IDOK是不是意思是说"如果存在此文件"?
      

  4.   

    IDOK就是数字!
    建义把C语言学完整,特别是常量定义部分