現在、VC2008(C言語・SDK、ダイアログベース)でアプリの開発を行っております。
親ウィンドウ内に子ウィンドウ(ボタンやテキストなどのコントロール)があり、
親ウィンドウをリサイズした場合、同様に子ウィンドウの領域もリサイズさせるというの実現させたいです。
しかしながら、以下に載せるソースで動かしてみたところ、
子ウィンドウの端がふにゃふにゃして、きれいにリサイズできません。
ちらつきなどに関してはダブルバッファ等で軽減できるかとは思いますが、
ウィンドウのふにゃつきにはどう対処したらいいものか・・・
どなたかご教授いただければ助かります。
よろしくお願いします。
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include "resource.h"
BOOL CALLBACK WndProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
static HWND hText; //スタティックテキストのハンドル
static int gap_top, gap_bottom,
gap_left, gap_right; //スタティックテキストと、親ウィンドウ間のマージンを格納
switch (msg){
case WM_INITDIALOG :
{
RECT dialog_rc, text_rc; // 親ウィンドとスタティックテキストの領域を格納
hText = GetDlgItem(hDlg, IDC_TEXT1);
// 親ウィンドとスタティックテキストのクライアント領域取得
GetClientRect(hDlg, &dialog_rc);
GetWindowRect(hText, &text_rc);
MapWindowPoints(NULL, hDlg, &text_rc, 2);
//スタティックテキストと、親ウィンドウ間のマージン計算
gap_top = abs(dialog_rc.top - text_rc.top);
gap_bottom = abs(dialog_rc.bottom - text_rc.bottom);
gap_left = abs(dialog_rc.left - text_rc.left);
gap_right = abs(dialog_rc.right - text_rc.right);
}
break;
case WM_SIZING:
{
RECT dialog_rc; // 親ウィンドの領域を格納
//現在の親ウィンドウのクライアント領域を取得
memcpy(&dialog_rc, (RECT*)lp, sizeof(RECT));
MapWindowPoints(NULL, hDlg, &dialog_rc, 2);
//スタティックテキスト領域を、親ウィンドウの移動と同時に調整させながら移動
MoveWindow(hText, gap_left, gap_top, dialog_rc.right - (gap_left + gap_right), dialog_rc.bottom - (gap_top + gap_bottom), FALSE);
}
break;
case WM_SIZE:
{
InvalidateRect(hDlg, NULL, FALSE);
}
break;
case WM_CLOSE: //×ボタン
EndDialog(hDlg, 0);
return TRUE;
default:
break;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpszArgs,int nWinMode)
{
//ウィンドウ起動
DialogBox(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);
return 0;
}