doc_and_tools/tools/apps/hgjson/DlgZk.cpp

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();
}