Viewクラスを作り中に表示させる方法はわかったのですが、
分割ウィンドウ内にListCtrlなどを表示させるにはどうすればいいのでしょうか?
コンパイルはできるのですが、afxcmn.inl Line:266の
ASSERT(::IsWindow(m_hWnd));でエラーが出てしまいます。
何がいけないのか教えてください。お願いします。
//.h
CSplitterWnd m_wndSplitter;
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
//.cpp
BOOL CWnd::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic( this, 1, 2, WS_CHILD | WS_VISIBLE )) return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CListCtrlA),CSize(200,300),pContext)) return FALSE;
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListCtrlB) ,CSize( 200,300),pContext)) return FALSE;
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
当方のVS2003ではクライアントエリアが透けてしまうのはスプリッターウィンドウのWS_VISIBLEプロパティが正しく設定されていない場合でした
開発アプリをデバッグ起動して
SPY++で クライアントエリアを指示してもウィンドウが見つかりませんか?
OnCreateClientがCWndクラスのメンバーとして記述されているようですが CMainFrameクラスのメンバーではないのでしょうか
このルーチンを通っているのでしょうか ・・・
BOOLが戻り値なのにクライアントエリアの生成が成功した際に値を返していないようですがこのあたりは大丈夫なのでしょうか・・・
この回答への補足
ありがとうございます。
CWndはMainFrameじゃないウィンドウで名前をつけました。
ややこしくてすいません。CWndはCDockablePaneから派生させたクラスです。CWndPaneにしました。
BOOLもreturnを書いていませんでしたがなぜかコンパイルできていたので忘れていました。return 0; を追加しました。
SPY++で選択されたオブジェクトを見るとCWndPane自体は、MainFrameクラスになっていて、その中はControlBarになっています。
オーバーライドで呼び出されると思っていたOnCreateClientが
呼び出されていませんでした。これはどうやって呼び出せばいいのでしょうか?
BOOL CWndPane::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic( this, 1, 2, WS_CHILD | WS_VISIBLE ) ) return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTreeTESTA),CSize(200,300),pContext)) return FALSE;
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListTESTB) ,CSize( 200,300),pContext)) return FALSE;
return 0;
}
class CTreeTESTA : public CTreeView
{
public:
CTreeTESTA(){}
virtual ~CTreeTESTA(){}
};
class CListTESTB : public CListView
{
public:
CListTESTB(){}
virtual ~CListTESTB(){}
};
No.2
- 回答日時:
> afxcmn.inl Line:266
だと TreeCtrlのようですので CTreeViewからの派生クラスで ClistCtrlA/Bを構築してみましょう
この回答への補足
ありがとうございます。
CTreeViewとCListViewを作りコンパイル後起動できました。
しかし、分割もされず、裏側が透けたウィンドウが出来上がっただけでした。どうすればコントロールが表示されるんでしょうか?
CListViewも同じように作りました。
BOOL CWnd::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
if(!m_wndSplitter.CreateStatic( this, 1, 2, WS_CHILD | WS_VISIBLE ) ) return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTreeTESTA),CSize(200,300),pContext)) return FALSE;
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListTESTB) ,CSize( 200,300),pContext)) return FALSE;
}
class CTreeTESTA : public CTreeView
{
public:
CTreeTESTA(){}
virtual ~CTreeTESTA(){}
};
No.1
- 回答日時:
CListCtrlAおよびCListCtrlBを CListView(またはCView)の派生クラスから生成する必要がありますがこの辺りは確認なさったのでしょうか?
CListCtrlはコントロールとしてのListViewのMFCでのラッパーですのでCViewが必要とするメンバー関数が無いためにビューとして構築できないのが原因のように思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 13:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
【ASP.NET】 独自で作成したク...
-
既定のコンストラクタがない?
-
クラスのアドレスを引数として...
-
ボタンのオーナードローについて
-
フォーム間でのオブジェクト又...
-
継承したクラスを、継承元のク...
-
OnInitDialog()の関数の組み込み方
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
MFC モードレスDlgについて
-
このコンパイルエラーの意味に...
-
CreateObjectとはどういう意味...
-
c# ネットワークプログラム
-
C#でのUNZIP32.DLLの利用方法が...
-
オブジェクト型の変数が定義さ...
-
VB.NETで、DLLを頂いたんですが...
-
UMLでの「オブジェクト」と「イ...
-
C#でのコンパイル時のエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
MFCアプリのコマンドラインでパ...
-
【ASP.NET】 独自で作成したク...
-
C#で通常のbuttonコントロール...
-
ダイアログクラスのコントロー...
-
派生クラスから基本クラスprote...
おすすめ情報