レバーコントロールの作成についてお尋ねします
Posted: 2010年11月17日(水) 12:26
こんにちは、お世話になります。
レバーコントロールを実装したいのですが、うまく表示されません。
しかし、何故かボーダーラインは表示されます。
下記ページのサンプルソース等を丸々流用しても同等の症状になってしまいます。
http://hp.vector.co.jp/authors/VA016117/coolbar.html
原因は何なのか、どなたがご指導お願いします。
//レバーコントロール作成関数
HWND CreateRebar(HWND hWnd)
{
HWND hRebar;
REBARINFO rbi;
//レバーコントロール作成
hRebar = CreateWindowEx(WS_EX_TOOLWINDOW,REBARCLASSNAME,NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | RBS_BANDBORDERS |
WS_CLIPCHILDREN | CCS_NODIVIDER|WS_BORDER,
0,0,0,0,hWnd,(HMENU)ID_Rebar,hInstance,NULL);
if(!hRebar)
{
MessageBox(hWnd,"error","error",MB_OK);
return NULL;
}
memset(&rbi,0,sizeof(REBARINFO));
rbi.cbSize = sizeof(REBARINFO);
SendMessage(hRebar,RB_SETBARINFO,0,(LPARAM)&rbi);
return hRebar;
}
//レバーコントロールの上に乗せるボタン作成関数
HWND CreateButton(HWND hRebar)
{
HWND hButton;
hButton = CreateWindow("BUTTON","on",WS_VISIBLE|WS_CHILD,
0,0,0,0,hRebar,(HMENU)ID_Button,hInstance,NULL);
return hButton;
}
//レバーコントロールに結合する関数
void RebarBand(HWND hRebar,HWND hButton)
{
REBARBANDINFO rBand;
memset(&rBand,0,sizeof(REBARBANDINFO));
rBand.cbSize = sizeof(REBARBANDINFO);
rBand.fMask = RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
rBand.fStyle = RBBS_CHILDEDGE;
rBand.cxMinChild = 0;
rBand.cyMinChild = 30;
rBand.lpText = "BUTTON";
rBand.hwndChild = hButton;
rBand.cx = 200;
SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rBand);
}
以下ウインドプロシージャ
static HWND hRebar,hButton;
INITCOMMONCONTROLSEX icex;
switch(msg)
{
case WM_CREATE:
{
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_COOL_CLASSES;
InitCommonControlsEx(&icex);
hRebar = CreateRebar(hWnd);
hButton = CreateButton(hRebar);
RebarBand(hRebar,hButton);
break;
}
case WM_SIZE:
{
SendMessage(hRebar,WM_SIZE,wParam,lParam);
break;
}
プロジェクトにComCtl32.libを参加させてcommctrl.hはインクルードしております。
これで一週間悩んでおります。よろしくお願いします。
レバーコントロールを実装したいのですが、うまく表示されません。
しかし、何故かボーダーラインは表示されます。
下記ページのサンプルソース等を丸々流用しても同等の症状になってしまいます。
http://hp.vector.co.jp/authors/VA016117/coolbar.html
原因は何なのか、どなたがご指導お願いします。
//レバーコントロール作成関数
HWND CreateRebar(HWND hWnd)
{
HWND hRebar;
REBARINFO rbi;
//レバーコントロール作成
hRebar = CreateWindowEx(WS_EX_TOOLWINDOW,REBARCLASSNAME,NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | RBS_BANDBORDERS |
WS_CLIPCHILDREN | CCS_NODIVIDER|WS_BORDER,
0,0,0,0,hWnd,(HMENU)ID_Rebar,hInstance,NULL);
if(!hRebar)
{
MessageBox(hWnd,"error","error",MB_OK);
return NULL;
}
memset(&rbi,0,sizeof(REBARINFO));
rbi.cbSize = sizeof(REBARINFO);
SendMessage(hRebar,RB_SETBARINFO,0,(LPARAM)&rbi);
return hRebar;
}
//レバーコントロールの上に乗せるボタン作成関数
HWND CreateButton(HWND hRebar)
{
HWND hButton;
hButton = CreateWindow("BUTTON","on",WS_VISIBLE|WS_CHILD,
0,0,0,0,hRebar,(HMENU)ID_Button,hInstance,NULL);
return hButton;
}
//レバーコントロールに結合する関数
void RebarBand(HWND hRebar,HWND hButton)
{
REBARBANDINFO rBand;
memset(&rBand,0,sizeof(REBARBANDINFO));
rBand.cbSize = sizeof(REBARBANDINFO);
rBand.fMask = RBBIM_TEXT | RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
rBand.fStyle = RBBS_CHILDEDGE;
rBand.cxMinChild = 0;
rBand.cyMinChild = 30;
rBand.lpText = "BUTTON";
rBand.hwndChild = hButton;
rBand.cx = 200;
SendMessage(hRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rBand);
}
以下ウインドプロシージャ
static HWND hRebar,hButton;
INITCOMMONCONTROLSEX icex;
switch(msg)
{
case WM_CREATE:
{
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_COOL_CLASSES;
InitCommonControlsEx(&icex);
hRebar = CreateRebar(hWnd);
hButton = CreateButton(hRebar);
RebarBand(hRebar,hButton);
break;
}
case WM_SIZE:
{
SendMessage(hRebar,WM_SIZE,wParam,lParam);
break;
}
プロジェクトにComCtl32.libを参加させてcommctrl.hはインクルードしております。
これで一週間悩んでおります。よろしくお願いします。