• ベストアンサー

トップレベルのEDITのスタイル

実行するとEDITが出てきて入力させるだけなのですが hWnd=CreateWindowEx( WS_EX_TOPMOST, "EDIT",NULL, WS_POPUP, point.x,point,y,300,20,NULL,NULL,hInstance,0); として親無しのEDITを作成しています 移動もサイズ変更も必要無いのですが 背景に溶け込まないように枠だけはほしいと思い WS_BORDERを付けるなどすると タイトルバーが出てきてしまいます タイトルバー無しの枠付きには出来ないのでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • darksky
  • ベストアンサー率66% (38/57)
回答No.3

テストできる環境は無いので、正常に動作するかはわかりませんが、拡張スタイルにWS_EX_CLIENTEDGEをセットすればいいように思います。

minimum
質問者

お礼

うまくいきました (WS_EX_TOPMOSTと一緒だと何故かいきませんでしたが) ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • darksky
  • ベストアンサー率66% (38/57)
回答No.2

ANo.#1の補足です。 コードをよく見るとMFCは使っていませんね。 だとしても同じ考え方でOKです。 トップウィンドウが、Editクラスだとサブクラス化を行って終了などを行う必要がありますので、面倒かと思います。 親ウィンドウのWndProcで操作した方がよろしいのではないでしょうか。

minimum
質問者

補足

サブクラス化は問題なく出来ています ダイアログを作っても全く問題は無いのですが 起動=>文字入力=>終了 という簡素な物に2つもWindowを作るのはイヤだ という女々しい根性の元、EDITのみで 済ませれないかなと思っています

全文を見る
すると、全ての回答が全文表示されます。
  • darksky
  • ベストアンサー率66% (38/57)
回答No.1

直接の回答にはなりませんが、私なら別のウィンドウを作成して、その中にEditを作成します。 ダイアログレベルの方が作りやすいです。 VCならタイトルなしなどはダイアログエディタで簡単に指定できます。 OnSizeでEditをウィンドウいっぱいに配置し、親ウィンドウをSetWindowPosを使って全ウィンドウの最上位に配置するようにします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語でのEDITコントロールからの数字の取得について質問があります。

    C言語でのEDITコントロールからの数字の取得について質問があります。 case WM_CREATE: hwndTempo = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT") , TEXT("120") , WS_CHILD | WS_VISIBLE | ES_LEFT | ES_NUMBER , 0 , 0 , 200 , 30 , hWnd, (HMENU)3, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE) , NULL); break; このようにEDITコントロールを作成したとき、どのように書かれている数字(初期設定では120)を取得することができるのでしょうか? ためしに文字型で取得してから変換しようと思い、 ボタンを押した時の処理として char szEdit1[128]; GetDlgItemText(hWnd, hwndTempo, szEdit1,64); と入力してみたのですが、 「error C2664: 'GetDlgItemTextW' : 2 番目の引数を 'HWND' から 'int' に変換できません。」 となってしまいました。 最近始めたばかりでインスタンスやウィンドウハンドルの指定などが間違っているのではないかと思いますが、いまひとつよくわかりません。 「GetDlgItemText」の行をコメントアウトすればエディットとボタンコントロールは正常に表示されます。 開発環境がVisual C++ 2008 Express Editionであるため、リソースエディタは使っていません。 サンプルの多くがIDC_EDIT1を使っているのでどう参考にすればよいか良く見えません。 この方法を学習したら「GetDlgItemInt」を使って直接取得してみる予定です。 出来れば単純なサンプルソースを提示していただけると助かります。 ではよろしくお願いします。

  • ウインドウスタイルの、WS_EX_TOPMOST

    引き続きVC++2008でWindowsフォームアプリケーションを作っています。 WindowsAPIでのウインドウ製作中です。 今Form1を親とするウインドウで、CreateWindowEx内のウインドウスタイルの個所の引数にWS_EX_TOPMOSTを指定したのですが どうも最前面に表示されてくれないようです。 これは何か他にやらないといけない事があるのでしょうか? なお、CreateWindowEx関数は現在、最初の引数を WS_EX_TOOLWINDOW にして、WS_EX_TOPMOST以外のウインドウスタイルは WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX がある状態です。

  • TABによるフォーカス移動

    実行環境: Microsoft Visual Studio 2005 質問: TABによるフォーカス移動が行えません。どのようにソースを変更すれば宜しいか教えてください。 以下ソース //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HINSTANCE main_inst; static HFONT main_hfont; main_inst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE ) ; static HWND hEdit1,hEdit2,hEdit3; switch (msg) { case WM_SETFOCUS: SetFocus(hEdit1); break; case WM_COMMAND: switch(LOWORD(wp)){ case ID_EDIT1: if(wp == VK_TAB) SetFocus(hEdit2); break; case ID_EDIT2: if(wp == VK_TAB) SetFocus(hEdit3); break; case ID_EDIT3: if(wp == VK_TAB) SetFocus(hEdit1); break; } case WM_CREATE: hEdit1 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_AUTOHSCROLL, 106, 89, 158, 34, hWnd, (HMENU)ID_EDIT1, main_inst, NULL ); hEdit2 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_NUMBER|ES_AUTOHSCROLL, 106, 143, 158, 34, hWnd, (HMENU)ID_EDIT2, main_inst, NULL ); hEdit3 = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT("EDIT"),NULL,WS_CHILD|ES_NUMBER|WS_VISIBLE|ES_AUTOHSCROLL, 106, 198, 158, 34, hWnd, (HMENU)ID_EDIT3, main_inst, NULL ); CreateWindow( TEXT("BUTTON"),TEXT("起動"),WS_CHILD|WS_VISIBLE|BS_MULTILINE|BS_CENTER, 89, 301, 112, 40, hWnd, (HMENU)ID_BUTTON, main_inst, NULL ); main_hfont = CreateFont( -19, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_MODERN, TEXT("MS ゴシック") ); SendDlgItemMessage( hWnd, ID_EDIT1, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_EDIT2, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_EDIT3, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); SendDlgItemMessage( hWnd, ID_BUTTON, WM_SETFONT, (WPARAM)main_hfont, MAKELPARAM(TRUE, 0) ); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • 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:

  • CreateWindowEx のウィンドウスタイルが反映されないのですが・・・

    CreateWindowEx のウィンドウスタイルが反映されないのですが・・・ VC++6.0 の SDK にて、ウィンドウを表示するプログラムを作成中なのですが、 スタイルが思うように反映されません。なぜなのでしょうか。 hList = CreateWindowEx( 0,      WC_LISTVIEW, "",       WS_CHILD | WS_VISIBLE |//猫でもわかる ~ によるうとデフォルトで必要らしい      WS_EX_CLIENTEDGE |   // 縁が沈んで見える境界線を持ちます。→ 持ちません      WS_EX_ACCEPTFILES |  // ドラッグ&ドロップを受けるとあるが、テキストをドロップしても×マーク      WS_EX_RIGHTSCROLLBAR | // 右スクロールバーが出るはずなのに・・・      LVS_REPORT,       // カラムのタイトル      0, 0, 0, 0,      hWnd,      (HMENU)LISTVW_HI_1,      hInst,      NULL);

  • ダイアログを閉じるとメモリー消費が増える

    メインウインドーに例えばA、Bという2個のモーダルダイアログを開くようにしていますが、Aのみで開いたり閉じたりするとメモリー消費が200kバイトづつ毎回増えてしまいます。 しかし、最初にBを一回開いて閉じておけば、その後は何回Aを開いてもメモリーは増えません。 また、メモリーの増えるタイミングはAのダイアログを開いた時ではなく閉じた時点で増えます。 解決策を教えてください。 //子ウィンドー作成 hwDialog_o = CreateWindowEx(0, "CDialog", "", WS_OVERLAPPED| WS_SYSMENU| WS_CAPTION| WS_BORDER| WS_VISIBLE| WS_CLIPCHILDREN| WS_EX_TOPMOST,//WS_CLIPCHILDRENでチラツキ防止 i, j, 660, 180, NULL, NULL, h_Inst, NULL); ShowWindow(hwDialog_o, nWinMode); UpdateWindow(hwDialog_o); // メインウインドウを無効化してモーダルに EnableWindow(hwnd,FALSE); ・ ・   色々と処理 ・ // メインウインドウを有効にしてモーダル解除 EnableWindow(hwnd,TRUE); BringWindowToTop(hwnd); return;

  • エディットボックス内でキー押されたときのメッセージ

    VC++6.0です。 メインウインドウ内のエディットボックス(一行)で、特定のキー入力を検知したいのですが、どのようにすればよいでしょうか。 mfcは使ってません。 //ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {  switch( message )  {   case WM_CREATE:    //エディットボックスを作成    CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT","",          WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL,          0,0,2000, 20, hWnd, (HMENU)IDC_EDIT, g_hInst, NULL );    break;   case WM_COMMAND:    //エディットボックス内の変更はEN_CHANGEで受け取れるが、    //キーコードは送られてこない    break;  } }

  • 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がウィンドウに送られていませんでした。

  • ウィンドウのサイズ変更について

    タイトルバーがないウィンドウのサイズ変更について質問です。 タイトルバーがあるウィンドウでは、 ウィンドウの端にマウスカーソルを合わせると サイズ変更のカーソルに変わってサイズ変更が出来ますけど、 タイトルバーがないウィンドウでは出来ないのですが、 どうすればサイズ変更が出来るようになるのでしょうか? CreateWindowEx()には、 拡張ウィンドウスタイルには、 WS_EX_TOOLWINDOW | WS_EX_LAYERED | WS_EX_ACCEPTFILES ウィンドウスタイルには、 WS_POPUPWINDOW | WS_BORDER を渡しています。 開発環境 XP Visual Studio 2005 C、C++

  • WinAPIでの画像高速切り替え表示プログラム2

    1の続きです。これを先に見た方は1から見てください。 お願いします。 int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = __FILE__; if(!RegisterClass(&wc)) return 0; HWND hWnd=CreateWindow( __FILE__," ", WS_POPUP | WS_VISIBLE, 0,0, 1024,768, NULL,NULL,hInstance,NULL); if(hWnd==NULL) return 0; // タイマを作成する SetTimer( hWnd, TIMER_ID, TIMER_ELAPSE, NULL ); BOOL bRet; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1) break; DispatchMessage(&msg); } // タイマを破棄する KillTimer( hWnd, TIMER_ID ); return (int)msg.wParam; } 2つに分かれてしまって申し訳ありません。 よろしくお願いします。

このQ&Aのポイント
  • Brother Utilitiesに製品名が表示されない問題に関して相談します。
  • 2つのプリンタがあるが、片方しか表示されない問題が発生しています。
  • Windows11で動作している環境で無線LAN経由で接続しています。
回答を見る