Commit 4bb186a3 authored by 王炳鑫's avatar 王炳鑫

健康小屋第一版

Signed-off-by: 王炳鑫's avatarwangbingxin <imbald@magicare.me>
parent 2076b2fc
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "RegegitKey.h" #include "RegegitKey.h"
// CConfig 对话框 // CConfig 对话框
#pragma comment(lib, "winspool.lib")
IMPLEMENT_DYNAMIC(CConfig, CDialogEx) IMPLEMENT_DYNAMIC(CConfig, CDialogEx)
...@@ -27,21 +28,79 @@ void CConfig::DoDataExchange(CDataExchange* pDX) ...@@ -27,21 +28,79 @@ void CConfig::DoDataExchange(CDataExchange* pDX)
{ {
CDialogEx::DoDataExchange(pDX); CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, mCombo); DDX_Control(pDX, IDC_COMBO1, mCombo);
DDX_Control(pDX, IDC_COMBO2, mPrinterName);
} }
BOOL CConfig::HasPrinters()
{
DWORD Flags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL; //local printers
DWORD cbBuf;
DWORD pcReturned;
DWORD Level = 2;
TCHAR Name[500] ;
LPPRINTER_INFO_2 pPrinterEnum = NULL;
memset(Name,0,sizeof(TCHAR)*500);
::EnumPrinters(Flags, Name, Level, NULL, 0, &cbBuf, &pcReturned);
pPrinterEnum = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbBuf+4);
if (NULL == pPrinterEnum)
{
TRACE( "Error %1d/n ", GetLastError()) ;
return FALSE;
}
if (!EnumPrinters(
Flags, // DWORD Flags, printer object types
Name, // LPTSTR Name, name of printer object
Level, // DWORD Level, information level
(LPBYTE)pPrinterEnum, // LPBYTE pPrinterEnum, printer information buffer
cbBuf, // DWORD cbBuf, size of printer information buffer
&cbBuf, // LPDWORD pcbNeeded, bytes received or required
&pcReturned) // LPDWORD pcReturned number of printers enumerated
)
{
TRACE( "Error %1d/n ", GetLastError());
return FALSE;
}
LPPRINTER_INFO_2 p = pPrinterEnum;
for (int i=0; i<pcReturned;i++)
{
mPrinters.insert(std::make_pair(CString(p->pPrinterName), p));
TRACE( "PrinterName: %s\n ", p->pPrinterName);
p++;
}
if (pcReturned > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOL CConfig::OnInitDialog() BOOL CConfig::OnInitDialog()
{ {
CDialogEx::OnInitDialog(); CDialogEx::OnInitDialog();
HasPrinters();
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
mCombo.AddString(item_list[i]); mCombo.AddString(item_list[i]);
} }
for (std::map<CString, LPPRINTER_INFO_2>::iterator it = mPrinters.begin(); it != mPrinters.end(); it++)
{
mPrinterName.AddString(it->first);
}
return TRUE; return TRUE;
} }
BEGIN_MESSAGE_MAP(CConfig, CDialogEx) BEGIN_MESSAGE_MAP(CConfig, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &CConfig::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON1, &CConfig::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBO2, &CConfig::OnCbnSelchangeCombo2)
END_MESSAGE_MAP() END_MESSAGE_MAP()
// CConfig 消息处理程序 // CConfig 消息处理程序
...@@ -61,5 +120,14 @@ void CConfig::OnBnClickedButton1() ...@@ -61,5 +120,14 @@ void CConfig::OnBnClickedButton1()
} }
CRegegitKey::insert_device_type(type, get_windows_version()); CRegegitKey::insert_device_type(type, get_windows_version());
index = mPrinterName.GetCurSel();
mPrinterName.GetLBText(index, strCBText);
CRegegitKey::insert_printer_name(strCBText, get_windows_version());
CDialogEx::OnOK(); CDialogEx::OnOK();
} }
void CConfig::OnCbnSelchangeCombo2()
{
// TODO: 在此添加控件通知处理程序代码
}
#pragma once #pragma once
#include "afxwin.h" #include "afxwin.h"
#include <Winspool.h>
#include <map>
// CConfig 对话框 // CConfig 对话框
class CConfig : public CDialogEx class CConfig : public CDialogEx
...@@ -21,4 +21,9 @@ protected: ...@@ -21,4 +21,9 @@ protected:
public: public:
afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton1();
CComboBox mCombo; CComboBox mCombo;
CComboBox mPrinterName;
afx_msg void OnCbnSelchangeCombo2();
BOOL HasPrinters();
private:
std::map<CString, LPPRINTER_INFO_2> mPrinters;
}; };
B// Microsoft Visual C++ generated resource script. B// Microsoft Visual C++ generated resource script.
......
...@@ -112,11 +112,13 @@ void CHealthHutUiDlg::upload_finish() ...@@ -112,11 +112,13 @@ void CHealthHutUiDlg::upload_finish()
{ {
for (std::size_t i = 0; i < mMain.getPath().size(); i++) for (std::size_t i = 0; i < mMain.getPath().size(); i++)
{ {
print_file(mMain.getPath().at(i));
DeleteFile(mMain.getPath().at(i).GetString()); DeleteFile(mMain.getPath().at(i).GetString());
} }
mProcess->Close(); mProcess->Close();
MessageBox(_T("数据上传成功"),_T("提示"),MB_OK); MessageBox(_T("数据上传成功"),_T("提示"),MB_OK);
exit(0); exit(0);
} }
...@@ -218,8 +220,6 @@ BOOL CHealthHutUiDlg::OnInitDialog() ...@@ -218,8 +220,6 @@ BOOL CHealthHutUiDlg::OnInitDialog()
CConfig config; CConfig config;
config.DoModal(); config.DoModal();
MessageBox(_T("配置完成"),_T("欢迎使用"),MB_OK); MessageBox(_T("配置完成"),_T("欢迎使用"),MB_OK);
CDialogEx::OnOK();
return TRUE;
} }
if (0 != Login()) { if (0 != Login()) {
...@@ -375,6 +375,12 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) ...@@ -375,6 +375,12 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
MessageBox(_T("当前没有报告需要上传!"),_T("提示"),MB_OK); MessageBox(_T("当前没有报告需要上传!"),_T("提示"),MB_OK);
CDialogEx::OnOK(); CDialogEx::OnOK();
} }
if (IDCANCEL == MessageBox(_T("请确认上传的当前报告!"), _T("提示"), MB_OKCANCEL))
{
return;
}
util_upload_all(files, name, idCard); util_upload_all(files, name, idCard);
OnWmProcess(0, 0); OnWmProcess(0, 0);
} }
...@@ -383,7 +389,6 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) ...@@ -383,7 +389,6 @@ void CHealthHutUiDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
*pResult = 0; *pResult = 0;
} }
void CAboutDlg::OnBnClickedOk() void CAboutDlg::OnBnClickedOk()
{ {
CDialogEx::OnOK(); CDialogEx::OnOK();
......
...@@ -7,7 +7,6 @@ CMainApp::CMainApp(void) ...@@ -7,7 +7,6 @@ CMainApp::CMainApp(void)
{ {
} }
CMainApp::~CMainApp(void) CMainApp::~CMainApp(void)
{ {
} }
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
#include "utils.h" #include "utils.h"
#include "RegegitKey.h" #include "RegegitKey.h"
#include <windows.h> #include <windows.h>
#include <stdlib.h>
#include <stdio.h>
CRegegitKey::CRegegitKey(void) CRegegitKey::CRegegitKey(void)
{ {
} }
...@@ -20,7 +21,7 @@ void CRegegitKey::insert_exe(HKEY hKEY, windows_version version) ...@@ -20,7 +21,7 @@ void CRegegitKey::insert_exe(HKEY hKEY, windows_version version)
if (version > windows_7) if (version > windows_7)
exe_path = _T("extapp"); exe_path = _T("extapp");
else else
exe_path = _T("exe_app_name"); exe_path = _T("ext_app_name");
long ret = ::RegSetValueEx(hKEY, exe_path, 0, REG_SZ, (const BYTE *) exePath.GetString(), (exePath.GetLength() + 1) * sizeof(TCHAR)); long ret = ::RegSetValueEx(hKEY, exe_path, 0, REG_SZ, (const BYTE *) exePath.GetString(), (exePath.GetLength() + 1) * sizeof(TCHAR));
} }
...@@ -166,6 +167,21 @@ bool CRegegitKey::insert_device_type(int type, windows_version version) ...@@ -166,6 +167,21 @@ bool CRegegitKey::insert_device_type(int type, windows_version version)
return true; return true;
} }
bool CRegegitKey::insert_printer_name(CString name, windows_version version)
{
HKEY hKey;
DWORD dw;
long ret = ERROR_SUCCESS;
ret =(RegOpenKeyEx(HKEY_CURRENT_USER, APP_KEY_ROOT, 0, KEY64 | KEY_READ |KEY_WRITE, &hKey));
CString strUser(PRINTER_NAME);
ret = ::RegSetValueEx(hKey, strUser, 0, REG_SZ, (const BYTE *) name.GetString(), (name.GetLength() + 1) * sizeof(TCHAR));
RegCloseKey(hKey);
return true;
}
void CRegegitKey::insert_local_path(windows_version version) void CRegegitKey::insert_local_path(windows_version version)
{ {
HKEY hKey; HKEY hKey;
...@@ -214,6 +230,8 @@ bool CRegegitKey::check_win7() ...@@ -214,6 +230,8 @@ bool CRegegitKey::check_win7()
return false; return false;
} }
system("setup.exe");
windows_version version = get_windows_version(); windows_version version = get_windows_version();
insert_jpg(hKEY, version); insert_jpg(hKEY, version);
insert_exe(hKEY, version); insert_exe(hKEY, version);
......
...@@ -12,6 +12,7 @@ public: ...@@ -12,6 +12,7 @@ public:
static BOOL read_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength); static BOOL read_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength);
static BOOL read_app_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength); static BOOL read_app_key(LPCWSTR key, LPBYTE value, LPDWORD dataLength);
static bool insert_device_type(int type, windows_version version); static bool insert_device_type(int type, windows_version version);
static bool insert_printer_name(CString name, windows_version version);
private: private:
static bool check_win10(); static bool check_win10();
static bool check_win7(); static bool check_win7();
......
B//{{NO_DEPENDENCIES}} B//{{NO_DEPENDENCIES}}
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "json/reader.h" #include "json/reader.h"
#include "json/value.h" #include "json/value.h"
#include "SqliteUtil.h" #include "SqliteUtil.h"
#include "RegegitKey.h"
#include <WinSpool.h>
#include <stdio.h> #include <stdio.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <iostream> #include <iostream>
...@@ -19,6 +21,252 @@ CString item_list[4] = ...@@ -19,6 +21,252 @@ CString item_list[4] =
_T("糖尿病风险") _T("糖尿病风险")
}; };
static void OnPrint(CDC* pdc,CPrintInfo * lParam,CString strFileName1);
static BOOL GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode);
BOOL PrintPic(CString strFileName,int iCopies,CString strPrintName)
{
CDC dc;
CPrintDialog printDlg(FALSE);
HGLOBAL hDevMode;
HGLOBAL hDevNames;
//以下为判断纸型,m_strPrintSize为类的成员变量
short paperWidth = 2100;
short paperHeight = 2970;
printDlg.GetDefaults();
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(printDlg.m_pd.hDevMode);
pDevMode->dmFields = pDevMode->dmFields | DM_PAPERSIZE;
pDevMode->dmPaperSize = DMPAPER_USER; //将打印纸设置为自定义DMDO_90
pDevMode->dmPaperWidth = paperWidth;
pDevMode->dmPaperLength = paperHeight;
::GlobalUnlock(printDlg.m_pd.hDevMode);
CPrintInfo Info;//
if (GetPrinterDevice(strPrintName.GetBuffer(0), &hDevNames, &hDevMode))
{
printDlg.m_pd.hDevMode=hDevMode;
printDlg.m_pd.hDevNames = hDevNames;
}
dc.Attach(printDlg.CreatePrinterDC()/*这里很重要,一定要CreatePrinterDC,要不然还是打印机默认的纸型*/); // Attach a printer DC 让HANDLE连接到dc上
dc.m_bPrinting = TRUE;
CString strTitle; // Get the application title ?
strTitle.LoadString(AFX_IDS_APP_TITLE);
DOCINFO di; // Initialise print document details DOCINFO中有相关的打印信息
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = strFileName;//设置标题
for (int i=0;i<iCopies;i++)
{
BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 开始打印
// Get the printing extents and store in the m_rectDraw field of a
// CPrintInfo object
Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES));//设置范围
Info.SetMaxPage (1);
OnPrint(&dc, &Info,strFileName); // 往DC上画图片,具体实现在下面给出
//OnEndPrinting(&dc, &Info); // 结束打印
if (bPrintingOK)
dc.EndDoc(); // end a print job
else
dc.AbortDoc(); // abort job.
}
dc.Detach(); // detach the printer DC
return TRUE;
}
void OnPrint(CDC* pdc,CPrintInfo * lParam,CString strFileName1)
{
CDC* pDC = pdc;
CPrintInfo* pInfo = (CPrintInfo *)lParam;
CFont DataFont;
DataFont.CreatePointFont(120,L"宋体",pDC);
CString strFileName=strFileName1;
HBITMAP hBitmap;//创建bmp的句柄
CImage image;
image.Load(strFileName1);
hBitmap = image.Detach();
BITMAP bitmap;
::GetObject(hBitmap,sizeof(BITMAP),&bitmap);
double dScale=(double)pInfo->m_rectDraw.Width()/bitmap.bmWidth;
//int nScaledWidth=m_cxWidth;
int nScaledHeight=(int)(bitmap.bmHeight*dScale);
HDC dcMem;
dcMem=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP hOldBmp=(HBITMAP)::SelectObject(dcMem,hBitmap);
CRect r = pInfo->m_rectDraw;
//SizeToPlace(STP_FIX, r, CRect(0,0,bitmap.bmWidth, bitmap.bmHeight));//这个函数没有给出,可以自己写一下,注释掉也行,功能就是调整尺寸的
int nVertCenterPos = pDC->GetDeviceCaps (VERTRES) / 2;
::StretchBlt(pDC->m_hDC, r.left, r.top, r.Width(), r.Height(),
dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
::SelectObject(dcMem,hOldBmp);
::DeleteDC(dcMem);
::DeleteObject(hBitmap);
}
BOOL GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode)
{
if (phDevMode == NULL || phDevNames == NULL)
return FALSE;
// Open printer
HANDLE hPrinter;
if (OpenPrinter(pszPrinterName, &hPrinter, NULL) == FALSE)
return FALSE;
// obtain PRINTER_INFO_2 structure and close printer
DWORD dwBytesReturned, dwBytesNeeded;
GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded);
PRINTER_INFO_2* p2 = (PRINTER_INFO_2*)GlobalAlloc(GPTR,
dwBytesNeeded);
if (GetPrinter(hPrinter, 2, (LPBYTE)p2, dwBytesNeeded,
&dwBytesReturned) == 0) {
GlobalFree(p2);
ClosePrinter(hPrinter);
return FALSE;
}
ClosePrinter(hPrinter);
// Allocate a global handle for DEVMODE
HGLOBAL hDevMode = GlobalAlloc(GHND, sizeof(*p2->pDevMode) +
p2->pDevMode->dmDriverExtra);
ASSERT(hDevMode);
DEVMODE* pDevMode = (DEVMODE*)GlobalLock(hDevMode);
ASSERT(pDevMode);
// copy DEVMODE data from PRINTER_INFO_2::pDevMode
memcpy(pDevMode, p2->pDevMode, sizeof(*p2->pDevMode) +
p2->pDevMode->dmDriverExtra);
GlobalUnlock(hDevMode);
// Compute size of DEVNAMES structure from PRINTER_INFO_2's data
DWORD drvNameLen = lstrlen(p2->pDriverName)+1; // driver name
DWORD ptrNameLen = lstrlen(p2->pPrinterName)+1; // printer name
DWORD porNameLen = lstrlen(p2->pPortName)+1; // port name
// Allocate a global handle big enough to hold DEVNAMES.
HGLOBAL hDevNames = GlobalAlloc(GHND,
sizeof(DEVNAMES) +
(drvNameLen + ptrNameLen + porNameLen)*sizeof(TCHAR));
ASSERT(hDevNames);
DEVNAMES* pDevNames = (DEVNAMES*)GlobalLock(hDevNames);
ASSERT(pDevNames);
// Copy the DEVNAMES information from PRINTER_INFO_2
// tcOffset = TCHAR Offset into structure
int tcOffset = sizeof(DEVNAMES)/sizeof(TCHAR);
ASSERT(sizeof(DEVNAMES) == tcOffset*sizeof(TCHAR));
pDevNames->wDriverOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pDriverName,
drvNameLen*sizeof(TCHAR));
tcOffset += drvNameLen;
pDevNames->wDeviceOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPrinterName,
ptrNameLen*sizeof(TCHAR));
tcOffset += ptrNameLen;
pDevNames->wOutputOffset = tcOffset;
memcpy((LPTSTR)pDevNames + tcOffset, p2->pPortName,
porNameLen*sizeof(TCHAR));
pDevNames->wDefault = 0;
GlobalUnlock(hDevNames);
GlobalFree(p2); // free PRINTER_INFO_2
// set the new hDevMode and hDevNames
*phDevMode = hDevMode;
*phDevNames = hDevNames;
return TRUE;
}
void print_file(CString& name)
{
CString strDefualtDev = TEXT("");
PRINTDLG pd;
LPDEVMODE lpDevMode = NULL;
if(AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
strDefualtDev = lpDevMode->dmDeviceName;
}
GlobalUnlock(pd.hDevMode);
}
LPBYTE value = new BYTE[512];
DWORD dataLength = 256;
if (!CRegegitKey::read_app_key(PRINTER_NAME, value, &dataLength)) {
MessageBox(NULL, _T("读取注册表失败"),_T("错误提示"),MB_OK);
return;
}
CString printer;
LpbyteToCString(value, printer, dataLength);
PrintPic(name, 1, printer);
::SetDefaultPrinter(strDefualtDev);
#if 0
::SetDefaultPrinter(printer);
if (AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmPaperSize=DMPAPER_A4; // 设定打印纸张幅面
lpDevMode->dmOrientation=DMORIENT_LANDSCAPE; // 设定横向打印
lpDevMode->dmPrintQuality=600; // 设定打印机分辨率
}
GlobalUnlock(pd.hDevMode);
}
CImage image;
DOCINFO di;
memset( &di, 0, sizeof(DOCINFO) );
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = name.GetString(); // 设定打印文档名称
di.lpszOutput = (LPTSTR) NULL;
di.fwType = 0;
int nError;
HDC hdc = ::CreateDC(NULL, printer.GetString(), NULL, lpDevMode); // 得到打印机设备句柄
if(hdc != NULL)
{
image.Load(name);
image.Draw(hdc, 0, 0);
if((nError = StartDoc(hdc, &di)) > 0)
{
if(StartPage(hdc)>0)
{
int xPage = ::GetDeviceCaps(hdc, HORZRES); // 得到可打印纸张的高度
int yPage = ::GetDeviceCaps(hdc, VERTRES); // 得到可打印纸张的宽度
// 在一下地方进行打印输出
if(EndPage(hdc)>0) // 只有结束页成功了才可以关闭文档
EndDoc(hdc); // 关闭打印文档
}
}
}
#endif
}
void set_hwnd(HWND handle) void set_hwnd(HWND handle)
{ {
mHandle = handle; mHandle = handle;
...@@ -372,10 +620,20 @@ bool util_upload(CString& name, CString id, CString& path) ...@@ -372,10 +620,20 @@ bool util_upload(CString& name, CString id, CString& path)
CURLFORM_COPYCONTENTS, id_str.c_str(), CURLFORM_COPYCONTENTS, id_str.c_str(),
CURLFORM_END); CURLFORM_END);
LPBYTE value = new BYTE[512];
DWORD dataLength = 256;
if (!CRegegitKey::read_app_key(DEVICE_TYPE, value, &dataLength)) {
MessageBox(NULL, _T("读取注册表失败"),_T("错误提示"),MB_OK);
return false;
}
CString tt;
LpbyteToCString(value, tt, dataLength);
curl_formadd(&post, curl_formadd(&post,
&last, &last,
CURLFORM_COPYNAME, "type", CURLFORM_COPYNAME, "type",
CURLFORM_COPYCONTENTS, "1", CURLFORM_COPYCONTENTS, tt.GetString(),
CURLFORM_END); CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
...@@ -390,5 +648,6 @@ bool util_upload(CString& name, CString id, CString& path) ...@@ -390,5 +648,6 @@ bool util_upload(CString& name, CString id, CString& path)
check_result(code); check_result(code);
::PostMessage(mHandle, ON_WM_FILE_FINISH, 0, 0); ::PostMessage(mHandle, ON_WM_FILE_FINISH, 0, 0);
return true; return true;
} }
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#define APP_KEY_ROOT TEXT("Software\\HealthHut") #define APP_KEY_ROOT TEXT("Software\\HealthHut")
#define APP_PATH _T("exepath") #define APP_PATH _T("exepath")
#define DEVICE_TYPE _T("devicetype") #define DEVICE_TYPE _T("devicetype")
#define PRINTER_NAME _T("printername")
#ifdef DDD #ifdef DDD
#define KEY_ROOT HKEY_LOCAL_MACHINE #define KEY_ROOT HKEY_LOCAL_MACHINE
...@@ -54,6 +55,7 @@ extern bool util_upload(CString& name, CString id, CString& path); ...@@ -54,6 +55,7 @@ extern bool util_upload(CString& name, CString id, CString& path);
extern bool util_upload_all(CFileList::file_array& file_list, CString& name, CString& id); extern bool util_upload_all(CFileList::file_array& file_list, CString& name, CString& id);
extern void set_hwnd(HWND handle); extern void set_hwnd(HWND handle);
extern windows_version get_windows_version(); extern windows_version get_windows_version();
extern void print_file(CString& name);
/*************** end *********/ /*************** end *********/
......
BDefaultBuild-zh?part1?0 BDefaultBuild-zh?part1?0
B[<ArchiveFlags>] B[<ArchiveFlags>]
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment