RT,我已经知道这个控件的类名了,怎么才能创建出这个控件呢?CreateWindow()不行,只能创建特定的一部分控件,我想创建所有的控件,有什么好的方法么?

解决方案 »

  1.   

    比如按钮控件用create就可以创建,其他的控件也是同理的
      

  2.   

    用new调用CButton构造函数生成一个实例:CButton *pButton = new CButton;BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
     lpszCaption是按钮上显示的文本;
      dwStyle指定按钮风格,可以是按钮风格与窗口风格的组合,取值有:
       窗口风格:
        WS_CHILD  子窗口,必须有
        WS_VISIBLE  窗口可见,一般都有
        WS_DISABLED  禁用窗口,创建初始状态为灰色不可用的按钮时使用
        WS_TABSTOP  可用Tab键选择
        WS_GROUP  成组,用于成组的单选按钮中的第一个按钮
       按钮风格:
        BS_PUSHBUTTON 下压式按钮,也即普通按钮
        BS_AUTORADIOBUTTON 含自动选中状态的单选按钮
        BS_RADIOBUTTON 单选按钮,不常用
        BS_AUTOCHECKBOX 含自动选中状态的复选按钮
        BS_CHECKBOX 复选按钮,不常用
        BS_AUTO3STATE 含自动选中状态的三态复选按钮
        BS_3STATE 三态复选按钮,不常用
       以上风格指定了创建的按钮类型,不能同时使用,但必须有其一。
      BS_BITMAP 按钮上将显示位图
      BS_DEFPUSHBUTTON 设置为默认按钮,只用于下压式按钮,一个对话框中只能指定一个默认按钮
      rect指定按钮的大小和位置;
      pParentWnd指示拥有按钮的父窗口,不能为NULL;
      nID指定与按钮关联的ID号,用上一步创建的ID号。pButton->Create("000","WS_VISIBLE",CRect(10,10,90,30),this,3000);建立一个宽为80,高为20的按钮.
      

  3.   

    消息映射的处理Q       我在用MFC写一个应用程序,需要在对话框中动态增加按钮。我该怎么实现消息句柄?A       标准的menu或者button消息映射句柄类似于下面这种形式:       ON_COMMAND(ID_MYCOMMAND, OnMyCommand)       但是如果你是动态创建的button/menu项,你可能在编译时无法知道命令ID(COMMAND ID).,它可能被存储在一个数据成员里,类似于CSqueegie::m_nMeMyMineID       怎么办呢?       很简单:用ON_COMMAND_EX_ RANGE表示不受限制的范围。       ON_COMMAND_EX_RANGE(0,
                                                                 0xFFFF, OnAnyCommand) 
           现在MFC发送0-0xFFFF内的任何命令(这指的是所有命令你都可以处理),你的程序可以在运行时检测指定的ID。        BOOL CSqueegie::OnAnyCommand(UINT nID) 
             {
                    if (nID == m_nMeMyMineID) {
                            // do the command
                            return TRUE; // handled
                     }
                     return FALSE;
             }        对于ON_COMMAND,你的控制函数有一个参数和void返回。但是对于ON_COMMAND_ EX_RANGE,如果你取得命令,你的控制函数得到命令ID并且必须返回TRUE,否则的话返回FALSE。如果你返回FALSE,MFC将继续发送命令以便其他的对象能取得。
      

  4.   

    用动态创建控件时的控件ID,手动添加消息映射就可以了,比如在视图中动态创建一个CListCtrl控件,在CMainFrame中添加消息映射: m_listRecQueryRes.Create(WS_VISIBLE|WS_CHILD|LVS_REPORT, CRect(0,0,0,0), this, 50); m_listRecQueryRes.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//选中整行记录
      

  5.   

    CListCtrl控件的ID就是50 CListCtrl m_listRecQueryRes;
      

  6.   

    ON_NOTIFY(NM_RCLICK,50, &CMainFrame::OnNMRClickRecQueryList)//手动添加的消息映射
      

  7.   

    具我所知,CreateWindowEx应该是可以创建所有控件的。
      

  8.   

    你们说的都是创建特定的按钮,现在是我在创建之前才知道控件的类名,比如说 SysListView32  是ListCtrl 的类名,这些怎么创建啊?
      

  9.   

    用CreateWindowEx应该是可以的。
      

  10.   

    RegisterClassEx 
    然后CreateWindow
      

  11.   

    CreateWindow或者CreateWindowEx应该都可以
      

  12.   

    按钮控件用create就可以创建,其他的控件也是同理的
      

  13.   

    CButton *pButton = new CButton; BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );