質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

Win32APIのCS_VREDRAW,CS_HREDRAWの動きがわからない

fue
fue

総合スコア4

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

0評価

0クリップ

362閲覧

投稿2022/02/06 11:04

Windows API 32のウィンドウクラスのstyleに設定する値、CS_VREDRAW,CS_HREDRAWについての質問です。
5つくらいのサイトでこれに関しての説明を見たら大体、ウィンドウのリサイズ時に再描画するかしないかと書いてありました。そこで、TCHAR型の文字列を描画して、styleの値を0(NULLも試した)にして実行して、ウィンドウのリサイズをしてみました。しかし、見た様子ではしっかり文字列はウィンドウの端にくっついています。この2つの値はどんなことを意味しているんですか?

C++

// ************************************ // Ex キーボードのイベント処理を行う // ************************************ //必要なヘッダーファイルのインクルード #define STRICT #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> // シンボル定義及びマクロ #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 //文字列描画用配列 TCHAR szstr[256] = _T("キーを押していません"); //ポイント構造体 POINT pt = { 400, 200 }; // インスタンス(グローバル変数) HINSTANCE hInst; // ウィンドウプロシージャのコールバック関数 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { static TCHAR szWindowClass[] = _T("Sample04"); static TCHAR szTitle[] = _T("キーボードのイベントを処理するプログラム"); WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = 0; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wcex.hCursor = LoadCursor(NULL, IDC_WAIT); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("RegisterClassExの処理に失敗しました"), _T("Sample04"), NULL); return 1; } hInst = hInstance; // グローバル変数に値を入れる // The parameters to CreateWindow explained: // szWindowClass : アプリケーションの名前 // szTitle : タイトルバーに現れる文字列 // WS_OVERLAPPEDWINDOW : 生成するウィンドウのタイプ // CW_USEDEFAULT, CW_USEDEFAULT : 最初に置くポジション (x, y) // WINDOW_WIDTH, WINDOW_HEIGHT : 最初のサイズ (幅, 高さ) // NULL : このウィンドウの親ウィンドウのハンドル // NULL : メニューバー(このサンプルでは使用せず) // hInstance : WinMain関数の最初のパラメータ // NULL : WM_CREATE情報(このアプリケーションでは使用せず) HWND hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL ); // ウィンドウが生成できなかった場合 if (!hWnd) { MessageBox(NULL, _T("ウィンドウ生成に失敗しました!"), _T("Sample04"), NULL); return 1; } // ウィンドウの表示に必要なパラメータ: // hWnd : CreateWindowの戻り値 // nCmdShow : WinMainの引数の4番目 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メインのメッセージループ: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } // ウィンドウプロシージャ(メッセージに対するコールバック関数) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: // 描画処理の開始 hdc = BeginPaint(hWnd, &ps); // 文字列の出力。 TextOut(hdc, 5, 5, szstr, _tcslen(szstr)); // ペイント処理の終了 EndPaint(hWnd, &ps); break; //キーを押した case WM_KEYDOWN: switch (wParam) { // エスケープキーの場合 case VK_ESCAPE: //終了メッセージを発生させる PostMessage(hWnd, WM_CLOSE, 0, 0); break; // スペースキーの場合 case VK_SPACE: _stprintf_s(szstr, _T("%s"), _T("スペースキーを押しました")); break; // Aキーの場合 case 'A': _stprintf_s(szstr, _T("%s"), _T("Aキーを押しました")); break; // Bキーの場合 case 0x42: _stprintf_s(szstr, _T("%s"), _T("Bキーを押しました")); break; default: _stprintf_s(szstr, _T("%s"), _T("キーを押しました")); break; } //再描画メッセージを発生させる InvalidateRect(hWnd, NULL, TRUE); return 0; //キーを放した case WM_KEYUP: _stprintf_s(szstr, _T("%s"), _T("キーを押していません")); //再描画メッセージを発生させる InvalidateRect(hWnd, NULL, TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }

イメージ説明
ウィンドウタイトルの表示量からも分かる通りウィンドウを横に伸ばしたのに位置が変わっていない

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

KOZ6.0

2022/02/06 12:12

TextOut(hdc, 5, 5, ... ってやってるので位置は変わらないのでは?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。