レバーコントロールの状態を保存したい – プログラミング – Home

レバーコントロールの状態を保存したい
 
通知
すべてクリア

[解決済] レバーコントロールの状態を保存したい


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

VC++6 & 非MFC で作成しています。
IE4 とかで使用されているレバーコントロールについてなのですが、
作成方法などはわかったのですが、終了時に状態を保存して、再度開く時に
前回の状態に戻す方法がわかりません。
どなたか御存知の方がいましたら教えてください。

よろしくおねがいします。


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>IE4 とかで使用されているレバーコントロールについてなのですが、
おそらくスライダーコントロール(トラックバー)の事だと思いますので

http://www.kumei.ne.jp/c_lang/sdk2/sdk_190.htm

ここを参照してみてください。

>作成方法などはわかったのですが、終了時に状態を保存して、再度開く時に
>前回の状態に戻す方法がわかりません。

終了時にTBM_GETPOSで取得して、

設定ファイル or レジストリ or どこかのファイル に保存して

起動時にTBM_SETPOSで戻してあげれば良いのでは、ないでしょうか?


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

早速の御回答ありがとうございます

> おそらくスライダーコントロール(トラックバー)の事だと思いますので

ちょっとちがいますね。こっちのうほうです。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_182.htm

作成方法はこちらのページを参考にさせていただいたのですが、
保存、再現方法が載っていないもので...
MSDN も見てみたのですが、いまいち分かりませんでした。

よろしくおねがいします。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

どうでも良いことですが・・・
これってレバーではなくて、リバーって呼びませんでしたっけ?

終了時
RB_GETBARINFO
RB_GETBANDINFO
RB_GETBANDCOUNT
RB_GET.....

起動時
RB_INSERTBAND
RB_SETBARINFO
RB_SETBANDINFO
RB_SET.....

試してませんが

この辺りのメッセージで出来そうです。


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

色々試行錯誤した挙句うまくいきました。

[終了時]
char iniSection[50];
REBARBANDINFO bandInfo;
ZeroMemory(&bandInfo, sizeof(bandInfo));
bandInfo.cbSize = sizeof(bandInfo);
bandInfo.fMask = RBBIM_ID | RBBIM_SIZE | RBBIM_STYLE;
int barcnt = SendMessage(wprop->hRebar, RB_GETBANDCOUNT, 0, 0);
for(int i = 0; i < barcnt; i++){
sprintf(iniSection, INISECTION_BAR, i);
SendMessage(hRebar, RB_GETBANDINFO, (WPARAM)(UINT)i
, (LPARAM)(LPREBARBANDINFO)&bandInfo);

// wID, cx, fStyle を ini ファイルに保存する
MyWriteProfileInt(iniSection, ID, bandInfo.wID);
MyWriteProfileInt(iniSection, CX, bandInfo.cx);
MyWriteProfileInt(iniSection, FL_BREAK, (bandInfo.fStyle & RBBS_BREAK) ?
1 : 0);
MyWriteProfileInt(iniSection, FL_HIDDEN, (bandInfo.fStyle &
RBBS_HIDDEN) ? 1 : 0);
}

[起動時]
int i;
char iniSection[50];
// CreateToolbarx はバンド内のツールバーを作成する関数
HWND (*hwndproc[])(HWND) = {CreateToolbar1, CreateToolbar2};

REBARBANDINFO rbBand;
ZeroMemory(&rbBand, sizeof(REBARBANDINFO));
rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask = RBBIM_ID | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE |
RBBIM_SIZE;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = 25;
for(i = 0; i < NUM_TOOL; i++){
sprintf(iniSection, INISECTION_BAR, i);
rbBand.wID = SZC_GetProfileInt(iniSection, ID, 9999);
rbBand.cx = SZC_GetProfileInt(iniSection, CX, 100);
rbBand.fStyle = RBBS_CHILDEDGE;
if(SZC_GetProfileInt(iniSection, FL_BREAK, 0)) rbBand.fStyle |=
RBBS_BREAK;
if(SZC_GetProfileInt(iniSection, FL_HIDDEN, 0)) rbBand.fStyle |=
RBBS_HIDDEN;
rbBand.hwndChild = hwndproc[rbBand.wID](hRebar);
SendMessage(wprop->hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
}

のようにしたらうまくいきました。
バンドを wID 順で描画しようとしていたので、難しく考えていましたが、インデックス順に描
画していけば案外簡単に実装することができました。
実際には、ini ファイルに値がないときの処理や不正な値が登録されていたときの処理が必要
ですが、ひとまず解決です。
どうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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