0


0

GetDlgItem()はvc ++ 2010でnullを返します

最近、Visual Studio 6.0プロジェクトをVisual Studio 2010に変換しましたが、特定のアイテムでGetDlgItemを呼び出すたびに問題が発生しています。 次のコードは失敗しています。

CWnd *pWnd = (CWnd*) GetDlgItem(IDC_BATCH);
pWnd->GetWindowText(szBatchNum);

上記のコードを呼び出しているフォームのリソースファイルにこのコードが表示されます。

IDD_CC_PROCESS DIALOGEX 0, 0, 657, 410
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
CONTROL         "",IDC_BATCH,"{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}",0x0,85,18,89,16
END

GetDlgItem()の呼び出し後、pWndはNULLです。 これは、プロジェクトの6.0バージョンでは問題ではありませんでした。 IDC_BATCHは、このフォームで有効なリソースのようです。 IDC_BATCHは、「Microsoft Forms 2.0ラベル」を指します。 これは、プロジェクトを6.0から2010に変換するときに遭遇した多くの問題の1つであるようです。

2 Answer


1


この問題に関する特別な知識はありませんが、VS2010に同梱されているMFCのバージョン用にGUID /コントロールが更新されているかどうかを確認します。 MFCバージョンがGUIDによってコントロールタイプを認識しない場合、MFCバージョンのCWndラッパーオブジェクトを正しく作成できない場合があります。 VS2010のGUIDを更新する必要がある場合や、MFCラッパー呼び出しではなく、ネイティブWin32呼び出しを使用してアクセスする場合があります。

お役に立てば幸いです。


0


`GetDlgItem`の呼び出し元であるCWndの子項目を列挙してみて、ハンドルに子があるかどうかを確認してください。 また、 `GetLastError`によって返される値を確認する必要があります。これは、実際のエラーとそのエラーが何であるか、またはコントロールに実際に子がない場合(resファイルでエラーになる場合がある)または親コントロールも存在します