しっかり、.\log.txt
には正しくファイル・フォルダ名が書き込まれているのに、
なぜかforの中のTextOut()
だけがしっかりと表示してくれません。
なぜでしょうか。また、その解決策を教えてください。
ちなみに、ウィンドウのサイズを変更すると、しっかりとforの中のTextOut()
も働いてくれます。
C++
1// coolexplorer.cpp : アプリケーションのエントリ ポイントを定義します。 2// 3 4#include "framework.h" 5#include "coolexplorer.h" 6#include <filesystem> 7#include <string> 8#include <vector> 9#define MAX_LOADSTRING 100 10 11// グローバル変数: 12HINSTANCE hInst; // 現在のインターフェイス 13WCHAR szTitle[MAX_LOADSTRING]; // タイトル バーのテキスト 14WCHAR szWindowClass[MAX_LOADSTRING]; // メイン ウィンドウ クラス名 15HWND hWnd; 16std::string nowPath = R"(C:)"; //現在のパス 17std::vector<std::filesystem::directory_entry> nowDirectory; //現在のディレクトリのファイル、フォルダ群 18 19// このコード モジュールに含まれる関数の宣言を転送します: 20ATOM MyRegisterClass(HINSTANCE hInstance); 21BOOL InitInstance(HINSTANCE, int); 22LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 23INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); 24 25int APIENTRY wWinMain(_In_ HINSTANCE hInstance, 26 _In_opt_ HINSTANCE hPrevInstance, 27 _In_ LPWSTR lpCmdLine, 28 _In_ int nCmdShow) 29{ 30 ... 31 32 nowDirectory.clear(); 33 for (std::filesystem::directory_entry f : std::filesystem::directory_iterator(nowPath)) {//最初のC:\を取得 34 nowDirectory.push_back(f); 35 } 36 37 SendMessage(hWnd, WM_PAINT, 0, 0); //これで中身の入ったnowDirectoryでWM_PAINTする。 38 // メイン メッセージ ループ: 39 while (GetMessage(&msg, nullptr, 0, 0)) 40 { 41 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 42 { 43 TranslateMessage(&msg); 44 DispatchMessage(&msg); 45 } 46 } 47 48 return (int) msg.wParam; 49} 50 51 52 53// 54// 関数: MyRegisterClass() 55// 56// 目的: ウィンドウ クラスを登録します。 57// 58ATOM MyRegisterClass(HINSTANCE hInstance) 59{ 60 ... 61} 62 63// 64// 関数: InitInstance(HINSTANCE, int) 65// 66// 目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します 67// 68// コメント: 69// 70// この関数で、グローバル変数でインスタンス ハンドルを保存し、 71// メイン プログラム ウィンドウを作成および表示します。 72// 73BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 74{ 75 ... 76} 77 78// 79// 関数: WndProc(HWND, UINT, WPARAM, LPARAM) 80// 81// 目的: メイン ウィンドウのメッセージを処理します。 82// 83// WM_COMMAND - アプリケーション メニューの処理 84// WM_PAINT - メイン ウィンドウを描画する 85// WM_DESTROY - 中止メッセージを表示して戻る 86// 87// 88LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 89{ 90 switch (message) 91 { 92 case WM_COMMAND: 93 { 94 ... 95 } 96 break; 97 case WM_PAINT: 98 { 99 PAINTSTRUCT ps; 100 HDC hdc = BeginPaint(hWnd, &ps); 101 FILE* fp; 102 fopen_s(&fp, ".\log.txt", "w"); 103 104 // TODO: HDC を使用する描画コードをここに追加してください... 105 SetTextColor(hdc, RGB(255, 255, 255)); 106 SetBkColor(hdc, RGB(0, 0, 0)); 107 108 TextOut(hdc, 0, 0, std::filesystem::absolute(nowPath).c_str(), lstrlen(std::filesystem::absolute(nowPath).c_str())); 109 for (int i = 0; i < nowDirectory.size(); i++) { 110 TextOut(hdc, 30, (i * 15) + 20, 111 (TEXT("├─") + nowDirectory[i].path().wstring()).c_str(), 112 lstrlen((TEXT("├─") + nowDirectory[i].path().wstring()).c_str())); 113 114 fputs((nowDirectory[i].path().string() + "\n").c_str(), fp); 115 } 116 TextOut(hdc, 0, 200, TEXT("TEST"), lstrlen(TEXT("TEST"))); 117 fclose(fp); 118 EndPaint(hWnd, &ps); 119 } 120 break; 121 case WM_DESTROY: 122 PostQuitMessage(0); 123 break; 124 default: 125 return DefWindowProc(hWnd, message, wParam, lParam); 126 } 127 return 0; 128} 129 130INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 131{ 132 ... 133} 134
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/12 09:30