WM_PAINTで行われる処理の仕方 – プログラミング – Home

WM_PAINTで行われる処理の仕方
 
通知
すべてクリア

[解決済] WM_PAINTで行われる処理の仕方


放浪からす
 放浪からす
(@放浪からす)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

こんばんわ、はじめまして。
自分は最近WinAPIの勉強をし始め現在テキストファイルを
読み込んでその内容を表示するというプログラムに挑戦しています。
ファイルの読み込みや全角半角の判別はなんとかできたのですが、
WM_PAINTでの処理がうまくいっていないのか最初ウィンドウには
何も表示されないのですが、隠れたりすると文字が描画されるのです。
こちらの過去ログや様々な参考Webを回っても解決出来なかったので
宜しければどなたかご助言して貰えないでしょうか?
どうか宜しくお願いします。

開発環境はVC++.NET2003、OSはXPsp2、MFCは使用しておりません。

以下プロシージャ内のソースです。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){

int id;
PAINTSTRUCT ps;
OPENFILENAME ofn;

switch(msg){
case WM_PAINT:
if(fLoad){ //描画フラグ
hdc=BeginPaint(hWnd,&ps);
LoadText(hWnd,hdc,test.txt); //テキスト読み込み&描画
EndPaint(hWnd,&ps);
}
return (DefWindowProc(hWnd, msg, wp, lp));
break;
case WM_COMMAND:
switch(LOWORD(wp)){
case IDM_OPEN:
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = Bitmap (*.BMP)\0*.BMP\0\0;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = 128;
ofn.Flags = OFN_HIDEREADONLY;
if (GetOpenFileName((LPOPENFILENAME)&ofn))
LoadDIB(hWnd,szFileName);
break;
case IDM_FONT:
//フォント情報初期化
lfFont.lfHeight=28;
lfFont.lfWidth=0;

lfFont.lfEscapement=lfFont.lfOrientation=0;
lfFont.lfWeight=FW_MEDIUM;
lfFont.lfItalic=lfFont.lfUnderline=lfFont.lfStrikeOut=FALSE;
lfFont.lfCharSet=DEFAULT_CHARSET;
lfFont.lfOutPrecision=OUT_DEFAULT_PRECIS;
lfFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
lfFont.lfQuality=DEFAULT_QUALITY;
lfFont.lfPitchAndFamily=DEFAULT_PITCH | FF_SWISS;
lfFont.lfFaceName[0]='\0';
fLoad=TRUE;
break;
case IDM_NEXT:
break;
case IDM_SAVE:
SaveDIB(hWnd,szFileName);
break;
case IDM_END:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;
case WM_CLOSE:
id = MessageBox(hWnd,
終了してもよいですか,
終了確認,
MB_YESNO | MB_ICONQUESTION);
if (id == IDYES) {
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
//片づけ
DeleteObject(hBitmap);
DeleteObject(hDCCompat);
ReleaseDC(hWnd,hDC);
delete[](BYTE*)pbmi;
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}


引用未解決
トピックタグ
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
 

fLoad=TRUE;
のすぐ後に
InvalidateRectを記述してください。
OSがWM_PAINTを発行して、再描画が行われます。


返信引用
放浪からす
 放浪からす
(@放浪からす)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

ゆうさん返信どうもありがとうございます。
ゆうさんに指摘されたとおりInvalidateRectを追加した所
正常に作動するようになりました。ありがとうございます。
またこちらのお世話になることもあると思いますので、その時
はまた宜しくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました