![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
VC++2005でツールバーにボタンを8個つくり、そこにツールチップを表示させたのですが、最後のボタンだけ文字列でなく『0/?』と表示されてしまいます。
順番を入れ変えれば、普通に表示されるのですが、8番目のボタンは、やはり『0/?』と表示されてしまいます。
ストリングテーブルか、TBBUTTON構造体の、サイズが足りないのかと思い、色々試したのですがうまく行きません。
参考にしているのは、『猫でも…66章』で、ストリングテーブルは、BCC developerで作ってます。
詳しい方、アドバイスをお願いします。
No.2ベストアンサー
- 回答日時:
★気になったことを1つ。
・MyCreateToolWnd() 関数の最後の部分にある
>for(id = 0; id <= 8; id++){
↑
この行。
これは 0 ~ 8 の 9回ループしますよ。⇒9個分
もし 8 個分なら
(1)for(id = 0; id < 8; id++){
(2)for(id = 1; id <= 8; id++){
のどちらかにします。
TBBUTTON 構造体の tbb[] 配列を tbb[id] と参照しているので(1)が正しい記述でしょう。
・回答No.1の
>配列と同じように 0 番から指定しますので。
↑
これの意味に気づいて欲しかった。
for文の条件式にある <= と < に注意しましょう。
ご指摘有難うございます。
前回の補足の後で、もう一度8個にしてコンパイルしてみました。
結果は駄目でしたが、その後に
>配列と同じように 0 番から指定しますので。
の意味が分かり、for(id = 0; id <= 7; id++) として、コンパイルしてみました。
結果は、成功しました。でも今回のアドバイスにあるように、
>(1)for(id = 0; id < 8; id++){
のように記述するのが正しいですね。
適切なアドバイス、有難うございます。
(まだまだ勉強不足ですね)
No.1
- 回答日時:
★ソースコードを見ないと分かりません。
・とりあえず TBBUTTON 構造体を9個にして再コンパイルして下さい。
これで8番目が正常に表示されれば指定方法が間違っていることになります。
配列と同じように 0 番から指定しますので。
この回答への補足
いつもアドバイスしていただき有難うございます。
ご指摘のように、TBBUTTON構造体を9個にしてコンパイルしたら、9個すべてにツールチップが表示されました。(HELPを追加しました)
不思議です。
以下がソースコードです、気が付いた点がありました、らお手数でもご指摘をお願いします。
//#define STRICT;
#define ID_MYTOOLBAR1000
#include <windows.h>
#include <commctrl.h>
#include "Restoolbar.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
HWND MyCreateToolWnd(HWND);
HINSTANCE hInst;
TCHAR szClassName[] = TEXT("toolbar02");
TBBUTTON tbb[] = {
{STD_PASTE, IDS_PASTE, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_FILENEW, IDS_NEW, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_FILEOPEN, IDS_OPEN, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_FILESAVE, IDS_SAVE, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_DELETE, IDS_DELETE, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_REDOW, IDS_REDOW, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_CUT, IDS_CUT, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_COPY, IDS_COPY, TBSTATE_ENABLED, BTNS_BUTTON},
{STD_HELP, IDS_HELP, TBSTATE_ENABLED, BTNS_BUTTON}
};
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
if(!hPrevInst){
if(!InitApp(hCurInst))
return FALSE;
}
hInst = hCurInst;
if(!InitInstance(hCurInst, nCmdShow)){
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = NULL;
wc.hCursor = (HCURSOR)LoadImage(NULL,
MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = (LPCTSTR)szClassName; //(LPCSTR)
wc.hIconSm = NULL;
return (RegisterClassEx(&wc));
}
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szClassName,TEXT("TOOLBAR"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL, hInst, NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
//int id;
static HWND hToolWnd;
// INITCOMMONCONTROLSEX cc;
switch (msg){
case WM_CREATE:
hToolWnd = MyCreateToolWnd(hWnd);
break;
case WM_SIZE://ツールバーのサイズ変更
SendMessage(hToolWnd, WM_SIZE, wp, lp);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
//ツールバーを作る
HWND MyCreateToolWnd(HWND hWnd)
{
HWND hTool;
HWND hToolTip;
static TOOLINFO ti;
static int id;
static int stdid;
//TBADDBITMAP tbab;
InitCommonControls();
hTool = CreateToolbarEx(
hWnd,
WS_CHILD | WS_VISIBLE,
ID_MYTOOLBAR,
9,
(HINSTANCE)HINST_COMMCTRL,
IDB_STD_LARGE_COLOR,
(LPCTBBUTTON)tbb,
9,
0, 0, 0, 0,
sizeof(TBBUTTON));
//ツールチップを作る
hToolTip = CreateWindowEx(
0,
TOOLTIPS_CLASS,
NULL,
TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hWnd,
NULL,
hInst,
NULL);
ti.cbSize = sizeof(TOOLINFO);
ti.hwnd = hTool;
ti.hinst = hInst;
ti.uFlags = TTF_SUBCLASS;
for(id = 0; id <= 8; id++){
SendMessage(hTool, TB_GETITEMRECT, id, (LPARAM)&ti.rect);
ti.uId = tbb[id]. idCommand;
ti.lpszText = (LPTSTR)tbb[id].idCommand;
SendMessage(hToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
}
SendMessage(hTool, TB_SETTOOLTIPS, (WPARAM)hToolTip, 0);
return hTool;
}
これから、もう一度 8個に戻してテストしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- gooのスマホ スマホF-51Bに緊急時情報画面でロックが掛かって解除できません。 3 2023/06/18 23:05
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- gooブログ Twitterの動画画面をgooブログに埋め込めない 4 2022/06/03 16:40
- VR・AR YoutubeでVRゴーグル用の切り替えボタンが表示されない? VRゴーグル(中にスマホを入れるタイ 3 2022/10/20 10:27
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- コーヒーメーカー・電気ケトル・電気ポット パルスオキシメーターの故障でしょうか? 自宅に帰りパルスオキシメーターの表示が消えて たので電源ボタ 2 2022/08/21 02:14
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASPでの引数の配列渡しについて
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
truncate tableを使って複数の...
-
データ無し時は空白行にしたい...
-
sqlに記述できない文字
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
テーブル定義書(Oracle) 【IX】...
-
PostgreSQLのtimestamp型で時間...
-
UPDATEで既存のレコードに文字...
-
「都道府県の面積の大きい順に...
-
selectの単純繰り返し
-
T-SQLで任意の箇所で強制終了す...
-
Accessで今日から5日後
-
固定長のデータをmysqlで取り込...
-
オラクルのUPDATEで複数テーブル
-
テーブル名が可変の場合のクエ...
-
SQLサーバに対するSQL文で抽出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASPでの引数の配列渡しについて
-
最後のボタンだけツールチップ...
-
Smartyの[]内に[]を使いたいです。
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
Accessで今日から5日後
-
UPDATEで既存のレコードに文字...
-
truncate tableを使って複数の...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
-
既存データをINSERT文にして出...
-
PostgreSQLのtimestamp型で時間...
-
エラーを起こす方法
-
SQLで、Join句で結合したテ...
-
結合したテーブルをSUMしたい
-
絶対参照と相対参照の違いを教...
-
テーブル名が可変の場合のクエ...
-
SELECTした結果に行番号を求めたい
おすすめ情報