SOS

我是新手。我的问题有以下:1、关于控件的问题:
   我目前使用过的操作控件的方法有以下几种。一、定义控件变量,二、定义值变量(好象这个方法只能应用在能够取值的控件中,比如文本框)。三、使用GetDlgItem( Control_ID )。请问:这三种方法,各有什么优缺点。高手指点,要养成什么样的使用习惯。2、主窗体上的主菜单,由灰变可用的时候,为什么要等到鼠标移动上,字体才由灰变可用。(此问题附代码,代码如下)前提:在菜单资源中把第二个菜单属性GRAYED选中。
BOOL CMsgLogDlg::OnInitDialog()
{
       ……
       m_pTopMenu = AfxGetMainWnd()->GetMenu(); //得到菜单
       ……
}void CMsgLogDlg::OnMenuNetSet() 
{
     nCreateSocket = m_pSocket->Create( m_pUdpInfo.m_nLocalPort, SOCK_DGRAM );
     if( nCreateSocket == SOCKET_ERROR )
    {
DisplayMsg( "Create UDP Socket Error" );
……
m_pTopMenu->EnableMenuItem( 1, MF_DISABLED|MF_BYPOSITION|MF_GRAYED );
bCreateUDP = FALSE;
   }
   else
   {
DisplayMsg( "Create UDP Socket Succeed" );
……
m_pTopMenu->EnableMenuItem( 1, MF_ENABLED|MF_BYPOSITION );   //---->这里使菜单可用
        ……
bCreateUDP = TRUE;
    }
}
调式过程中,已经跟踪到了我强调的那行(使菜单可用的行),但界面上,第二个菜单仍然为灰色,这个使用把鼠标移动到该菜单上,菜单变为可用。感觉好象是窗体刷新的问题。请赐教。