[Win32API]レバーコントロール

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
オカピーα
記事: 120
登録日時: 13年前

[Win32API]レバーコントロール

#1

投稿記事 by オカピーα » 12年前

お久しぶりです、懲りずにC言語のみでごりごり開発をしているオカピーです。
先日、開発中のアプリケーションにレバーコントロールをとりれたのですが、問題が。
レバーコントロール導入の目的はWordやExcelのような移動可能なツールバー実装にありました。
それで、色々と参考にしながらツールバーの導入には成功し、めでたく移動も
出来るようになったのですが、なんだかビジュアルが美しくありません。
というのも、右側の余白が冗長に長くなってしまい、Wordのようなスッキリ感が生まれないのです。
動作には直接関係が無いので気にしなければいいといえばいいのですが、
やはりキッチリとやってみたいです。
右の余白を消して、Wordのようなツールバーにするにはどうしたらいいのでしょうか。
どなたか教えてください。お願いします。
添付ファイル
title.jpg
理想の形 (Wordより)
title.jpg (13.87 KiB) 閲覧数: 2974 回
image.jpg
現在の形 (右に冗長に長い余白があり美しくない)
image.jpg (4.78 KiB) 閲覧数: 2974 回
C,C++,C#,これらを極めることを「3C政策」と言う

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

Re: [Win32API]レバーコントロール

#2

投稿記事 by taketoshi » 12年前

何かないかとコードを漁っていたら同様事例を施していたのでアップします。
私も昔つまずいた記憶があります。

レバーコントロール上に移動不可能な検索ボックスを埋め込んでいます。
これをEDITからSTATICウインドウに変えれば、レバーコントロールの余白を有効利用できます。

そもそも、ツールバーの境目をはっきりさせて浮き上がらせたいっていう処理ならば解らないです。
ツールバー作成時のウインドウスタイルの指定とかでいけるんじゃないでしょうか。

以下がレバーコントロール上にエディットボックスを埋め込んでいる辺りのコードです。
元コードはzipに添付しておきます。ご参考にどうぞ。

コード:

///////////////////レバーコントロール上のエディット/////////////////////
HWND CreateEdit(HWND hRebar)
{
	HWND hEdit2;
	REBARBANDINFO rBand;

//ここをSTATICに変えたうえで以下の	rBand.lpText = "検索文字列"; を消すと境界線ができます
	hEdit2 = CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD,
		0,0,0,0,hRebar,(HMENU)ID_EDIT2,hInstance,NULL);

		memset(&rBand,0,sizeof(REBARBANDINFO));

		rBand.cbSize = sizeof(REBARBANDINFO);
		rBand.fMask  = RBBIM_TEXT |
					RBBIM_BACKGROUND |
					RBBIM_STYLE |
					RBBIM_CHILDSIZE |
					RBBIM_SIZE |
					RBBIM_CHILD |
					RBBIM_ID;

		rBand.fStyle = RBBS_CHILDEDGE |
					RBBS_FIXEDSIZE  |
					RBBS_NOGRIPPER;

		rBand.wID		  = ID_EDIT2;
		rBand.hwndChild  = hEdit2;
		rBand.cxMinChild = 300;
		rBand.cyMinChild = 20;
		rBand.cx		  = 250;
		rBand.lpText = "検索文字列";

		SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rBand);

		memset(&rBand,0,sizeof(REBARBANDINFO));
		rBand.fMask  = RBBIM_TEXT |
					RBBIM_STYLE ;

		rBand.fStyle = RBBS_CHILDEDGE |	RBBS_GRIPPERALWAYS;
		SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rBand);
	return hEdit2;
}
添付ファイル
MDI.zip
(26.36 KiB) ダウンロード数: 115 回
test.png
test.png (9.96 KiB) 閲覧数: 2949 回

オカピーα
記事: 120
登録日時: 13年前

Re: [Win32API]レバーコントロール

#3

投稿記事 by オカピーα » 12年前

返信ありがとうございます!
しかし・・・せっかくしてくださったのですがやりたいことと少々違います・・・><
余白を消すといいますか、「レバーコントロールのみを浮き上がらせる」方法を模索しているのです。
taketosiさんありがとうございました!
引き続き募集しております!

[追記]
MDI.zipなのですが、リソースファイルとヘッダファイルも添付してもらってもよろしいですか?
実験しようにもしにくいので・・・ お願いします
C,C++,C#,これらを極めることを「3C政策」と言う

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

Re: [Win32API]レバーコントロール

#4

投稿記事 by taketoshi » 12年前

そっかー、お力添えず残念です

プロジェクトを添付しておきますね、汚いですが参考にしてください。
私もやり方が気になってきました。少し調べてみよう。
添付ファイル
MDI.zip
(2.84 MiB) ダウンロード数: 112 回

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

Re: [Win32API]レバーコントロール

#5

投稿記事 by taketoshi » 12年前

http://rarara.cafe.coocan.jp/cgi-bin/ln ... 070001.txt

過去に同じ議論をされてる方がいらっしゃいました。
SPY++で調べたところワードのメニューのクラス名はMsoCommandBarでした。

自前でウインドウクラスを生成している?感じでした。
私は自前でウインドウクラスを生成した経験がないので、もう少し調べないたどり着けそうにないです。

閉鎖

“C言語何でも質問掲示板” へ戻る