CListViewのヘッダ座標移動 – プログラミング – Home

CListViewのヘッダ座標移動
 
通知
すべてクリア

CListViewのヘッダ座標移動


taka
 taka
(@taka)
ゲスト
結合: 23年前
投稿: 117
Topic starter  

お世話になります。

早速質問させて頂きます。

分割ウィンドウを作成し、その内の1つにCListViewを貼り付けています。
そのViewのトップにCDialogリソースを貼り付けたいのですが、
貼り付けるとCListViewのヘッダと重なってしまいます。
CListViewのヘッダ座標を変更することはできますか?

開発環境はXP、VC6.0です。
ご存知の方、宜しくお願いします。


引用解決済
トピックタグ
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

こんなイメージ?

+--------------+
| ダイアログ |
+--------------+
| |
| リストビュー |
| |
+--------------+

だとしたら、CFormViewにして、ダイアログコントロールと
[List Control]をまとめて貼っちゃった方が簡単だし、
分かりやすいかも。


返信引用
taka
 taka
(@taka)
ゲスト
結合: 23年前
投稿: 117
Topic starter  

bunさん
早速の御返答有難う御座います。

イメージはその通りです。

> だとしたら、CFormViewにして、ダイアログコントロールと
> [List Control]をまとめて貼っちゃった方が簡単だし、
> 分かりやすいかも。

ですが、既にCListViewを貼り付けてしまっており、
ガチガチにコーディングしてしまったので、出来れば
CListViewの表示位置を下にずらしてリソースを貼り付けたいのです。
なにか、良い方法はないでしょうか。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> ですが、既にCListViewを貼り付けてしまっており、
> ガチガチにコーディングしてしまったので、出来れば
> CListViewの表示位置を下にずらしてリソースを貼り付けたいのです。
> なにか、良い方法はないでしょうか。

CListViewの場合って結局CListCtrlを取り出して処理をしていたと思うので
CFormViewにしてそっちに移植でもそこまで大変ではないのではと思いますけれど。

どうしても今のCListViewも生かしたいなら、CSplitterWndを使って上下分割するくらい
しか考え付かないですね。
これだとCListViewのコードは殆どそのまま使えるのではないかなぁ。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

たぶん、CSplitterWndの子ウィンドウになってるだけだから、
MoveWindow() とか SetWindowPos() じゃ駄目?


返信引用
taka
 taka
(@taka)
ゲスト
結合: 23年前
投稿: 117
Topic starter  

PATIOさん、bunさん
御返答有難う御座います。

> CListViewの場合って結局CListCtrlを取り出して処理をしていたと思うので
> CFormViewにしてそっちに移植でもそこまで大変ではないのではと思いますけれど。

> どうしても今のCListViewも生かしたいなら、CSplitterWndを使って上下分割するくら
> い
> しか考え付かないですね。
> これだとCListViewのコードは殆どそのまま使えるのではないかなぁ。

確かにCListCtrlを取り出しているのでそれほど大変ではないのかも知れません。
ただ、ここまで調べたのだから妥協したくないという気持ちもあるのです。

> たぶん、CSplitterWndの子ウィンドウになってるだけだから、
> MoveWindow() とか SetWindowPos() じゃ駄目?
両方とも試してみたのですが出来ませんでした。

もう少し調べてみます。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

もう一段CSplitterWndを入れてみるのは?


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

たぶん、タイミングが悪いです。
CMainFrame::OnCreateClient()
の中から、MoveWindow() とか SetWindowPos()してますよね?

場所を変えて、
CxxxView::OnInitialUpdate()
とかから、やってみてください。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> なにか、良い方法はないでしょうか。
既出の方法以外だと、
・分割ウィンドウの分割の仕方次第では 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);
}


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

あうあう。

既に使っていたのですね。
現状でどのようなわけ方になっているかがわかりませんけれど、
既に縦に二つになっているなら三つに分けるとか、
もしくは、もう一段スプリッターウインドウを入れるとか
なりますかねぇ。


返信引用
taka
 taka
(@taka)
ゲスト
結合: 23年前
投稿: 117
Topic starter  

ちょっと昨日から用事があって全然サイトを確認できませんでした。

maruさん、bunさん、gakさん、PATIOさん
沢山の御返答有難う御座います。

早速、今から皆さんから教えて頂いた方法で試してみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました