Rick York Ответов: 1

Проблема с cipaddressctrl


Я пытаюсь использовать CIPAddressCtrl, и у него есть очень странная проблема. Когда я использую его в основном диалоговом окне приложения на основе диалогов, он работает правильно. Когда я использую его во всплывающем диалоговом окне, появляется проблема-он не принимает трехзначные адресные байты.

Кто-нибудь знает, что с этим происходит?

Что я уже пробовал:

Я попытался установить диапазоны полей до 255, и это не имело никакого значения. Я попробовал расширенную версию Hans Dietrich здесь, и она работает правильно, так как это основной диалог приложения. Я добавил кнопку в главный диалог его тестового приложения, которая вызывала бы вторичный диалог, и проблема появилась снова. Вот код диалога на случай, если кто-то захочет его попробовать :
class CCtrlTestDlg : public CDialog
{
public:
	CCtrlTestDlg( CWnd* pParent = NULL ) : CDialog( IDD, pParent ) {}

	enum { IDD = IDD_TEST_DIALOG };

	CIPAddressCtrl		m_Address;

protected:
	virtual void DoDataExchange( CDataExchange* pDX )
	{
		__super::DoDataExchange( pDX );

		DDX_Control( pDX, IDC_TEST_ADDRESS, m_Address );
	}

	virtual BOOL OnInitDialog()
	{
		__super::OnInitDialog();
		return TRUE;  // return TRUE  unless you set the focus to a control
	}

	DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP( CCtrlTestDlg, CDialog )
END_MESSAGE_MAP()
Это использует диалог с ID IDD_TEST_DIALOG и имеет элемент управления IP-адресом с ID IDC_TEST_ADDRESS и кнопку OK, и все. Я добавил кнопку в диалоговое окно приложения и при нажатии она делает это :
void CXIPAddressCtrlTestDlg::OnTestControl()
{
	CCtrlTestDlg dlg( this );
	dlg.DoModal();
}
Диалоговый ресурс-это :
IDD_TEST_DIALOG DIALOGEX 0, 0, 180, 98
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "Control Test"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,32,58,46,22
    PUSHBUTTON      "Cancel",IDCANCEL,100,58,46,22
    LTEXT           "Enter an Address:",IDC_STATIC,20,22,58,14,SS_CENTERIMAGE
    CONTROL         "IPAddress2",IDC_TEST_ADDRESS,"SysIPAddress32",WS_TABSTOP,81,22,74,14
END
и это все, что есть в диалоге тестирования. Этот диалог можно добавить практически в любое приложение MFC, чтобы проверить ситуацию.

Два других вида информация: когда я удалить МФЦ подкласса управления происходит то же самое. Кроме того, когда я ввожу третью цифру, элемент управления получает командное сообщение EN_MAXTEXT. Вот в чем проблема - я не могу ввести адрес с любым значением выше 99.

Rick York

Немного больше информации - проблема не в подклассах MFC, потому что базовый элемент управления демонстрирует то же самое поведение, когда нет объявленного элемента управления MFC.

1 Ответов

Рейтинг:
2

Richard MacCutchan

У меня нет MFC, но тестирование вашего диалога в виде всплывающего окна работает нормально. Вам нужно предоставить некоторые дополнительные сведения о том, что именно происходит при запуске вашего приложения. А что такое CXIPAddressCtrl- Я не могу найти его ссылку?


Rick York

Это усовершенствованная версия Ганса Дитриха. Я использовал его, потому что у него есть приложение для тестирования, доступное и для него. Это можно заменить, удалив X из имени и изменив этот метод, чтобы он выглядел следующим образом:

	virtual BOOL OnInitDialog()
	{
		__super::OnInitDialog();
		return TRUE;  // return TRUE  unless you set the focus to a control
	}