- ベストアンサー
CreateWindowについて
hE=CreateWindow("EDIT",NULL,WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL|ES_READONLY,0,0,100,100,hW,(HMENU)ID_EDIT,hI,NULL); のようにES_READONLYを入れるとエジットコントロールの背面が灰色になってしまうのですがES_READONLYを入れる前のように背面を白いままにしたいのですが何か方法はありませんか。
- C・C++・C#
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
WM_CTLCOLORSTATIC を処理してください。
その他の回答 (1)
関連するQ&A
- テキストエディタならばCreateWindow
を使って hEdit = CreateWindow("EDIT",NULL,WS_CHILD| WS_VISIBLE|ES_WANTRETURN|ES_MULTILINE| ES_AUTOVSCROLL|WS_VSCROLL|ES_AUTOHSCROLL| WS_HSCROLL, 0,0,rc.right,rc.bottom,hWnd,(HMENU)ID_EDIT, hInst,NULL); として char Str[1048576]にテキストをおさめ SetWindowText(hEdit,Str); とすればスクロール関数も使う必要なくカレットもでて文字を簡単に編集できるのですが テキストビューワならば文字を変更する必要が無くカレットもでると困るのでこれが使えません また↓や↑で1行スクロールしないといけません (エディタの場合はカレットが上下端にきたときにスクロールだからちょっと違う) DrawTextだとスクロール関数を使わないといけないような気がするし・・・ 見るだけのテキストビューワを作るのに適した方法やC言語SDK関数を教えてください
- ベストアンサー
- C・C++・C#
- 1つのウィンドウに2つのエディット
case WM_CREATE: GetClientRect(hWnd, &rc); EditL = CreateWindow( TEXT("EDIT") , NULL , WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE , 0 , 0 , rc.right / 2 , rc.bottom , hWnd , (HMENU)1 , ((LPCREATESTRUCT)(lParam))->hInstance , NULL); EditR = CreateWindow( TEXT("EDIT") , NULL , WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE , rc.left / 2 , 0 , rc.right , rc.bottom , hWnd , (HMENU)2 , ((LPCREATESTRUCT)(lParam))->hInstance , NULL); return FALSE; とすると、1つのエディットしか表示されません。 また、 case WM_SIZE: GetClientRect(edit, &rc); MoveWindow(edit, rc.left, rc.top, rc.right, rc.bottom, TRUE); として、ウィンドウサイズが変更された時に どちらのエディットもクライアント領域にあわせたつもりなのですが、 サイズ変更で左側のエディットがスクロールバーの幅の分だけ 縮小されてしまいます。 どこをどのように直したらよろしいのでしょうか? 宜しくお願いします。 #Win98 & VC++6.0 & SDK で作成しています。
- ベストアンサー
- C・C++・C#
- 次のようにEditを作成し
hE=CreateWindow ("EDIT",NULL,WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|WS_VSCROLL|WS_BORDER,0,0,0,0,hWmain,HMENU(IDE),hInst,NULL); 使っていますが SetWindowTextでhEの大容量の文字列を送ったのですが 表示させているエディット画面の下に表示画面一行目が最初から何行目にあるか表示させようと思っています どんなメッセージをそれを送れば取得できるでしょうか? 例えばListでいえば i=(int)SendMessage(hL,LB_GETTOPINDEX,0,0); のようなものを知りたいのです
- ベストアンサー
- C・C++・C#
- VS2008でEDIT今トーロールがつくれない
VCを学習中です。 書籍の内容をVS2008(VC)で、EDITコントロールを実装使用しますができなくて 困っています。 内容は、 1 VS2008の機能でスケルトンを作成 (メニュー画面とaboutが表示されるものです。MFCとATLは使用していません。) 2 WM_CREATEをWndProcに作成し、CreateWindowを記述 3 実行するとEditコントロールの中にEditコントロールができて、Editコントロールとしては 機能しません。 どなたか、この謎と解決策を教えてください。 ソースの一部分を掲載します。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; static HWND hwndEdit; switch (message) { case WM_CREATE: hwndEdit = CreateWindow(TEXT("edit"),L"abcdefghijkl", WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL |WS_BORDER|ES_LEFT|ES_MULTILINE |ES_AUTOHSCROLL|ES_AUTOVSCROLL, 100,100,500,500, hWnd, (HMENU)ID_EDIT, ((LPCREATESTRUCT)lParam)->hInstance,NULL); return 0; case WM_SETFOCUS:
- ベストアンサー
- その他(ソフトウェア)
- Tabでのフォーカス(win32)
edit = CreateWindow( TEXT("EDIT") , NULL , WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER | ES_LEFT , 0 , 0 , 35 , 18 , hWnd , (HMENU)1 , ((LPCREATESTRUCT)(lParam))->hInstance , NULL ); でエディットコントロールを作成しました。 フォーカスがエディットコントロールにある時、TABキーで フォーカスをなくしたいのですが、どうしたらよいでしょうか? デバッガーで追ってみると、WM_KEYDOWNがウィンドウに送られていませんでした。
- 締切済み
- C・C++・C#
- ListBoxコントロール
hLB1=CreateWindow ("LISTBOX","",WS_CHILD|WS_VISIBLE|LBS_STANDARD, 0,0,300,150,hwnd,(HMENU)1,cs->hInstance,NULL); hLB2=CreateWindow ("LISTBOX","",WS_CHILD|WS_VISIBLE|LBS_STANDARD, 0,160,300,150,hwnd,(HMENU)2,cs->hInstance,NULL); という風に2つのListBoxコントロールを作っているサンプルを見たのですが (HMENU)1と(HMENU)2のところをともにNULLにしたら問題なのでしょうか。
- ベストアンサー
- C・C++・C#
- Windowハンドルを再利用できない
hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); Window処理関数で上記のようにするとコンパイルは通るのに実行がエラーになります 1度使ったハンドルをウィンドを破棄した後使えるようにするにはどうしたらいいのでしょうか?
- ベストアンサー
- C・C++・C#
- エディットボックスで複数行入力するには
スタイルは const DWORD dwStyle = WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_READONLY; 処理は CEdit m_edit; CString buf ; m_edit.GetWindowTextW((LPTSTR)(LPCTSTR)buf, 0); m_edit.SetWindowTextW( buf + mes + _T("\x0d\n")); いろいろためしたのですが、どうしても1行目を書き換えて表示 してしまいます。 文字列を行でどんどん追加していくにはどうすればいいんでしょうか?
- ベストアンサー
- C・C++・C#
- リストコントロールの文字の大きさを可変に
ハンドルがhWの主ウィンドウに hL=CreateWindow("LISTBOX",NULL,WS_CHILD|WS_VISIBLE,0,0,0,0,hW,HMENU(IDL),hI,0); でハンドルがhLのリストを配置して項目として "This is a pen." と "That is a book." を配置するときに文字の大きさをメインウィンドウのサイズの2倍にしたいのですがどのようにすればいいのでしょうか?
- ベストアンサー
- C・C++・C#
- チェックボックスの周囲の色が
灰色になって困っています。 なおチェックボックスは hC0=CreateWindow(TEXT("BUTTON"),TEXT("Check"),WS_CHILD|WS_VISIBLE|BS_CHECKBOX|BS_AUTOCHECKBOX,0,0,0,0,hWmain,NULL,hI,NULL); によって作りました。 スタイルを変えるなりメッセージをセンドするなりして白くできるのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
助かりましたありがとうございました。