まず第一に、これは MFC ではありません。これは、私が取り組んできた GUI のトリミングされたバージョンです。
タブ コントロール (デフォルト ウィンドウのハンドルを使用) の上にビットマップ イメージがあることがわかるように、これを「ブルー ビットマップ」と呼びます。問題はなく、完全に機能しています。私が抱えている問題は、別のビットマップ (ディスク上のビットマップ ファイルから) を子ウィンドウ (より具体的にはタブ コントロールの子ウィンドウ) の背景に設定し、灰色を置き換えることです。子ウィンドウ (タブ) の背景としてビットマップを設定しようとしたいくつかのことを次に示します。
1) 最初に LoadImage を使用してビットマップを次のようにインポートすることにより、青色のビットマップをウィンドウに割り当てるために使用したのと同じ方法を使用しました。
index->hbmBitmapBanner = (HBITMAP)LoadImage(index->hInstance,L"Images\\horizontal.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
次に、WM_PAINT メッセージで:
case WM_PAINT:
{
PAINTSTRUCT ps1;
if (BeginPaint(WINDOWHANDLE,&ps1))
{
HDC hdcBanner = CreateCompatibleDC(ps1.hdc);
HBITMAP hbmOldHorizontal = (HBITMAP)SelectObject(hdcBanner,index->hbmBitmapBanner); // banner
BitBlt(ps1.hdc,0,0,516,101,hdcBanner,5,0,SRCCOPY);
SelectObject(hdcBanner,hbmOldHorizontal);
DeleteDC(hdcBanner);
EndPaint(WINDOWHANDLE,&ps1);
}
break;
}
そのコードは、青色のビットマップをウィンドウに設定することに成功しましたが、他のビットマップをウィンドウに設定することには成功しませんでした (もちろん、青色のビットマップの変数を代入すると、サイズと方向も変更されます)。画面にビットマップが表示されず、ウィンドウは変更されませんでしたが、機能が失敗することはありませんでした。また、ファイルの場所を交換すると、ビットマップが青いビットマップがあった場所にロードされたので、ロード機能に間違いはありません。
2) 上記のコードを使用して、BeginPaint の最初の引数をタブ コントロール ボックスのウィンドウ ハンドルに変更しようとしましたが、これも役に立たず、ウィンドウは変更されませんでした。また、BeginPaint の最初の引数を情報タブに表示される子ウィンドウに変更しようとしましたが、これにより子ウィンドウ (グループボックス) が消えましたが、まだウィンドウにビットマップは表示されませんでした。
3) 最後の手段として、私は愚かにも子ウィンドウでこの関数を使用しようとしました
SetClassLongPtr(tab->hTabIndex[0],GCLP_HBRBACKGROUND,(DWORD)GetStockObject(BLACK_BRUSH));
そしてもちろん、それはうまくいきませんでした
役に立つ場合は、ウィンドウにタブを作成する方法を次に示します。
TCITEM tie = {0};
tab->hTab = CreateWindowEx(0,WC_TABCONTROL,L"",WS_CHILD | WS_VISIBLE,0,101,600,400,
WINDOWHANDLE,NULL,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWLP_HINSTANCE),NULL
);
メインのタブ コントロールで、その後に個々のタブ (つまり、情報タブ) が挿入されます。
TCHAR pszTab1 [] = L"Information"; // tab1's text
tie.pszText = pszTab1; // the tab's text/caption
TabCtrl_InsertItem(tab->hTab, 0, &tie); // insert the tab
追加情報: タブ コントロールとウィンドウは、これとは別に完全に動作/相互作用しています。これを1つのタブでのみテスト/試行していました.1つのタブで機能するかどうかはわかっていたので、すべてのタブで機能するため、時間を節約できます.
Charles Petzold 著の Programming For Windows Fifth Edition を参照用に持っています。ビットマップに関するかなり大きなセクションがありますが、彼はビットマップを子ウィンドウにロードすることについては触れていません。メニューのビットマップ。ウィンドウとはまったく異なります。