お世話になります。
質問させてください。
開発環境は VC++ 6.0 SDK + Windows2000 です。
SDIの画面に小さいエクセルのような表を作成しようと思います。
一つ一つのセルはエディットボックスを CreatewindowExで作成しました。
for文で回して各セルのハンドルは配列にしています。
セルの枠は WM_PAINT の中で MoveToとLineToで描画しています。
枠の表示は問題ないのですが、文字は表示されるもののフォントも
色も無視されています。
また、TABによるセルの移動もだめです。
どこが問題なのでしょうか?
以下の関数は WinMain のメッセージループに入る直前に入れています。
メインウィンドウの WM_CREATE:に入れると何も表示されませんでした
この段階ではまだメインウィンドウが作られていないためと勝手に判断
しています。
引数の hwnd は WinMain の中で CreateWindow で作成している
メインウィンドウのハンドルです。
よろしくお願いします。
void CreateCell(HWND hwnd)
{
int icx, icy ;
char szT[128];
HWND hwndAft = hwnd ;
HFONT hFont;
HDC dcc;
dcc = GetDC(hwnd);
// フォント設定
hFont = SetMyFont((LPCTSTR)"Tahoma", 12, 0);
SelectObject(dcc, hFont);
// テキストの色指定
SetTextColor(dcc , RGB(255 , 0 , 0));
for(icx=0; icx<XITEM; icx++){
for(icy=0; icy<YITEM; icy++){
hwndEA[icx][icy] = CreateWindowEx(NULL
, "edit"
, ""
, WS_CHILD | WS_VISIBLE | SS_RIGHT
, 10 + icx * 42
, 10 + icy * 22
, XW
, YH
, hwnd
, NULL
, hgInstance
, NULL
);
SendMessage(hwndEA[icx][icy], WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0) );
wsprintf(szT,"%d", icx+icy );
SetWindowText(hwndEA[icx][icy], szT);
SetWindowPos(hwndEA[icx][icy], hwnd, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE) ;
hwndAft = hwndEA[icx][icy] ;
}
}
DeleteObject(hFont);
}
フォントが変わらないのは
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200511/05110045.txt
と一緒の理由かな?
Blueさん
レスありがとうございます。
フォントの件、ビンゴでした m(__)m
また、TABでフォーカスを移動する機能は親ハンドルがダイヤログであれば問題ありませんでした。
CreateWindowで作った窓の上のコントロールだとこの機能は効かないのでしょうか・・・
> CreateWindowで作った窓の上のコントロールだとこの機能は効かないのでしょうか・・・
メッセージループ内でIsDialogMessageを呼ぶ必要があります。
dairygoodsさん
ヒントをありがとうございます。
ご教授頂いたキーワードを元にメッセージループを再確認すると
なんと、!IsDialogMessage (hWndD, &msg) のハンドルは別に定義している
ダイヤログのハンドルであることが判明
実害がなかったので気が付かなかったようです。
メインダイヤログのハンドルに修正するとあっけなく TABによる移動が効くようになりました。
トホホな結果ですみません (滝汗;;;
Blueさん dairygoodsさん
どうもありがとうございました。
ツイート | ![]() |