ツールバーの「標準のビットマップ」について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

ツールバーの「標準のビットマップ」について

#1 投稿記事 by jacoby »

ツールバーに「標準のビットマップ」を使いたいと思い、下の様に書いたのですが、
コンパイル時に
「 "IDB_STD_LARGE_COLOR" 無効な識別子です」
とエラーが出てしまいます。

コード: 全て選択


  'ツールバーを生成
    CreateToolbarEx(_
        hMainWnd, _
        WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS, _
        ID_TOOLBAR, _
        8, _                        'ビットマップの個数
        HINST_COMMCTRL, _       
        IDB_STD_LARGE_COLOR, _   'ビットマップのリソースID
        tbb, _
        10, _                        'ボタンの個数
        0,0, _                      'ボタンサイズ(0指定で自動セットに)
        16,15, _                    'ビットマップサイズ
        Len(tbb[0]))
ABヘルプセンターのWin32プログラミング講座のツールバーのソースを基に
hBMInst 引数に HINST_COMMCTRL を指定して、
wBMID 引数に渡すビットマップリソース
「IDB_STD_LARGE_COLOR : 大きいカラー標準ビットマップ」
を指定した部分を変えています。

環境はWinMeで
 AB4.24を使っています。


 (加えてもし、大きいカラー標準ビットマップが仮に使えた時、
ビットマップサイズは上の「16,15」のままで良いのでしょうか。)
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#2 投稿記事 by 雷電 »

無効な識別子と出るのは、プロジェクトファイルのリソースの問題があると考えられます。
まず確認事項を確認してください。(といっても、分かるのは1つだけですが)

1、プロジェクトビューのビットマップイメージのIDがIDB_STD_LARGE_COLORとなっているか。

これさえあってればコンパイルは普通に走るはずです。
===============================
MyHomePage;; raiden.no.land.to/
===============================
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

レスありがとうございます。

#3 投稿記事 by jacoby »

雷電さん、レスありがとうございます。
まず確認事項を確認してください。(といっても、分かるのは1つだけですが)

1、プロジェクトビューのビットマップイメージのIDがIDB_STD_LARGE_COLORとなっているか。
プロジェクトビューのビットマップイメージのIDがIDB_STD_LARGE_COLORとは
なっていません。
(ABヘルプセンターのWin32プログラミング講座のツールバーの説明のように
自分でビットマップを用意して挿入すればコンパイルは通りました。)

ただし、このIDB_STD_LARGE_COLORのビットマップは
自分で用意しなければならないのでしょうか?
hBMInst 引数に HINST_COMMCTRL を指定すれば
既成のもの(system-defined button bitmaps)を
使用できると思ったのですが。。。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#4 投稿記事 by 雷電 »

CreateToolbarEx関数は普通に動いていると思われます。
そもそも、ビットマップIDなど変更しなくてもいいと思いますが・・・

コード: 全て選択

'ツールバーを生成
    hToolbar=CreateToolbarEx(hMainWnd, _
        WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS, _
        ID_TOOLBAR, _
        10, _
        GetModuleHandle(0), _
        IDB_BITMAP1, _
        tbb, _
        13, _
        0,0, _
        16,15, _
        Len(tbb[0]))
私の作っているプログラムと少し比べてみたのですが、第4パラメータがおかしい?かと思われます。このコードをコピー&ペーストしてパラメータの部分を改造してみてください。
動くと思います。
今気づけば、AB付属のヘルプファイルにはCreateToolbarExの関数は載っていませんね・・・
===============================
MyHomePage;; raiden.no.land.to/
===============================
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

レスありがとうございます。

#5 投稿記事 by jacoby »

 雷電さん、再びのレスありがとうございます。
使いたいのは、ツールパーの「標準のビットマップ」というものです。
"hBMInst 引数に HINST_COMMCTRL を指定することにより
「ファイルを開く」や「切り取り」等のボタンが既成のものを使用できる"
と、説明↓にあるのを読み、やってみたところです。
http://wisdom.sakura.ne.jp/system/winap ... mmon8.html
(ページ中程の「標準のツールボタンを使う」という箇所です)
まだ実際うまく出来ていません。
何かお気づきのところがあれば是非また教えてください。
返信大変遅れてしまいました。
雷電
記事: 104
登録日時: 2006年8月21日(月) 14:26
お住まい: 兵庫県
連絡する:

#6 投稿記事 by 雷電 »

標準ビットマップボタンは、インデックスに STD というプリフィクスを持ち
ビュービットマップボタンは VIEW というプリフィックスを持っています
あとは、TBBUTTON の iBitmap メンバに、用いたいボタンのインデックス値を指定します
この定義はできているのでしょうか?
===============================
MyHomePage;; raiden.no.land.to/
===============================
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

レスありがとうございます。

#7 投稿記事 by jacoby »

 整理のために改めてウインドウにツールバーのみを設置
するプログラムを書きました。
まず、ヘルプセンターWin32プログラミング講座「ツールバーを作る」より
そこのツールバーボタンビットマップを挿入したもので実行させると、
コンパイルは通り、ツールバーが表示されます。
(↓下がソースです。ver4.24、プロジェクト名「ToolBarTest424」で製作。)
 次に、「標準のビットマップ」を使うため、クリエイト・イベントを
下の様に変更したソースを作りました。
 ボタン情報セットの箇所、
標準ビットマップボタンは、インデックスに STD というプリフィクスを持ち
ビュービットマップボタンは VIEW というプリフィックスを持っています
あとは、TBBUTTON の iBitmap メンバに、用いたいボタンのインデックス値を指定します
なので、そのように iBitmap メンバを"STD_FILENEW"などと書き換えて、
後はCreateToolbarExの
  GetModuleHandle(0)を "HINST_COMMCTRL"に、
  ビットマップのリソースIDを"IDB_STD_SMALL_COLOR"に
(今回はより前述の説明ページのソースと合わせるため、"LARGE_COLOR"ではなく "SMALL_COLOR"で行いました。)
それぞれ変えて実行しました。

 コンパイル結果は、

コード: 全て選択


MainWnd.sbp(74) - "STD_FILENEW" 無効な識別子です
MainWnd.sbp(75) - "STD_FILEOPEN" 無効な識別子です
MainWnd.sbp(76) - "STD_FILESAVE" 無効な識別子です
MainWnd.sbp(78) - "STD_HELP" 無効な識別子です
MainWnd.sbp(81) - "IDB_STD_SMALL_COLOR" 無効な識別子です
とエラーが出て来ます。

 "IDB_STD_SMALL_COLOR"など
標準のビットマップを使うための定数が定義されていないのでは
とは思いますが、分からないのは、
「これらは定義されているものではないのか?」ということと、
「もし自分で定義しなければならないとすれば、実際に
どのような値をセットしなければならないのか?」ということです。
サーチエンジンで少し調べては見たのですが、定数の中身の数値までは
中々見つけられていません。

 エラーの原因はこのことばかりではないかも知れませんが、
これらについて、気づかれたことがありましたら教えてください。
ノッチ
記事: 82
登録日時: 2005年6月01日(水) 23:27
お住まい: 北海道札幌市

Re: レスありがとうございます。

#8 投稿記事 by ノッチ »

>  エラーの原因はこのことばかりではないかも知れませんが、
> これらについて、気づかれたことがありましたら教えてください。


たぶんエラーの原因は定数が正しくないからだと思います。
値を以下のようにしてみて下さい。
HINST_COMMCTRL=-1
IDB_STD_SMALL_COLOR=0
IDB_STD_LARGE_COLOR=1
IDB_VIEW_SMALL_COLOR=4
IDB_VIEW_LARGE_COLOR=5
STD_CUT=0
STD_COPY=1
STD_PASTE=2
STD_UNDO=3
STD_REDOW=4
STD_DELETE=5
STD_FILENEW=6
STD_FILEOPEN=7
STD_FILESAVE=8
STD_PRINTPRE=9
STD_PROPERTIES=10
STD_HELP=11
STD_FIND=12
STD_REPLACE=13
STD_PRINT=14
定数を検索する時は
define
APIを検索する時は
Declare
あたりを一緒に指定するとたいていは出てきますよ。
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

レスありがとうございます。

#9 投稿記事 by jacoby »

ノッチさん、レスありがとうございます。

 書いて頂いた定数のリスト、プログラムに組み込んで実行すると
きちんと標準のビットマップのボタンが表示されました。
これらの定数は自分でセットしなければならないんですね。
定数を検索する時は
define
APIを検索する時は
Declare
あたりを一緒に指定するとたいていは出てきますよ。
 検索方法も、教えてもらってありがとうございました。
 早速、色々調べてみようと思います。

 またよろしくお願いします。
返信する