如果自己定义  CMyButton public CButton
我要在 WM_LBUTTONDOWN里面 对 Button TextOut(...)
但我怎么才能得到我要操作的Button的句柄?
是不是隐藏的传过来了 ?

解决方案 »

  1.   

    句柄当然用this得到
    是不是想输出不同的文字呀
    那就给CMyButton 加一个变量m_strOutString;
    在加个函数SetOutString(CString str)
    {
      m_strOutString=str;
    }
    textout(...,....,m_strOutString);
    //一个变量不行可以多来几个
    SetOutString(CString str1,CString str1。。)
      

  2.   

    中文和英文不能用字符串做单位,一半英文一半中文你说是什么字符串呢?
    它只能以字符做单位
    char aa[]="aaa你好";
    char *p=aa;
    int i=strlen(aa);//这里一定等于7
    for(int n=0;n<i;n++)
    {
    if(*p>0x80)
     AfxMessageBox("这是半个汉字");
    else
     AfxMessageBox("这不是汉字");
    }
      

  3.   

    得不到阿 
    怎么在WM_LBUTTONDOWN得到 当前我在按的按钮的句柄?
    this->hWnd? 不行
      

  4.   

    自己新建一个CButton类的派生类CMyButton
    在CMyButton中重载函数DrawItem,在里面对CButton进行绘制,包括TextOut都可以。
      

  5.   

    不明白你要做什么,如果想在按钮上写字也用不着这么麻烦呀
    CClientDC dc(this);
    dc.TextOut(str1)不就成了
    为什么要得到聚丙呢?
    你不是想在对话框类里面处理把
    应该在你重载的CMyButton类里面才能用this的道句柄,对话框里this是对话框的指针
      

  6.   

    其实也能得到
    m_butMybut_ctl.GetSafeHandle()就是
      

  7.   

    size_t _mbclen( const unsigned char *c );此函数能判断某字符1字节还是2字节
      

  8.   

    自画按钮时,覆盖DrawItem虚函数(用Classwizard)
    public:
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    //然后调用pDC->TextOut(.....)
    }
      

  9.   

    在Classwiarz中直接定义(yourbuttonid)为CMyButton的变量;可以得到操作的Button的句柄.或子类化(yourbuttonid)为CMYButton.
      

  10.   

    CMyButton *pOutput=(CMyButton *)GetDlgItem(IDC_...);
      

  11.   

    不要在WM_LBUTTONDOWN时重绘控件,应该在DrawItem里判断BOOL bPressed = lpDrawItemStruct->state & ODS_SELECTED;
    //bPressed=TRUE时按钮被按下