GUIで縦横サイズ指定追加

This commit is contained in:
lltcggie 2017-03-20 21:44:57 +09:00
parent a9b91ad9f9
commit c04ba8fd6c
10 changed files with 188 additions and 8 deletions

View File

@ -26,6 +26,7 @@
"IDC_RADIO_SCALE_RATIO":"Set rate",
"IDC_RADIO_SCALE_WIDTH":"Set trans width",
"IDC_RADIO_SCALE_HEIGHT":"Set trans height",
"IDC_RADIO_SCALE_WIDTH_HEIGHT":"Set trans width and height",
"IDC_STATIC_MODEL":"Model",
"IDC_RADIO_MODEL_RGB":"2-D illust (RGB Model)",
"IDC_RADIO_MODEL_PHOTO":"Photography, Anime",

View File

@ -26,6 +26,7 @@
"IDC_RADIO_SCALE_RATIO":"拡大率で指定",
"IDC_RADIO_SCALE_WIDTH":"変換後の横幅で指定",
"IDC_RADIO_SCALE_HEIGHT":"変換後の縦幅で指定",
"IDC_RADIO_SCALE_WIDTH_HEIGHT":"変換後の縦横幅で指定",
"IDC_STATIC_MODEL":"モデル",
"IDC_RADIO_MODEL_RGB":"2次元イラスト (RGBモデル)",
"IDC_RADIO_MODEL_PHOTO":"写真・アニメ (Photoモデル)",

View File

@ -633,6 +633,20 @@ void stImage::Postprocess(const int input_plane, const double scale, const int d
AlphaCleanImage(mEndImage);
}
void stImage::Postprocess(const int input_plane, const int width, const int height, const int depth)
{
DeconvertFromNetFormat(input_plane);
ShrinkImage(width, height);
// 値を01にクリッピング
cv::threshold(mEndImage, mEndImage, 1.0, 1.0, cv::THRESH_TRUNC);
cv::threshold(mEndImage, mEndImage, 0.0, 0.0, cv::THRESH_TOZERO);
mEndImage = DeconvertFromFloat(mEndImage, depth);
AlphaCleanImage(mEndImage);
}
void stImage::DeconvertFromNetFormat(const int input_plane)
{
if (input_plane == 1) // Yモデル
@ -748,6 +762,19 @@ void stImage::ShrinkImage(const double scale)
}
}
void stImage::ShrinkImage(const int width, const int height)
{
// TODO: scale = 1.0 でも悪影響を及ぼさないか調べる
const cv::Size_<int> ns(width, height);
if (mEndImage.size().width != ns.width || mEndImage.size().height != ns.height)
{
int argo = cv::INTER_CUBIC;
cv::resize(mEndImage, mEndImage, ns, 0.0, 0.0, argo);
}
}
cv::Mat stImage::DeconvertFromFloat(const cv::Mat &im, const int depth)
{
const int cv_depth = DepthBitToCVDepth(depth);

View File

@ -69,6 +69,7 @@ private:
void DeconvertFromNetFormat(const int input_plane);
void ShrinkImage(const double scale);
void ShrinkImage(const int width, const int height);
static int DepthBitToCVDepth(const int depth_bit);
static double GetValumeMaxFromCVDepth(const int cv_depth);
@ -125,6 +126,7 @@ public:
void SetReconstructedA(cv::Mat &im, const cv::Size_<int> &size, const int inner_scale);
void Postprocess(const int input_plane, const double scale, const int depth);
void Postprocess(const int input_plane, const int width, const int height, const int depth);
cv::Mat GetEndImage() const;

View File

@ -779,7 +779,10 @@ Waifu2x::eWaifu2xError Waifu2x::waifu2x(const boost::filesystem::path &input_fil
if (ret != Waifu2x::eWaifu2xError_OK)
return ret;
if(!scale_width || !scale_height)
image.Postprocess(mInputPlane, Factor, output_depth);
else
image.Postprocess(mInputPlane, *scale_width, *scale_height, output_depth);
ret = image.Save(output_file, output_quality);
if (ret != Waifu2x::eWaifu2xError_OK)
@ -857,6 +860,14 @@ double Waifu2x::CalcScaleRatio(const boost::optional<double> scale_ratio, const
if (scale_ratio)
return *scale_ratio;
if (scale_width && scale_height)
{
const auto d1 = image.GetScaleFromWidth(*scale_width);
const auto d2 = image.GetScaleFromWidth(*scale_height);
return d1 >= d2 ? d1 : d2;
}
if (scale_width)
return image.GetScaleFromWidth(*scale_width);

View File

@ -171,8 +171,10 @@ tstring DialogEvent::AddName() const
addstr += TEXT("(x") + to_tstring(scale_ratio) + TEXT(")");
else if (scaleType == eScaleTypeWidth)
addstr += TEXT("(width ") + to_tstring(scale_width) + TEXT(")");
else
else if (scaleType == eScaleTypeHeight)
addstr += TEXT("(height ") + to_tstring(scale_height) + TEXT(")");
else
addstr += TEXT("(") + to_tstring(scale_width) + TEXT("x") + to_tstring(scale_height) + TEXT(")");
}
if (output_depth != 8)
@ -236,8 +238,10 @@ bool DialogEvent::SyncMember(const bool NotSyncCropSize, const bool silent)
scaleType = eScaleTypeRatio;
else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), BM_GETCHECK, 0, 0))
scaleType = eScaleTypeWidth;
else
else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), BM_GETCHECK, 0, 0))
scaleType = eScaleTypeHeight;
else
scaleType = eScaleTypeWidthHeight;
{
TCHAR buf[AR_PATH_MAX] = TEXT("");
@ -295,13 +299,75 @@ bool DialogEvent::SyncMember(const bool NotSyncCropSize, const bool silent)
ret = false;
if (!silent)
MessageBox(dh, langStringList.GetString(L"MessageScaleHeightCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR);
MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR);
}
}
else
scale_height = l;
}
if (scaleType == eScaleTypeWidthHeight)
{
TCHAR buf[AR_PATH_MAX] = TEXT("");
GetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), buf, _countof(buf));
buf[_countof(buf) - 1] = TEXT('\0');
std::vector<const TCHAR *> v;
TCHAR *p = buf;
TCHAR *context= nullptr;
for (;;)
{
const auto str = _tcstok_s(p, TEXT(" x"), &context);
if (!str)
break;
p = nullptr;
v.push_back(str);
}
if (v.size() == 2)
{
TCHAR *ptr = nullptr;
long l = 0;
l = _tcstol(v[0], &ptr, 10);
if (!ptr || *ptr != TEXT('\0') || l <= 0)
{
ret = false;
if (!silent)
MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR);
}
else
{
scale_width = l;
}
if (ret)
{
l = _tcstol(v[1], &ptr, 10);
if (!ptr || *ptr != TEXT('\0') || l <= 0)
{
ret = false;
if (!silent)
MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR);
}
else
{
scale_height = l;
}
}
}
else
{
ret = false;
if (!silent)
MessageBox(dh, langStringList.GetString(L"MessageScaleWidthCheckError").c_str(), langStringList.GetString(L"MessageTitleError").c_str(), MB_OK | MB_ICONERROR);
}
}
{
const int cur = SendMessage(GetDlgItem(dh, IDC_COMBO_MODEL), CB_GETCURSEL, 0, 0);
switch (cur)
@ -743,7 +809,11 @@ void DialogEvent::ProcessWaifu2x()
case eScaleTypeWidth:
ScaleWidth = scale_width;
break;
case eScaleTypeHeight:
ScaleWidth = scale_height;
break;
default:
ScaleWidth = scale_width;
ScaleHeight = scale_height;
break;
}
@ -972,8 +1042,10 @@ void DialogEvent::SaveIni(const bool isSyncMember)
tScaleMode = TEXT("Ratio");
else if (scaleType == eScaleTypeWidth)
tScaleMode = TEXT("Width");
else
else if (scaleType == eScaleTypeHeight)
tScaleMode = TEXT("Height");
else
tScaleMode = TEXT("WidthHeight");
WritePrivateProfileString(TEXT("Setting"), TEXT("LastScaleMode"), tScaleMode.c_str(), getTString(SettingFilePath).c_str());
@ -1481,6 +1553,7 @@ void DialogEvent::SetWindowTextLang()
SET_WINDOW_TEXT(IDC_RADIO_SCALE_RATIO);
SET_WINDOW_TEXT(IDC_RADIO_SCALE_WIDTH);
SET_WINDOW_TEXT(IDC_RADIO_SCALE_HEIGHT);
SET_WINDOW_TEXT(IDC_RADIO_SCALE_WIDTH_HEIGHT);
SET_WINDOW_TEXT(IDC_STATIC_MODEL);
SET_WINDOW_TEXT(IDC_CHECK_TTA);
SET_WINDOW_TEXT(IDC_STATIC_PROCESS_SPEED_SETTING);
@ -1720,6 +1793,7 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
tstring tScaleRatio;
tstring tScaleWidth;
tstring tScaleHeight;
tstring tScaleWidthHeight;
tstring tScaleMode;
tstring tmode;
@ -1823,30 +1897,48 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else if (tScaleMode == TEXT("Width"))
{
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else if (tScaleMode == TEXT("Height"))
{
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else
{
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_CHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE);
}
if (noise_level == 0)
@ -1888,9 +1980,11 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else if (tmode == TEXT("scale"))
{
@ -1943,6 +2037,7 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_RATIO), tScaleRatio.c_str());
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_WIDTH), tScaleWidth.c_str());
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_HEIGHT), tScaleHeight.c_str());
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_SCALE_WIDTH_HEIGHT), tScaleWidthHeight.c_str());
SetWindowText(GetDlgItem(hWnd, IDC_EDIT_INPUT_EXT_LIST), inputFileExt.c_str());
@ -2034,6 +2129,9 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
TCLAP::ValueArg<int> cmdScaleHeight(L"h", L"scale_height",
L"custom scale height", false, 0, L"double", cmd);
TCLAP::ValueArg<int> cmdScaleWidthHeight(L"", L"scale_width_height",
L"custom scale width and height", false, 0, L"double", cmd);
std::vector<std::wstring> cmdProcessConstraintV;
cmdProcessConstraintV.push_back(L"cpu");
cmdProcessConstraintV.push_back(L"gpu");
@ -2205,10 +2303,12 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleWidth.getValue()).c_str());
@ -2219,10 +2319,12 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE);
SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleHeight.getValue()).c_str());
@ -2233,15 +2335,33 @@ void DialogEvent::Create(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_CHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), to_tstring(cmdScaleRatio.getValue()).c_str());
isSetParam = true;
}
else if (cmdScaleWidthHeight.isSet())
{
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_RATIO), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_HEIGHT), BM_SETCHECK, BST_UNCHECKED, 0);
SendMessage(GetDlgItem(hWnd, IDC_RADIO_SCALE_WIDTH_HEIGHT), BM_SETCHECK, BST_CHECKED, 0);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE);
SetWindowText(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), to_tstring(cmdScaleWidthHeight.getValue()).c_str());
isSetParam = true;
}
if (cmdProcess.isSet())
{
@ -2436,6 +2556,7 @@ void DialogEvent::OnModeChange(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID l
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), TRUE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), TRUE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), TRUE);
ScaleRadio(NULL, NULL, NULL, NULL); // ±±ÅReplaceAddString()âé©çreturn
return;
@ -2445,10 +2566,12 @@ void DialogEvent::OnModeChange(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID l
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
ReplaceAddString();
@ -2461,18 +2584,28 @@ void DialogEvent::ScaleRadio(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpD
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_WIDTH), BM_GETCHECK, 0, 0))
{
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else if (SendMessage(GetDlgItem(dh, IDC_RADIO_SCALE_HEIGHT), BM_GETCHECK, 0, 0))
{
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), FALSE);
}
else
{
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_RATIO), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), TRUE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_HEIGHT), FALSE);
EnableWindow(GetDlgItem(dh, IDC_EDIT_SCALE_WIDTH_HEIGHT), TRUE);
}
ReplaceAddString();

View File

@ -79,6 +79,7 @@ private:
eScaleTypeRatio,
eScaleTypeWidth,
eScaleTypeHeight,
eScaleTypeWidthHeight,
eScaleTypeEnd,
};

Binary file not shown.

View File

@ -37,6 +37,7 @@ int WINAPI WinMain(HINSTANCE hInstance,
CControl cControlScaleRatio(IDC_EDIT_SCALE_RATIO);
CControl cControlScaleWidth(IDC_EDIT_SCALE_WIDTH);
CControl cControlScaleHeight(IDC_EDIT_SCALE_HEIGHT);
CControl cControlScaleWidthHeight(IDC_EDIT_SCALE_WIDTH_HEIGHT);
// 登録する関数がまとめられたクラス
// グローバル関数を使えばクラスにまとめる必要はないがこの方法が役立つこともあるはず
@ -51,6 +52,7 @@ int WINAPI WinMain(HINSTANCE hInstance,
cControlScaleRatio.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR);
cControlScaleWidth.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR);
cControlScaleHeight.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR);
cControlScaleWidthHeight.SetEventCallBack(SetClassCustomFunc(DialogEvent::TextInput, &cDialogEvent), NULL, WM_CHAR);
// コントロールのサブクラスを登録
cDialog.AddControl(&cControlInput);
@ -58,6 +60,7 @@ int WINAPI WinMain(HINSTANCE hInstance,
cDialog.AddControl(&cControlScaleRatio);
cDialog.AddControl(&cControlScaleWidth);
cDialog.AddControl(&cControlScaleHeight);
cDialog.AddControl(&cControlScaleWidthHeight);
// 各コントロールのイベントで実行する関数の登録
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::Exec, &cDialogEvent), NULL, IDC_BUTTON_EXEC);
@ -71,6 +74,7 @@ int WINAPI WinMain(HINSTANCE hInstance,
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_MODE_SCALE);
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_MODE_NOISE_SCALE);
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_AUTO_SCALE);
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::OnModeChange, &cDialogEvent), NULL, IDC_RADIO_SCALE_WIDTH_HEIGHT);
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::UpdateAddString, &cDialogEvent), NULL, IDC_RADIONOISE_LEVEL0);
cDialog.SetCommandCallBack(SetClassFunc(DialogEvent::UpdateAddString, &cDialogEvent), NULL, IDC_RADIONOISE_LEVEL1);

Binary file not shown.