CreateWindowしたエディットボックスのフォント色TABについて

解決


KitaKata  2005-11-18 01:51:58  No: 59666

お世話になります。
質問させてください。

開発環境は 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);
}


Blue  2005-11-18 01:56:36  No: 59667

フォントが変わらないのは
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200511/05110045.txt
と一緒の理由かな?


KitaKata  2005-11-18 03:00:23  No: 59668

Blueさん
レスありがとうございます。

フォントの件、ビンゴでした m(__)m  

また、TABでフォーカスを移動する機能は親ハンドルがダイヤログであれば問題ありませんでした。
CreateWindowで作った窓の上のコントロールだとこの機能は効かないのでしょうか・・・


dairygoods  2005-11-18 06:47:50  No: 59669

> CreateWindowで作った窓の上のコントロールだとこの機能は効かないのでしょうか・・・

メッセージループ内でIsDialogMessageを呼ぶ必要があります。


KitaKata  2005-11-18 20:34:04  No: 59670

dairygoodsさん
ヒントをありがとうございます。

ご教授頂いたキーワードを元にメッセージループを再確認すると
なんと、!IsDialogMessage (hWndD, &msg) のハンドルは別に定義している
ダイヤログのハンドルであることが判明
実害がなかったので気が付かなかったようです。

メインダイヤログのハンドルに修正するとあっけなく TABによる移動が効くようになりました。
トホホな結果ですみません (滝汗;;;

Blueさん dairygoodsさん
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加