お世話になります。
早速質問させて頂きます。
分割ウィンドウを作成し、その内の1つにCListViewを貼り付けています。
そのViewのトップにCDialogリソースを貼り付けたいのですが、
貼り付けるとCListViewのヘッダと重なってしまいます。
CListViewのヘッダ座標を変更することはできますか?
開発環境はXP、VC6.0です。
ご存知の方、宜しくお願いします。
こんなイメージ?
+--------------+
| ダイアログ |
+--------------+
| |
| リストビュー |
| |
+--------------+
だとしたら、CFormViewにして、ダイアログコントロールと
[List Control]をまとめて貼っちゃった方が簡単だし、
分かりやすいかも。
bunさん
早速の御返答有難う御座います。
イメージはその通りです。
> だとしたら、CFormViewにして、ダイアログコントロールと
> [List Control]をまとめて貼っちゃった方が簡単だし、
> 分かりやすいかも。
ですが、既にCListViewを貼り付けてしまっており、
ガチガチにコーディングしてしまったので、出来れば
CListViewの表示位置を下にずらしてリソースを貼り付けたいのです。
なにか、良い方法はないでしょうか。
> ですが、既にCListViewを貼り付けてしまっており、
> ガチガチにコーディングしてしまったので、出来れば
> CListViewの表示位置を下にずらしてリソースを貼り付けたいのです。
> なにか、良い方法はないでしょうか。
CListViewの場合って結局CListCtrlを取り出して処理をしていたと思うので
CFormViewにしてそっちに移植でもそこまで大変ではないのではと思いますけれど。
どうしても今のCListViewも生かしたいなら、CSplitterWndを使って上下分割するくらい
しか考え付かないですね。
これだとCListViewのコードは殆どそのまま使えるのではないかなぁ。
たぶん、CSplitterWndの子ウィンドウになってるだけだから、
MoveWindow() とか SetWindowPos() じゃ駄目?
PATIOさん、bunさん
御返答有難う御座います。
> CListViewの場合って結局CListCtrlを取り出して処理をしていたと思うので
> CFormViewにしてそっちに移植でもそこまで大変ではないのではと思いますけれど。
> どうしても今のCListViewも生かしたいなら、CSplitterWndを使って上下分割するくら
> い
> しか考え付かないですね。
> これだとCListViewのコードは殆どそのまま使えるのではないかなぁ。
確かにCListCtrlを取り出しているのでそれほど大変ではないのかも知れません。
ただ、ここまで調べたのだから妥協したくないという気持ちもあるのです。
> たぶん、CSplitterWndの子ウィンドウになってるだけだから、
> MoveWindow() とか SetWindowPos() じゃ駄目?
両方とも試してみたのですが出来ませんでした。
もう少し調べてみます。
もう一段CSplitterWndを入れてみるのは?
たぶん、タイミングが悪いです。
CMainFrame::OnCreateClient()
の中から、MoveWindow() とか SetWindowPos()してますよね?
場所を変えて、
CxxxView::OnInitialUpdate()
とかから、やってみてください。
> なにか、良い方法はないでしょうか。
既出の方法以外だと、
・分割ウィンドウの分割の仕方次第では CDialogBar で簡単にできるかも
・直球でいくなら、CSplitterWnd::RecalcLayout() を override して自力で位置調整
class spliter : public CSplitterWnd {
CDialogXXX dialog_;
};
int spliter::OnCreate(CREATESTRUCT* cs) {
CSplitterWnd::OnCreate(cs);
dialog_.Create(IDD_DIALOG1, this); // spliter を親にしとく
return 0;
}
void spliter::RecalcLayout() {
CSplitterWnd::RecalcLayout(); // default 処理
CRect rect;
dialog_.GetWindowRect(rect);
const int height = rect.Height(); // ダイアログの高さ取得
CWnd* view = GetPane(0, 0); // CListView を登録したペイン
view->GetWindowRect(rect);
ScreenToClient(rect);
dialog_.SetWindowPos(&wndTop, rect.left, rect.top, rect.Width(), height,
SWP_NOACTIVATE);
rect.top += height;
view->SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(),
SWP_NOZORDER | SWP_NOACTIVATE);
}
あうあう。
既に使っていたのですね。
現状でどのようなわけ方になっているかがわかりませんけれど、
既に縦に二つになっているなら三つに分けるとか、
もしくは、もう一段スプリッターウインドウを入れるとか
なりますかねぇ。
ちょっと昨日から用事があって全然サイトを確認できませんでした。
maruさん、bunさん、gakさん、PATIOさん
沢山の御返答有難う御座います。
早速、今から皆さんから教えて頂いた方法で試してみます。