使用 BS_AUTORADIOBUTTON style创建radio button,WS_GROUP来划分分组。第一个创建的radio就 index为0,第二个为1,第三个为2,依此类推功能:
1,现在给一个radio SetValue(2),那它所在的组就自动地check第三个创建的radio
2,如果目前是第二个被checked,那我调用该组的任意raido 的 GetValue(),返回的应该是1请问上面这两个功能的实现。

解决方案 »

  1.   

    这是class的原型:class CPrsRadio : public CButton
    {
    public:
    CPrsRadio();
    CWnd* Create(StruCreateParameters *pParam);
    virtual ~CPrsRadio(); INT GetValue();
    void SetValue(INT iIndex);
    protected:
    DECLARE_MESSAGE_MAP()
    };
      

  2.   

    没人答复?我解决了,谢谢striking的指导。INT CPrsRadio::GetValue()
    {
    ASSERT(::GetWindowLong(m_hWnd, GWL_STYLE) & WS_GROUP);
    CWnd *p = this;
    INT iIndex=0;
    do 
    {
    if(1==((CButton *)p)->GetCheck())
    return iIndex;
    p = p->GetWindow(GW_HWNDNEXT);
    ++iIndex;
    } while(p!=NULL && !(::GetWindowLong(p->m_hWnd, GWL_STYLE) & WS_GROUP)); return -1;
    }void CPrsRadio::SetValue(INT iIndex)
    {
    ASSERT(::GetWindowLong(m_hWnd, GWL_STYLE) & WS_GROUP);
    CWnd *p = this;
    INT i=0;
    do 
    {
    if(i==iIndex)
    {
    p->SendMessage(BM_CLICK);
    return;
    }
    p = p->GetWindow(GW_HWNDNEXT);
    ++i;
    } while(p!=NULL && !(::GetWindowLong(p->m_hWnd, GWL_STYLE) & WS_GROUP));
    }
      

  3.   

    INT CPrsRadio::GetValue()
    {
    ASSERT(::GetWindowLong(m_hWnd, GWL_STYLE) & WS_GROUP);
    CWnd *p = this;
    INT iIndex=0;
    do 
    {
    if(1==((CButton *)p)->GetCheck())
    return iIndex;
    p = p->GetWindow(GW_HWNDNEXT);
    ++iIndex;
    } while(p!=NULL && !(::GetWindowLong(p->m_hWnd, GWL_STYLE) & WS_GROUP)); return -1;
    }void CPrsRadio::SetValue(INT iIndex)
    {
    ASSERT(::GetWindowLong(m_hWnd, GWL_STYLE) & WS_GROUP);
    CWnd *p = this;
    INT i=0;
    do 
    {
    if(i==iIndex)
    {
    p->SendMessage(BM_CLICK);
    return;
    }
    p = p->GetWindow(GW_HWNDNEXT);
    ++i;
    } while(p!=NULL && !(::GetWindowLong(p->m_hWnd, GWL_STYLE) & WS_GROUP));
    }
      

  4.   

    才区区40分啊,小问题,却烦了我一天,我甚至考虑用static变量实现分组记录……太麻烦了