1.如何以编程的方式在列表框(ListBox)中选中一项Item(就是以代码实现鼠标   选中某项)?2.如何在程序中打开一个Exe文件,例如notepad.exe?3.点击一个按钮,要求用户输入一个字符串,需要另外写一个form专门来接受这个  字符串吗,有没有类似InputBox的东西?

解决方案 »

  1.   

    1.CListBox::SetTopIndex 
    2.WinExec
      

  2.   

    1. CList m_list_ctrl;
      CString str;
            m_list_ctrl.GetLBText(m_list_ctrl.GetCurSel(),str);
      //str既为选中的值。
    2.WinExec (notepad);具体怎么调用,我忘掉了,大概是这个样子的。3.不用另行做Form.其实很简单,加入一个EditBox,你可以在初始化对话框时隐藏它,而在点击按钮时让它显示。
       下面是实现:
    CDialog::OnInitDialog()
    {
       GetDlgItem(EDIT_BOX)->ShowWindow(SW_HIDE);
       ………
    }
    CDialog::OnButton()
    {
      GetDlgItem(EDIT_BOX)->ShowWindow(SW_SHOW);
      ………
    }
      

  3.   

    1.SetCurSel( int nSelect );
    2.system("notepad.exe");
    3.应该没有,再做一个对话框吧。可以研究一下MessageBox()、AfxMessageBox().
      

  4.   

    1. CList m_list_ctrl;
      CString str;
            m_list_ctrl.GetLBText(m_list_ctrl.GetCurSel(),str);
      //str既为选中的值。
    2.WinExec (notepad)或CreateProcess()或ShellExecute()3:我不太明白你的意思,如果你想要求值接受字符串的话
    可一些类是下面的判断函数:(只需要将ascii值改一下就可以了)
    如果设定控件NUMBER属性的话将只能键入数字键,有时候不太合适。
    因此派生一个CEdit的子类,然后重载OnChar函数。
    由于键码1-26分别对应CtrlA-CtrlZ,因此需要允许编辑控制键,
    同时还要允许数字键和小数点。VC6.0调试通过。void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
      // TODO: Add your message handler code here and/or call default
      if((nChar>0 && nChar<27) || // 允许控制字符如 Ctrl-C、Ctrl-V 等
        ::isdigit(nChar) || nChar == (UINT)'.')
        CEdit::OnChar(nChar, nRepCnt, nFlags);
    }最后在自己的对话框中声明一个自己的编辑框变量,并将它与控件绑定。绑定方法有两
    种:
    1. 通过ClassWizard添加对应的CEdit变量,然后手工将.h头文件中的变量类型由CEdit
    改为CNumEdit即可。VS.net中还可以直接绑定自己定义的派生类CNumEdit,就不需要手
    工去改了。
    2. 直接手工添加CNumEdit变量到对话框,然后在重载对话框的 OnInitDialog函数,加
    入下面语句:
      CMyNumEditA.SubclassDlgItem(IDC_EDIT1,this);
      CMyNumEditB.SubclassDlgItem(IDC_EDIT2,this);
      

  5.   

    1.你查看clistbox的方法就可以很容易的知道呀,好像是setCurSel();
    2.WinExec();
    3.做个对话框也很容易嘛!要不用editbox也行!
      

  6.   

    2.
    三个SDK函数 winexec, shellexecute,createprocess可以使用。WinExec最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 SW_SHOWMAXMIZED方式去加载一个无最大化按钮的程序,就是Neterm,calc等等,就不会出现正常的窗体,但是已经被加到任务列表里了。
    ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的Example就是直接打开 c:\temp\1.txt,而不用加载与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口,来显示Readme or Faq,我猜就是这么作的啦.
    ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED)
    CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的Example:
     STARTUPINFO stinfo
    //启动窗口的信息
     PROCESSINFO procinfo //进程的信息
     CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE,
    NORMAL_PRIORITY_
     CLASS,NULL,NULL, &stinfo,&procinfo) 
      

  7.   

    2
    如果 dos 程序 system("*.exe");
    win32 最好用STARTUPINFO stinfo;
    PROCESS_INFORMATION procinfo;
    CreateProcess(
    NULL,"open.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&stinfo,&procinfo);
      

  8.   

    非常感谢大家的帮助,不过我第一个问题还是没有解决我用m_lst2.SetCurSel(m_lst2.GetCurSel()+1)还是不能把鼠标移到下一项鼠标还是没动。大侠帮忙阿