// FiveDlg.cpp : implementation file
//#include "stdafx.h"
#include "Five.h"
#include "FiveDlg.h"
#include "ServerDlg.h"
#include "ClientDlg.h"
#include "NameDlg.h"
#include "StatDlg.h"
#include "AboutDlg.h"
#include "Table.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CFiveDlg dialogCFiveDlg::CFiveDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFiveDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFiveDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CFiveDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFiveDlg)
DDX_Control(pDX, IDC_EDT_CHAT, m_ChatList);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CFiveDlg, CDialog)
//{{AFX_MSG_MAP(CFiveDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_MENU_1P, OnMenu1p)
ON_BN_CLICKED(IDC_BTN_BACK, OnBtnBack)
ON_COMMAND(ID_MENU_PC, OnMenuPc)
ON_COMMAND(ID_MENU_SERVER, OnMenuServer)
ON_COMMAND(ID_MENU_CLIENT, OnMenuClient)
ON_WM_SETCURSOR()
ON_BN_CLICKED(IDC_BTN_HQ, OnBtnHq)
ON_BN_CLICKED(IDC_BTN_LOST, OnBtnLost)
ON_COMMAND(ID_MENU_LEAVE, OnMenuLeave)
ON_COMMAND(ID_MENU_PLAYAGAIN, OnMenuPlayagain)
ON_COMMAND(ID_MENU_NAME, OnMenuName)
ON_COMMAND(ID_MENU_STAT, OnMenuStat)
ON_COMMAND(ID_MENU_EXIT, OnMenuExit)
ON_COMMAND(ID_MENU_ABOUT, OnMenuAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CFiveDlg message handlersBOOL CFiveDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
    m_pDlg = NULL;
    CRect rect(0, 0, 200, 200);
    m_Table.CreateEx( WS_EX_CLIENTEDGE, _T("ChessTable"), NULL, WS_VISIBLE | WS_BORDER | WS_CHILD,
        CRect( 0, 0, 401, 478 ), this, IDC_TABLE );
    // 设置双方姓名
    SetDlgItemText( IDC_ST_ME, m_Table.m_strMe );
    SetDlgItemText( IDC_ST_ENEMY, _T("无玩家加入") );
    // 禁用“再玩”和“离开”
    CMenu *pMenu = GetMenu();
    pMenu->EnableMenuItem( ID_MENU_PLAYAGAIN, MF_DISABLED | MF_GRAYED | MF_BYCOMMAND );
    pMenu->EnableMenuItem( ID_MENU_LEAVE, MF_DISABLED | MF_GRAYED | MF_BYCOMMAND );
    // 捕获聊天输入框句柄,供处理回车使用
    m_hChat = FindWindowEx( GetDlgItem( IDC_CMB_CHAT )->GetSafeHwnd(), NULL, _T("Edit"), NULL );
    ::SendMessage( m_hChat, EM_LIMITTEXT, (WPARAM)128, 0);
    m_Table.Clear( TRUE );
    GetDlgItem( IDC_CMB_CHAT )->EnableWindow( FALSE );
    GetDlgItem( IDC_BTN_BACK )->EnableWindow( FALSE );
    GetDlgItem( IDC_BTN_HQ )->EnableWindow( FALSE );
    GetDlgItem( IDC_BTN_LOST )->EnableWindow( FALSE );  
以上是错误的代码,我双击错误的时候指针停在    m_hChat = FindWindowEx( GetDlgItem( IDC_CMB_CHAT )->GetSafeHwnd(), NULL, _T("Edit"), NULL );
的前边

解决方案 »

  1.   

    没什么问题啊
    改成这样看看   
     m_hChat = FindWindowEx((GetDlgItem( IDC_CMB_CHAT )->m_hWnd),NULL, _T("Edit"), NULL );
      

  2.   

    m_hChat 难道是HWND类型的?FindWindEx返回的是CWnd* 类型的
      

  3.   

    楼主最后是怎么解决的呢?能否告知在下,发我邮箱:[email protected],多谢!
      

  4.   

    m_hChat   =  (HWND ) FindWindowEx((GetDlgItem(   IDC_CMB_CHAT   )-> m_hWnd),NULL,   _T( "Edit "),   NULL   ); 
    这样改就OK了