172 lines
4.3 KiB
C++
172 lines
4.3 KiB
C++
// DlgInput.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "hgjson.h"
|
|
#include "DlgZk.h"
|
|
#include "afxdialogex.h"
|
|
#include "DlgRange.h"
|
|
#include "DlgCondition.h"
|
|
#include "opt_ui/DlgPage.h" // for local_trans
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// known name ...
|
|
namespace hz_2_py
|
|
{
|
|
std::string getLetter(std::string strText, bool head_only = false);
|
|
};
|
|
namespace util
|
|
{
|
|
std::wstring a2u(const char* a, bool from_utf8 = false);
|
|
std::string u2a(const wchar_t* u, bool to_utf8 = false);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// CDlgZk dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CDlgZk, CDialogEx)
|
|
|
|
CDlgZk::CDlgZk(CWnd* pParent /*=NULL*/)
|
|
: CDialogEx(CDlgZk::IDD, pParent)
|
|
{
|
|
}
|
|
|
|
CDlgZk::~CDlgZk()
|
|
{
|
|
}
|
|
|
|
|
|
std::wstring CDlgZk::get_item_text(UINT id)
|
|
{
|
|
int l = GetDlgItem(id)->GetWindowTextLengthW();
|
|
wchar_t* buf = new wchar_t[l + 4];
|
|
|
|
l = GetDlgItem(id)->GetWindowTextW(buf, l + 2);
|
|
buf[l] = 0;
|
|
|
|
std::wstring ret(buf);
|
|
|
|
delete[] buf;
|
|
|
|
return std::move(ret);
|
|
}
|
|
|
|
void CDlgZk::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialogEx::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_COMBO_FONT, font_);
|
|
DDX_Control(pDX, IDC_COMBO_SIZE, size_);
|
|
DDX_Control(pDX, IDC_COMBO_SIZE2, o_size_);
|
|
}
|
|
BOOL CDlgZk::OnInitDialog()
|
|
{
|
|
CDialogEx::OnInitDialog();
|
|
|
|
// Set the icon for this dialog. The framework does this automatically
|
|
// when the application's main window is not a dialog
|
|
font_.SetCurSel(0);
|
|
size_.SetCurSel(0);
|
|
o_size_.SetCurSel(0);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
}
|
|
|
|
void CDlgZk::regen(void)
|
|
{
|
|
std::wstring f(get_item_text(IDC_COMBO_FONT)),
|
|
fs(get_item_text(IDC_COMBO_SIZE)),
|
|
t(get_item_text(IDC_EDIT_DATA)),
|
|
os(get_item_text(IDC_COMBO_SIZE2)),
|
|
sep(L"¡Á");
|
|
SIZE out = { _wtoi(os.c_str()), _wtoi(os.c_str() + os.find(sep) + sep.length()) };
|
|
int h = _wtoi(fs.c_str());
|
|
wchar_t text[40] = { 0 };
|
|
HWND hwnd = GetDlgItem(IDC_STATIC_DRAW)->m_hWnd;
|
|
HDC hdc = ::GetDC(hwnd);
|
|
char_dc dc(hdc);
|
|
uint8_t *ptr = NULL;
|
|
|
|
dc.set_font(h, f.c_str());
|
|
sep = L"";
|
|
for (int i = 0; i < t.length(); ++i)
|
|
{
|
|
sep += L"static uint8_t ";
|
|
text[0] = t[i];
|
|
text[1] = 0;
|
|
ptr = dc.lattice(text[0], out);
|
|
|
|
std::string ansi(util::u2a(text));
|
|
ansi = hz_2_py::getLetter(ansi);
|
|
std::transform(ansi.begin(), ansi.end(), ansi.begin(), tolower);
|
|
fs = util::a2u(ansi.c_str());
|
|
sep += fs + L"[] = {" + std::to_wstring(out.cx) + L", " + std::to_wstring(out.cy) + L"\r\n\t\t";
|
|
{
|
|
ansi = util::u2a(text, true);
|
|
uint8_t* p = (uint8_t*)&ansi[0];
|
|
swprintf_s(text, _countof(text) - 1, L"\\%03o\\%03o\\%03o", p[0], p[1], p[2]);
|
|
os = std::wstring(L"font_map_[\"") + text + L"\"] = " + fs + L";";
|
|
}
|
|
swprintf_s(text, _countof(text) - 1, L", 0x%02X", ptr[0]);
|
|
sep += text;
|
|
for (int i = 1; i < out.cx * out.cy / 8; ++i)
|
|
{
|
|
if (i % 16 == 0)
|
|
swprintf_s(text, _countof(text) - 1, L"\r\n\t\t, 0x%02X", ptr[i]);
|
|
else if (i % 8 == 0)
|
|
swprintf_s(text, _countof(text) - 1, L", 0x%02X", ptr[i]);
|
|
else
|
|
swprintf_s(text, _countof(text) - 1, L", 0x%02X", ptr[i]);
|
|
sep += text;
|
|
}
|
|
delete[] ptr;
|
|
sep += L"\r\n\t};\r\n" + os + L"\r\n\r\n";
|
|
}
|
|
::ReleaseDC(hwnd, hdc);
|
|
|
|
::SetDlgItemTextW(m_hWnd, IDC_EDIT_STATUS, sep.c_str());
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CDlgZk, CDialogEx)
|
|
ON_EN_CHANGE(IDC_EDIT_DATA, &CDlgZk::OnEnChangeEditData)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_FONT, &CDlgZk::OnCbnSelchangeComboFont)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_SIZE, &CDlgZk::OnCbnSelchangeComboSize)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_SIZE2, &CDlgZk::OnCbnSelchangeComboSize2)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CDlgZk message handlers
|
|
|
|
|
|
void CDlgZk::OnEnChangeEditData()
|
|
{
|
|
// TODO: Èç¹û¸Ã¿Ø¼þÊÇ RICHEDIT ¿Ø¼þ£¬Ëü½«²»
|
|
// ·¢ËÍ´Ë֪ͨ£¬³ý·ÇÖØд CDialogEx::OnInitDialog()
|
|
// º¯Êý²¢µ÷Óà CRichEditCtrl().SetEventMask()£¬
|
|
// ͬʱ½« ENM_CHANGE ±êÖ¾¡°»ò¡±ÔËËãµ½ÑÚÂëÖС£
|
|
|
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
|
regen();
|
|
}
|
|
|
|
|
|
void CDlgZk::OnCbnSelchangeComboFont()
|
|
{
|
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
|
regen();
|
|
}
|
|
|
|
void CDlgZk::OnCbnSelchangeComboSize()
|
|
{
|
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
|
regen();
|
|
}
|
|
|
|
void CDlgZk::OnCbnSelchangeComboSize2()
|
|
{
|
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
|
regen();
|
|
}
|