子ウィンドウを作りその中にエディットコントローラーとスピンボタンを作成したいのですがエディットコントローラーのほうが表示されません。
CreateWindowも成功しています。
環境は、VC2005+WinXP です。
//子ウィンドウです
LPCSTR szClassName = TEXT("COPController");
WNDCLASS op;
op.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;
op.lpfnWndProc = OPProc; //プロシージャ名
op.cbClsExtra = 0;
op.cbWndExtra = 0;
op.hInstance = hInst; //インスタンス
op.hIcon = LoadIcon(NULL, IDI_APPLICATION);
op.hCursor = LoadCursor(NULL, IDC_ARROW);
op.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
op.lpszMenuName = NULL; //メニュー名
op.lpszClassName = szClassName;
if(!RegisterClass(&op)){
return FALSE;
}
m_ophWnd = CreateWindow(szClassName, TEXT(""),
WS_CHILD | WS_DLGFRAME | WS_CAPTION | WS_CLIPCHILDREN,
ix,iy,iwidth,iheight,
hwnd,(HMENU)id,hInst,NULL);
ShowWindow(m_ophWnd, SW_SHOW);
UpdateWindow(m_ophWnd);
//以下がエディットコントロールとスピンボタンです
//上の子ウィンドウのWM_CREATEで呼び出しています。
INITCOMMONCONTROLSEX ic;
ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
ic.dwICC = ICC_UPDOWN_CLASS;
InitCommonControlsEx(&ic);
edhWnd = CreateWindowEx( 0, "Edit", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CLIPSIBLINGS,
rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top,
hWnd, (HMENU)eid, hInst, NULL);
sbhWnd = CreateUpDownControl(WS_CHILD | WS_VISIBLE | WS_BORDER | UDS_ALIGNRIGHT | WS_CLIPSIBLINGS,
0,0,0,0, hWnd, sid, hInst, edhWnd, max, min, 1);
if( !edhWnd || !sbhWnd)
return FALSE;
SetWindowText(edhWnd, "001");
>rect
はどのようにして取得しているのでしょうか?
本題と関係ないですが、ソースの前半部分は TEXT マクロを使っているのに
後半は使っていません。TEXT マクロを使うように統一したほうがいいでしょう。
>edhWnd = CreateWindowEx( 0, "Edit", "",
edhWnd = CreateWindowEx( 0, TEXT("Edit"), TEXT(""),
>SetWindowText(edhWnd, "001");
SetWindowText(edhWnd, TEXT("001"));
>本題と関係ないですが、ソースの前半部分は TEXT マクロを使っているのに
>後半は使っていません。TEXT マクロを使うように統一したほうがいいでしょ
>う。
ご指摘ありがとうございます、これからは気をつけます。
rectは、
#define ID_EDIT_X 101
#define ID_SPIN_X 201
#define X_X 10
#define X_Y 10
#define MAX_NUM 1000
#define MIN_NUM -1000
#define SPINEDHIT_W 100
#define SPINEDHIT_H 60
RECT m_recx;
m_recx.right = X_X;
m_recx.top = X_Y;
m_recx.left = X_X + SPINEDHIT_W;
m_recx.bottom = X_Y + SPINEDHIT_H;
case WM_CREATE:
HINSTANCE hInst = ((LPCREATESTRUCT)lp)->hInstance;
XSpinEdit.Init(hWnd, hInst, &m_recx, ID_EDIT_X, ID_SPIN_X, MAX_NUM, MIN_NUM);
と、しています。
すいません書き忘れです。
// XSpinEdit.Init(,, RECT *rc ,,)の処理です。
RECT rect = *rc;
edhWnd = CreateWindowEx( 0, "Edit", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CLIPSIBLINGS,
rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top,
hWnd, (HMENU)eid, hInst, NULL);
本当にコンパイル出来ていますか?
>RECT rect = *rc;
>rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top,
rectはRECT型の変数ですよね?
->は使わないのでは?
->をつかうならrcに対してですよね?
すいませんちょっとまちがえてて、
RECT rect = *rc;
rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top,
でした。
rectを使うように直しておきます。
RECTでちゃんと範囲をしていできていなかったため、表示されていませんでした。
>m_recx.right = X_X;
>m_recx.top = X_Y;
>m_recx.left = X_X + SPINEDHIT_W;
>m_recx.bottom = X_Y + SPINEDHIT_H;
の右と左の数値が反対でした。
スピンボタンは正しいいちに表示されているため、エディットコントロールの
表示部分に問題あると思って、気づきませんでした。
わざわざお時間をとらせてしまって、申し訳ありません。
以後このようなことの無い様に気をつけます。
ツイート | ![]() |