1、materialDlg.h文件
// MateriaManagementDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
#include <vector>
#include "sqlite3.h"
#include "afxwin.h"
#include "afxshelltreectrl.h"
#include "afxshelllistctrl.h"
#include <vector>
// CMateriaManagementDlg 对话框
class CMateriaManagementDlg : public CDialogEx
{
// 构造
public:
CMateriaManagementDlg(CWnd* pParent = NULL); // 标准构造函数
struct sqlSelect
{
CString proid;
CString imagePosition;
};
public:
std::vector<sqlSelect> selVec;
CString treeSel;
CString fullPath;
// 对话框数据
enum { IDD = IDD_MATERIAMANAGEMENT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CTreeCtrl m_webTree;
CImageList m_imageList;
afx_msg void OnTvnSelchangedWebTree(NMHDR *pNMHDR, LRESULT *pResult);
//std::wstring Utf82Unicode(const std::string& utf8string);
char* U2G(const char* utf8);
char* G2U(const char* gb2312);
afx_msg void OnStnClickedStaticPng();
afx_msg void OnStnClickedStaticPng1();
afx_msg void OnStnClickedStaticMaterialText1();
afx_msg void OnStnClickedStaticMaterialText8();
void OnShowProPreviewImage(const CString strImagePath);
void OnDrawBackGroundColor(CWnd *pWnd);
void CMateriaManagementDlg::showProducts();
afx_msg void OnBnClickedButton1();
void showLeaveProducts();
void clearPciture(int clearNum);
afx_msg void OnBnClickedButton2();
void deleteMaterial(CString &id);
void deletedLoad();
afx_msg void OnBnClickedButton3();
afx_msg void OnBnClickedButton4();
afx_msg void OnBnClickedButton5();
afx_msg void OnBnClickedButton6();
afx_msg void OnBnClickedButton7();
afx_msg void OnBnClickedButton8();
afx_msg void OnBnClickedButton9();
afx_msg void OnBnClickedButton10();
afx_msg void OnStnClickedStaticMaterialText3();
afx_msg void OnEnChangeItemSelEdit();
sqlite3* ConnectDatabase(const char* path); //返回数据库链接指针
afx_msg void OnBnClickedButton11();
afx_msg void OnCbnSelchangeCombo1();
CComboBox m_prostyle;
afx_msg void OnBnClickedButton12();
afx_msg void OnEnChangeProId();
afx_msg void OnEnChangeProName();
afx_msg void OnEnChangeEdit3();
afx_msg void OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult);
CMFCShellTreeCtrl m_tree;
afx_msg void OnEnChangeEditObj();
afx_msg void OnEnChangeEdit2();
afx_msg void OnCbnSelchangeCombo2();
CComboBox m_comboWeb;
afx_msg void OnLvnItemchangedMfcshelllist1(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnEnChangeEdit1();
std::vector<const std::string> RecureDir(const std::string &full_path);
afx_msg void OnEnChangeCompanyCode();
afx_msg void OnEnChangeCopyStatus();
CString SelectTable(const std::string &selMaxID);
std::string Convert(CString & select);
void InsertMatrialInfo();
bool DirDelete(CString &directory);
CString Query(const std::string &selMaxID);
/*表ProductInfo**************************************************************************************************/
CString m_proid; //已赋值
CString m_proname; //已赋值
CString m_pronodeid; //已赋值
CString m_prenodeid; //已赋值
CString m_nodelayerid; //已赋值
CString m_procorlor; //已赋值
CString m_material; //已赋值
CString m_style; //已赋值
CString m_proremark; //已赋值
CString m_proprice; //已赋值
CString m_pronumber; //已赋值
CString m_prolinkurl; //已赋值
CString m_proseller; //已赋值
CString m_topimageview; //已赋值
CString m_preimageview; //已赋值
CString m_prozippath; //已赋值
CString m_proobjpath; //已赋值
CString m_proisdeleted; //已赋值
CString m_proupdatetime; //已赋值
/*表MaterialInfo**************************************************************************************************/
CString m_materialid; //已赋值
CString m_materialname; //已赋值
CString m_materialnodeid; //已赋值
CString m_materialstyle; //已赋值
CString m_materialimagepath; //已赋值
CString m_materialdeleted; //已赋值
CString m_updatetime; //已赋值
CString m_materialsizex; //已赋值
CString m_materialsizey; //已赋值
CString m_materialprice; //已赋值
afx_msg void OnEnChangeInsertStatus();
};
2、materialDlg.cpp实现文件
// MateriaManagementDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "MateriaManagement.h"
#include "MateriaManagementDlg.h"
#include "afxdialogex.h"
#include "sqlite3.h"
#include <iostream>
#include <vector>
#include "SQLiteHelper.h"
#include <algorithm>
#include <iostream>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <boost/filesystem.hpp>
#include <boost/lexical_cast.hpp>
#include <Shlwapi.h>
#pragma comment(lib,"Shlwapi.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
char* AnsiToUTF_8(WCHAR szStr[])
{
// WCHAR szStr[] = _T("中国");
int u8Len = WideCharToMultiByte(CP_UTF8, NULL, szStr, wcslen(szStr), NULL, 0, NULL, NULL);
char * szU8 = new char[u8Len + 1];
WideCharToMultiByte(CP_UTF8, NULL, szStr, wcslen(szStr), szU8, u8Len, NULL, NULL);
szU8[u8Len] = '\0';
printf(szU8);
return szU8;
}
wchar_t* CharToWchar(const char* c)
{
wchar_t* m_wchar = NULL;
int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
m_wchar[len] = '\0';
return m_wchar;
}
wchar_t* StringTWchar(const std::string& s)
{
const char* p = s.c_str();
return CharToWchar(p);
}
CString utilDataDir(CString sub_path)
{
WCHAR pFileName[1024];
GetModuleFileName(NULL, pFileName, 1024);
//housedesign/bin/debug/housedesign.exe
CString fullPath(pFileName);
// housedesign/bin/release
int p0 = fullPath.ReverseFind('\\');
int p1 = fullPath.ReverseFind('\/');
int p = (std::max)(p0, p1);
fullPath = fullPath.Mid(0, p);
// housedesign/bin
p0 = fullPath.ReverseFind('\\');
p1 = fullPath.ReverseFind('\/');
p = (std::max)(p0, p1);
fullPath = fullPath.Mid(0, p);
// housedesign
p0 = fullPath.ReverseFind('\\');
p1 = fullPath.ReverseFind('\/');
p = (std::max)(p0, p1);
fullPath = fullPath.Mid(0, p);
// housedesign/data/
fullPath = fullPath + CString("\\MateriaManagement\\MateriaManagement\\data\\");
// housedesign/data/sub_path
fullPath = fullPath + sub_path;
return fullPath;
}
CString utilDataBaseDir(CString database_path_name)
{
return utilDataDir(CString(_T("database\\")) + database_path_name);
}
//Unicode 转 Utf8
char* Unicode2Utf8(const std::wstring& widestring)
{
int utf8size = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, NULL, 0, NULL, NULL);
if (utf8size == 0)
{
throw std::exception("Error in conversion.");
}
//std::vector<char> resultstring(utf8size);
char *szUtf8 = new char[utf8size + 1];
memset(szUtf8, 0, utf8size + 1);
int convresult = ::WideCharToMultiByte(CP_UTF8, 0, widestring.c_str(), -1, szUtf8/*&resultstring[0]*/, utf8size, NULL, NULL);
if (convresult != utf8size)
{
throw std::exception("La falla!");
}
szUtf8[utf8size] = '\0';
//return std::string(szUtf8/*&resultstring[0]*/);
return szUtf8;
}
CString utilProductDir(CString product_path_name)
{
return utilDataDir(CString(_T("products\\")) + product_path_name);
}
/*******************************************************以上都是加的函数********************************/
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMateriaManagementDlg 对话框
CMateriaManagementDlg::CMateriaManagementDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMateriaManagementDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMateriaManagementDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_WEB_TREE, m_webTree);
DDX_Control(pDX, IDC_COMBO1, m_prostyle);
DDX_Control(pDX, IDC_MFCSHELLTREE1, m_tree);
DDX_Control(pDX, IDC_COMBO2, m_comboWeb);
}
BEGIN_MESSAGE_MAP(CMateriaManagementDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(TVN_SELCHANGED, IDC_WEB_TREE, &CMateriaManagementDlg::OnTvnSelchangedWebTree)
// ON_STN_CLICKED(IDC_STATIC_PNG, &CMateriaManagementDlg::OnStnClickedStaticPng)
ON_STN_CLICKED(IDC_STATIC_PNG1, &CMateriaManagementDlg::OnStnClickedStaticPng1)
ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT1, &CMateriaManagementDlg::OnStnClickedStaticMaterialText1)
ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT8, &CMateriaManagementDlg::OnStnClickedStaticMaterialText8)
ON_BN_CLICKED(IDC_BUTTON1, &CMateriaManagementDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CMateriaManagementDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CMateriaManagementDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMateriaManagementDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMateriaManagementDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CMateriaManagementDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMateriaManagementDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMateriaManagementDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CMateriaManagementDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMateriaManagementDlg::OnBnClickedButton10)
ON_STN_CLICKED(IDC_STATIC_MATERIAL_TEXT3, &CMateriaManagementDlg::OnStnClickedStaticMaterialText3)
ON_EN_CHANGE(IDC_ITEM_SEL_EDIT, &CMateriaManagementDlg::OnEnChangeItemSelEdit)
ON_BN_CLICKED(IDC_BUTTON11, &CMateriaManagementDlg::OnBnClickedButton11)
ON_CBN_SELCHANGE(IDC_COMBO1, &CMateriaManagementDlg::OnCbnSelchangeCombo1)
ON_BN_CLICKED(IDC_BUTTON12, &CMateriaManagementDlg::OnBnClickedButton12)
ON_EN_CHANGE(IDC_PRO_NAME, &CMateriaManagementDlg::OnEnChangeProName)
ON_EN_CHANGE(IDC_EDIT3, &CMateriaManagementDlg::OnEnChangeEdit3)
ON_NOTIFY(TVN_SELCHANGED, IDC_MFCSHELLTREE1, &CMateriaManagementDlg::OnTvnSelchangedMfcshelltree1)
ON_EN_CHANGE(IDC_EDIT_OBJ, &CMateriaManagementDlg::OnEnChangeEditObj)
ON_EN_CHANGE(IDC_EDIT2, &CMateriaManagementDlg::OnEnChangeEdit2)
ON_CBN_SELCHANGE(IDC_COMBO2, &CMateriaManagementDlg::OnCbnSelchangeCombo2)
ON_EN_CHANGE(IDC_EDIT1, &CMateriaManagementDlg::OnEnChangeEdit1)
ON_EN_CHANGE(IDC_COMPANY_CODE, &CMateriaManagementDlg::OnEnChangeCompanyCode)
ON_EN_CHANGE(IDC_COPY_STATUS, &CMateriaManagementDlg::OnEnChangeCopyStatus)
ON_EN_CHANGE(IDC_INSERT_STATUS, &CMateriaManagementDlg::OnEnChangeInsertStatus)
END_MESSAGE_MAP()
// CMateriaManagementDlg 消息处理程序
BOOL CMateriaManagementDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
ShowWindow(SW_MINIMIZE);
// TODO: 在此添加额外的初始化代码
m_tree.SetFlags((SHCONTF)(SHCONTF_FOLDERS | SHCONTF_NONFOLDERS)); //mfc shelltree control显示所有形式的文件
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
/**************/
HICON hIcon[4]; // 图标句柄数组
HTREEITEM hRoot; // 树的根节点的句柄
HTREEITEM hBigItem; // 可表示任一分类节点的句柄
HTREEITEM hMiddle; // 可表示任一文章节点的句柄
HTREEITEM hSmallItem; // 可表示任一文章节点的句柄
// 加载三个图标,并将它们的句柄保存到数组
hIcon[0] = theApp.LoadIcon(IDI_WEB_ICON);
hIcon[1] = theApp.LoadIcon(IDI_CATALOG_ICON);
hIcon[2] = theApp.LoadIcon(IDI_ARTICLE_ICON);
hIcon[3] = theApp.LoadIcon(IDI_ICON1);
// 创建图像序列CImageList对象
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
// 将三个图标添加到图像序列
for (int i = 0; i<4; i++)
{
m_imageList.Add(hIcon[i]);
}
// 为树形控件设置图像序列
m_webTree.SetImageList(&m_imageList, TVSIL_NORMAL);
// 插入根节点
hRoot = m_webTree.InsertItem(_T("小瓦匠产品库"), 0, 0);
// 在根节点下插入子节点
hBigItem = m_webTree.InsertItem(_T("卧房家具"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 1);
hMiddle = m_webTree.InsertItem(_T("床组合"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 2);
hSmallItem = m_webTree.InsertItem(_T("组合床"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 3);
hSmallItem = m_webTree.InsertItem(_T("床头柜"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 4);
hMiddle = m_webTree.InsertItem(_T("电视柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 5);
hMiddle = m_webTree.InsertItem(_T("衣柜组合"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 6);
hSmallItem = m_webTree.InsertItem(_T("趟门衣柜"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 7);
hSmallItem = m_webTree.InsertItem(_T("掩门衣柜"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 8);
hMiddle = m_webTree.InsertItem(_T("妆台组合"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 9);
hMiddle = m_webTree.InsertItem(_T("其他组合"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 10);
// 在根节点下插入第二个子节点
hBigItem = m_webTree.InsertItem(_T("客餐厅家具"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 11);
hMiddle = m_webTree.InsertItem(_T("沙发"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 12);
hSmallItem = m_webTree.InsertItem(_T("组合沙发"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 13);
hSmallItem = m_webTree.InsertItem(_T("简易沙发"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 14);
hSmallItem = m_webTree.InsertItem(_T("靠垫"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 15);
hSmallItem = m_webTree.InsertItem(_T("茶几"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 16);
hMiddle = m_webTree.InsertItem(_T("电视柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 17);
hMiddle = m_webTree.InsertItem(_T("隔断"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 18);
hMiddle = m_webTree.InsertItem(_T("餐桌"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 19);
hMiddle = m_webTree.InsertItem(_T("餐边柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 20);
hMiddle = m_webTree.InsertItem(_T("客餐厅其他"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 21);
hMiddle = m_webTree.InsertItem(_T("酒柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 22);
hMiddle = m_webTree.InsertItem(_T("茶几"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 23);
hMiddle = m_webTree.InsertItem(_T("椅子"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 24);
hMiddle = m_webTree.InsertItem(_T("餐椅"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 25);
hMiddle = m_webTree.InsertItem(_T("凳子"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 26);
hMiddle = m_webTree.InsertItem(_T("壁炉"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 27);
hMiddle = m_webTree.InsertItem(_T("鞋柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 28);
hBigItem = m_webTree.InsertItem(_T("书房家具"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 29);
hMiddle = m_webTree.InsertItem(_T("书房组合"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 30);
hMiddle = m_webTree.InsertItem(_T("书柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 31);
hMiddle = m_webTree.InsertItem(_T("书桌"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 32);
hBigItem = m_webTree.InsertItem(_T("小孩房家具"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 33);
hMiddle = m_webTree.InsertItem(_T("儿童床头"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 34);
hMiddle = m_webTree.InsertItem(_T("儿童书桌"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 35);
hMiddle = m_webTree.InsertItem(_T("儿童衣柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 36);
hBigItem = m_webTree.InsertItem(_T("厨房"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 37);
hMiddle = m_webTree.InsertItem(_T("橱柜"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 38);
hMiddle = m_webTree.InsertItem(_T("水池"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 39);
hMiddle = m_webTree.InsertItem(_T("厨房小件"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 40);
hBigItem = m_webTree.InsertItem(_T("卫生间"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 41);
hMiddle = m_webTree.InsertItem(_T("淋浴房"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 42);
hMiddle = m_webTree.InsertItem(_T("马桶"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 43);
hMiddle = m_webTree.InsertItem(_T("洗漱池"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 44);
hMiddle = m_webTree.InsertItem(_T("浴缸"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 45);
hMiddle = m_webTree.InsertItem(_T("拖把池"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 46);
hMiddle = m_webTree.InsertItem(_T("浴巾架"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 47);
hBigItem = m_webTree.InsertItem(_T("装饰物"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 48);
hMiddle = m_webTree.InsertItem(_T("装饰品"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 49);
hMiddle = m_webTree.InsertItem(_T("衣物"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 50);
hMiddle = m_webTree.InsertItem(_T("灯具"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 51);
hSmallItem = m_webTree.InsertItem(_T("台灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 52);
hSmallItem = m_webTree.InsertItem(_T("吊灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 53);
hSmallItem = m_webTree.InsertItem(_T("壁灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 54);
hSmallItem = m_webTree.InsertItem(_T("筒灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 55);
hSmallItem = m_webTree.InsertItem(_T("吸顶灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 56);
hSmallItem = m_webTree.InsertItem(_T("厨房吊灯"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 57);
hSmallItem = m_webTree.InsertItem(_T("其他"), 3, 3, hMiddle, TVI_LAST);
m_webTree.SetItemData(hSmallItem, 58);
hMiddle = m_webTree.InsertItem(_T("书籍"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 59);
hMiddle = m_webTree.InsertItem(_T("地毯"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 60);
hMiddle = m_webTree.InsertItem(_T("电器"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 61);
hBigItem = m_webTree.InsertItem(_T("其他"), 1, 1, hRoot, TVI_LAST);
m_webTree.SetItemData(hBigItem, 62);
hMiddle = m_webTree.InsertItem(_T("吊顶"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 63);
hMiddle = m_webTree.InsertItem(_T("壁画"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 64);
hMiddle = m_webTree.InsertItem(_T("背景墙"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 65);
hMiddle = m_webTree.InsertItem(_T("窗帘"), 2, 2, hBigItem, TVI_LAST);
m_webTree.SetItemData(hMiddle, 65);
/********************/
m_prostyle.AddString(_T("欧式"));
m_prostyle.AddString(_T("现代简约"));
m_prostyle.AddString(_T("田园"));
m_prostyle.AddString(_T("美式"));
m_prostyle.AddString(_T("其他"));
m_prostyle.InsertString(1, _T("中式"));
m_prostyle.SetCurSel(0);
SetDlgItemText(IDC_EDIT_PRO_STYLE, _T("pro_style"));
m_proremark = "不详";
m_nodelayerid = "null";
m_procorlor = "不详";
m_material = "";
m_prolinkurl = "";
m_proseller = "";
m_proisdeleted = "0";
m_proupdatetime = "";
//time_t t = time(0);
//char tmp[64];
//strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
//m_proupdatetime = tmp;
m_pronodeid = "null";
m_prenodeid = "null"; //HouseDesign搜索分类的标志
m_prozippath = "null";
/***********************/
m_comboWeb.AddString(_T("床组合"));
m_comboWeb.AddString(_T("床"));
m_comboWeb.AddString(_T("床头柜"));
m_comboWeb.AddString(_T("衣柜"));
m_comboWeb.AddString(_T("整体衣柜"));
m_comboWeb.AddString(_T("电视柜"));
m_comboWeb.AddString(_T("其他"));
m_comboWeb.AddString(_T("沙发"));
m_comboWeb.AddString(_T("组合沙发"));
m_comboWeb.AddString(_T("简易沙发"));
m_comboWeb.AddString(_T("茶几"));
m_comboWeb.AddString(_T("隔断"));
m_comboWeb.AddString(_T("鞋柜"));
m_comboWeb.AddString(_T("客厅其他"));
m_comboWeb.AddString(_T("餐桌"));
m_comboWeb.AddString(_T("餐椅"));
m_comboWeb.AddString(_T("酒柜"));
m_comboWeb.AddString(_T("书柜"));
m_comboWeb.AddString(_T("书桌"));
m_comboWeb.AddString(_T("椅子"));
m_comboWeb.AddString(_T("橱柜"));
m_comboWeb.AddString(_T("小件"));
m_comboWeb.AddString(_T("沐浴房"));
m_comboWeb.AddString(_T("浴缸"));
m_comboWeb.AddString(_T("马桶"));
m_comboWeb.AddString(_T("洗漱池"));
m_comboWeb.AddString(_T("卫生间其他"));
m_comboWeb.AddString(_T("吊灯"));
m_comboWeb.AddString(_T("吸顶灯"));
m_comboWeb.AddString(_T("台灯"));
m_comboWeb.AddString(_T("壁灯"));
m_comboWeb.AddString(_T("筒灯"));
m_comboWeb.AddString(_T("灯具其他"));
m_comboWeb.AddString(_T("吊顶"));
m_comboWeb.AddString(_T("壁画"));
m_comboWeb.AddString(_T("背景墙"));
m_comboWeb.AddString(_T("窗帘"));
m_comboWeb.AddString(_T("地毯"));
m_comboWeb.AddString(_T("装饰品"));
// 默认选择第一项
m_comboWeb.SetCurSel(0);
/*********************素材管理模块*/
m_materialstyle = "";
m_materialdeleted = "0";
m_materialsizex = "800";
m_materialsizey = "800";
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMateriaManagementDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
void CMateriaManagementDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMateriaManagementDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
char* CMateriaManagementDlg::U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
char* CMateriaManagementDlg::G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
void CMateriaManagementDlg::OnTvnSelchangedWebTree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
treeSel; // 树节点的标签文本字符串 \
// 获取当前选中节点的句柄
HTREEITEM hItem = m_webTree.GetSelectedItem();
// 获取选中节点的标签文本字符串
treeSel = m_webTree.GetItemText(hItem);
// 将字符串显示到编辑框中
SetDlgItemText(IDC_ITEM_SEL_EDIT, treeSel);
// SetDlgItemText(IDC_PRO_NAME, treeSel);
sqlite3 *db;
int result;
char **dbResult;
int nRow, nColumn;
std::string rtnSql;
char *errmsg = NULL;
int index;
int i, j;
const char *tail = NULL;
char* csql = NULL;
USES_CONVERSION;
CString cselect = _T("select pro_id ,preview_image_path from ProductInfo where pro_name like '") + treeSel + _T("%' order by pro_id");
csql = W2A(cselect);
char *ll = G2U(csql);
std::string strsql = ll;
std::string value;
sqlSelect sqlselect;
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
const char* path = Unicode2Utf8(unic_DataBasePath);
db = ConnectDatabase(path);
if (db != NULL);
{
int counter = 0;
selVec.clear();
result = sqlite3_get_table(db, strsql.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
if (SQLITE_OK == result)
{
index = nColumn;
for (i = 0; i < nRow; i++)
{
for (j = 0; j < nColumn; j++)
{
if (counter % 2 == 0)
{
sqlselect.proid = (CString)dbResult[index];
}
else if (counter % 2 != 0)
{
sqlselect.imagePosition = (CString)dbResult[index];
}
counter++;
++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
if (sqlselect.imagePosition.GetLength()>20)
{
int n = sqlselect.imagePosition.Find(_T("/"));
int n_length = sqlselect.imagePosition.Delete(0, n + 1);
CString temp = sqlselect.imagePosition.Right(n_length);
CString image_path = utilProductDir(_T("File\\") + temp);
USES_CONVERSION;
std::string path(W2A(image_path));
if (_access(path.c_str(), 0) == -1)
std::cout << "Path is not exist." << std::endl;
else
selVec.push_back(sqlselect);
}
}
if (nRow < 9)
{
showProducts();
clearPciture(nRow);
}
else
showProducts();
sqlite3_free_table(dbResult);
//关闭数据库
sqlite3_close(db);
}
}
}
void CMateriaManagementDlg::OnStnClickedStaticPng1()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnStnClickedStaticMaterialText1()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnStnClickedStaticMaterialText8()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnDrawBackGroundColor(CWnd *pWnd)
{
CRect rect;
if (!pWnd)
return;
pWnd->GetClientRect(&rect);//rect为控件的大小。
CDC *pDc = NULL;
pDc = pWnd->GetDC();//获取picture的DC
//设置变量,当再次点击读入图片的时候,执行并将框格内用背景颜色刷一遍,达到隐藏的目的。
CRect rect1(rect.left + 1, rect.top + 1, rect.Width() - 2, rect.Height() - 2);
DWORD dw = GetSysColor(COLOR_BTNFACE);
CBrush br(dw);
pDc->FillRect(rect1, &br);
::SetStretchBltMode(pDc->m_hDC, HALFTONE);
::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
ReleaseDC(pDc);
}
void CMateriaManagementDlg::OnShowProPreviewImage(const CString strImagePath)
{
int pro_index=0;
if (strImagePath.IsEmpty())
return;
CImage image;
_TCHAR module_file_name[FILENAME_MAX];
GetModuleFileName(NULL, module_file_name, FILENAME_MAX);
CString file_path = utilProductDir(strImagePath);/*module_file_name*/;
/*file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
file_path = file_path.Left(file_path.ReverseFind(_T('\\')));
file_path += strImagePath;*/
CFileFind file_find;
if (!file_find.FindFile(file_path))
return;
//image.Load(file_path);
if (!SUCCEEDED(image.Load(file_path))) return;
CRect rect;
CWnd *pWnd;
CDC *pDc = NULL;
}
void CMateriaManagementDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// int counter = 1;
int yusu = 8 % 9;
int length = selVec.size();
std::vector<sqlSelect>::iterator iter;
if (length <= 9)
{
showLeaveProducts();
clearPciture(length);
}
else if (length > 9)
{
for (int i = 0; i < 9;i++)
{
selVec.erase(selVec.begin());
}
if (selVec.size() < 9)
{
clearPciture(selVec.size());
}
showProducts();
}
CWnd *pWnd;
pWnd = GetDlgItem(IDC_STATIC_PNG1);
}
void CMateriaManagementDlg::showProducts()
{
CImage myImage;
CRect rect;
int itemID;
CWnd *pWnd;
CDC *pDc = NULL;
int veclength = selVec.size();
int flag = 0;
int i;
for (i = 0; i < veclength; i++)
{
int n = selVec[i].imagePosition.Find(_T("/"));
int n_length = selVec[i].imagePosition.Delete(0, n + 1);
CString temp = selVec[i].imagePosition.Right(n_length);
CString image_path = utilProductDir(_T("File\\") + temp);
//if (!SUCCEEDED(myImage.Load(image_path)))
// return;
if (!myImage.IsNull())//判断图象是否为空,如果不为空则先释放掉
myImage.Destroy();
myImage.Load(image_path);
switch (i)
{
case 0:
itemID = IDC_STATIC_PNG1;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
//p = (CStatic *)GetDlgItem(IDC_STATIC_PNG1);
设置静态控件窗口风格为位图居中显示
//p->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
将图片设置到Picture控件上
//p->SetBitmap(myImage)
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T("ID:")+selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
// m_cStaticProPic1.SetBitmap(image);
break;
case 1:
itemID = IDC_STATIC_PNG2;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
::SetStretchBltMode(pDc->m_hDC, HALFTONE);
::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 2:
itemID = IDC_STATIC_PNG3;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 3:
itemID = IDC_STATIC_PNG4;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 4:
itemID = IDC_STATIC_PNG5;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 5:
itemID = IDC_STATIC_PNG6;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 6:
itemID = IDC_STATIC_PNG7;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 7:
itemID = IDC_STATIC_PNG8;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 8:
itemID = IDC_STATIC_PNG9;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
default:
break;
}
}
}
void CMateriaManagementDlg::showLeaveProducts()
{
CImage myImage;
CRect rect;
int itemID;
CWnd *pWnd;
CDC *pDc = NULL;
int veclength = selVec.size();
int flag = 0;
int i;
for (i = 0; i < veclength; i++)
{
int n = selVec[i].imagePosition.Find(_T("/"));
int n_length = selVec[i].imagePosition.Delete(0, n + 1);
CString temp = selVec[i].imagePosition.Right(n_length);
CString image_path = utilProductDir(_T("File\\") + temp);
//if (!SUCCEEDED(myImage.Load(image_path)))
// return;
if (!myImage.IsNull())//判断图象是否为空,如果不为空则先释放掉
myImage.Destroy();
myImage.Load(image_path);
switch (i)
{
case 0:
itemID = IDC_STATIC_PNG1;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
// m_cStaticProPic1.SetBitmap(image);
break;
case 1:
itemID = IDC_STATIC_PNG2;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
::SetStretchBltMode(pDc->m_hDC, HALFTONE);
::SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 2:
itemID = IDC_STATIC_PNG3;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 3:
itemID = IDC_STATIC_PNG4;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 4:
itemID = IDC_STATIC_PNG5;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 5:
itemID = IDC_STATIC_PNG6;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 6:
itemID = IDC_STATIC_PNG7;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 7:
itemID = IDC_STATIC_PNG8;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
case 8:
itemID = IDC_STATIC_PNG9;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
pWnd->GetClientRect(&rect);//rect为控件的大小。
pDc = pWnd->GetDC();//获取picture的DC
myImage.Draw(pDc->m_hDC, rect);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T("ID:") + selVec[i].proid);
ReleaseDC(pDc);
myImage.Destroy();
break;
default:
break;
}
}
}
void CMateriaManagementDlg::clearPciture(int clearNum)
{
int itemID;
CWnd *pWnd;
for (int i = 0; i <= 9-clearNum; i++)
{
switch (9 - i)
{
case 0:
itemID = IDC_STATIC_PNG1;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT1, _T(" "));
break;
case 1:
itemID = IDC_STATIC_PNG2;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT2, _T(" "));
break;
case 2:
itemID = IDC_STATIC_PNG3;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT3, _T(" "));
break;
case 3:
itemID = IDC_STATIC_PNG4;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT4, _T(" "));
break;
case 4:
itemID = IDC_STATIC_PNG5;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT5, _T(" "));
break;
case 5:
itemID = IDC_STATIC_PNG6;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT6, _T(" "));
break;
case 6:
itemID = IDC_STATIC_PNG7;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT7, _T(" ") );
break;
case 7:
itemID = IDC_STATIC_PNG8;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT8, _T(" "));
break;
case 8:
itemID = IDC_STATIC_PNG9;
pWnd = GetDlgItem(itemID);//IDC_STATIC_SHOW_PIC为控件ID
if (!pWnd)
return;
OnDrawBackGroundColor(pWnd);
SetDlgItemText(IDC_STATIC_MATERIAL_TEXT9, _T(" "));
break;
default:
break;
}
}
}
void CMateriaManagementDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT1)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
if (DirDelete(str)==true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT2)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT3)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT4)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT5)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT6)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT7)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT8)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
}
void CMateriaManagementDlg::OnBnClickedButton10()
{
CString str;
GetDlgItem(IDC_STATIC_MATERIAL_TEXT9)->GetWindowText(str);
int n = str.Find(_T(":"));
int n_length = str.Delete(0, n + 1);
CString id = str.Right(n_length);
deleteMaterial(str);
deleteMaterial(str);
if (DirDelete(str) == true)
AfxMessageBox(_T("删除成功!"));
else
AfxMessageBox(_T("删除失败!"));
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::deleteMaterial(CString &id)
{
sqlite3 *db;
int result;
char *errmsg = NULL;
CString deleteSql = _T("delete from ProductInfo where pro_id=") + id;
std::wstring wsdeleteSql = deleteSql.GetString();
char* sql = Unicode2Utf8(wsdeleteSql);
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
const char* path = Unicode2Utf8(unic_DataBasePath);
db = ConnectDatabase(path);
if (db != NULL)
{
result = sqlite3_exec(db, sql, 0, 0, &errmsg);
deletedLoad();
}
sqlite3_close(db);
}
void CMateriaManagementDlg::deletedLoad()
{
selVec.clear(); //清空vec里面的内容重新加载
int rc;
sqlite3 *db;
int result;
char **dbResult;
int nRow, nColumn;
std::string rtnSql;
char *errmsg = NULL;
int index;
int i, j;
const char *tail = NULL;
char* csql = NULL;
USES_CONVERSION;
CString cselect = _T("select pro_id ,preview_image_path from ProductInfo where pro_name like '") + treeSel + _T("%' order by pro_id");
/*) + strText + _T("%' order by preview_image_path");*/
csql = W2A(cselect);
char *ll = G2U(csql);
std::string strsql = ll;
std::string value;
sqlSelect sqlselect;
// std::string select = W2CA((LPCWSTR)strText);
// std::string select = (std::string)strText;
// std::string sql = "select * from ProductInfo where pro_name like 'a%'"; //"select * from ProductInfo where pro_name like '茶几%' order by preview_image_path";
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
char* path = Unicode2Utf8(unic_DataBasePath);
// const char* path = "D://Project//HouseDesign//data//database//HouseDesignDB.db";
rc = sqlite3_open(path, &db);
int counter = 0;
selVec.clear();
if (rc == SQLITE_OK)
{
// result = sqlite3_exec(db, csql, 0, 0, 0);
result = sqlite3_get_table(db, strsql.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
if (SQLITE_OK == result)
{
index = nColumn;
for (i = 0; i < nRow; i++)
{
for (j = 0; j < nColumn; j++)
{
if (counter % 2 == 0)
{
sqlselect.proid = (CString)dbResult[index];
}
else if (counter % 2 != 0)
{
sqlselect.imagePosition = (CString)dbResult[index];
}
counter++;
++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
selVec.push_back(sqlselect);
}
}
if (nRow < 9)
{
showProducts();
clearPciture(nRow);
}
else
showProducts();
sqlite3_free_table(dbResult);
//关闭数据库
sqlite3_close(db);
}
}
void CMateriaManagementDlg::OnStnClickedStaticMaterialText3()
{
// TODO: 在此添加控件通知处理程序代码
}
sqlite3* CMateriaManagementDlg::ConnectDatabase(const char* path)
{
sqlite3 *db;
int rc;
rc = sqlite3_open(path, &db);
if (rc == SQLITE_OK)
{
return db;
}
else
return NULL;
}
void CMateriaManagementDlg::OnEnChangeItemSelEdit()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
char *errMsg;
int rc;
sqlite3 *db;
int result;
char **dbResult;
int nRow, nColumn;
std::string rtnSql;
char *errmsg = NULL;
int i, j;
int index;
CString maxid;
std::string maxProid = "select MAX(pro_id) from ProductInfo";
// std::string insertSql = "insert into ProductInfo values (101,'ww',26,26,26,'ww','ww','ww','ww',26,'ww','ww','ww','ww','ww','ww','ww',26,'2016-04-14 22:47:19.000')";
// _RecordsetPtr m_pRecordset;
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
const char* path = Unicode2Utf8(unic_DataBasePath);
rc = sqlite3_open(path, &db);
if (rc == SQLITE_OK)
{
const char* select = "select * from ProductInfo";
// MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
/****************************************************************/
// rc = sqlite3_exec(db, insertSql.c_str(), NULL, NULL, &errMsg); //插入一条数据;
/****************************************************************/
// rc = sqlite3_exec(db, maxProid.c_str(), NULL, NULL, &errMsg);
/****************************************************************/
result = sqlite3_get_table(db, maxProid.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
if (SQLITE_OK == result)
{
index = nColumn;
printf("查到%d条记录\n", nRow);
for (i = 0; i < nRow; i++)
{
printf("第 %d 条记录\n", i + 1);
for (j = 0; j < nColumn; j++)
{
printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
maxid = dbResult[index];
int temp = _ttoi(maxid) + 1;
m_proid.Format(_T("%d"), temp);
SetDlgItemText(IDC_PRO_ID, m_proid); //显示插入的pro_id
++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf("-------\n");
}
}
/****************************************************************/
//if (rc != SQLITE_OK)
//{
// printf("创建表失败,错误码:%d,错误原因:%sn", rc, errMsg);
// MessageBox(NULL, _T("创建表user失败!"), _T("错误"), MB_ICONWARNING);
//}
//rc = sqlite3_exec(db, "insert into user values('123','测试')", NULL, NULL, &errMsg);
//if (rc != SQLITE_OK)
//{
// MessageBox(NULL, _T("插入数据失败!"), _T("错误"), MB_ICONWARNING);
//}
// rc = sqlite3_exec(db, "select * from user", showTableInfo, NULL, &errMsg);
//if (rc != SQLITE_OK)
//{
// MessageBox(NULL, _T("查询失败!"), _T("错误"), MB_ICONWARNING);
//}
//到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放
sqlite3_free_table(dbResult);
//关闭数据库
sqlite3_close(db);
}
}
void CMateriaManagementDlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
CString temp;
int nsel;
// 获取组合框控件的列表框中选中项的索引
nsel = m_prostyle.GetCurSel();
// 根据选中项索引获取该项字符串
m_prostyle.GetLBText(nsel, temp);
m_style = temp;
// 将组合框中选中的字符串显示到IDC_SEL_WEB_EDIT编辑框中
SetDlgItemText(IDC_COMBO1, temp);
}
void CMateriaManagementDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
time_t t = time(0);
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
m_proupdatetime = tmp;
using namespace std;
char *errMsg;
int rc;
sqlite3 *db;
GetDlgItem(IDC_PRO_NAME)->GetWindowText(m_proname);
GetDlgItem(IDC_PRICE)->GetWindowText(m_proprice);
USES_CONVERSION;
string proid(W2A(m_proid));
string proname(W2A(m_proname));
string pronodeid(W2A(m_pronodeid));
string prenodeid(W2A(m_prenodeid));
string nodelayerid(W2A(m_nodelayerid));
string procorlor(W2A(m_procorlor));
string material(W2A(m_material));
string style(W2A(m_style));
string proremark(W2A(m_proremark));
string proprice(W2A(m_proprice));
string pronumber(W2A(m_pronumber));
string prolinkurl(W2A(m_prolinkurl));
string proseller(W2A(m_proseller));
string topimageview(W2A(m_topimageview));
string preimageview(W2A(m_preimageview));
string prozippath(W2A(m_prozippath));
string proobjpath(W2A(m_proobjpath));
string proisdeleted(W2A(m_proisdeleted));
string proupdatetime(W2A(m_proupdatetime));
//time_t t = time(0); //获取本地时间命名图片 确保唯一性
//char tmp[64];
//strftime(tmp, sizeof(tmp), "%Y-%m-%d %X", localtime(&t));
//m_proupdatetime = tmp;
//std::string time = tmp;//Format(_T("%s"), a);
//m_proupdatetime = (CString)time.c_str();
m_proupdatetime.Format("yyyy-mm-dd 00:00:00.000");
std::string insertSql = "insert into ProductInfo values (" + proid + ",'" + proname + "'," + pronodeid + "," + prenodeid + "," + nodelayerid + ",'" + procorlor + "','" + material + "','" +
style + "','" + proremark + "'," + proprice + ",'" + pronumber + "','" + prolinkurl + "','" + proseller + "','" + topimageview + "','" + preimageview + "','" + prozippath + "','" + proobjpath + "'," + proisdeleted + ",'" + proupdatetime + "')";
// _RecordsetPtr m_pRecordset;
wchar_t* changeInsert = StringTWchar(insertSql);
char *rtnSql = AnsiToUTF_8(changeInsert);
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
const char* path = Unicode2Utf8(unic_DataBasePath);
rc = sqlite3_open(path, &db);
if (rc == SQLITE_OK)
{
// MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
/****************************************************************/
rc = sqlite3_exec(db, rtnSql, NULL, NULL, &errMsg); //插入一条数据;
if (rc == SQLITE_OK)
{
AfxMessageBox(_T("添加成功!"));
// m_pronumber = _T("");
SetDlgItemText(IDC_PRO_ID,_T(""));
SetDlgItemText(IDC_PRO_NAME, _T(""));
SetDlgItemText(IDC_PRICE, _T(""));
SetDlgItemText(IDC_EDIT1, _T(""));
SetDlgItemText(IDC_EDIT2, _T(""));
SetDlgItemText(IDC_EDIT3, _T(""));
SetDlgItemText(IDC_EDIT_OBJ, _T(""));
}
else
AfxMessageBox(_T("添加失败!"));
}
//关闭数据库
sqlite3_close(db);
}
void CMateriaManagementDlg::OnEnChangeProName()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnEnChangeEdit3()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
CString strText; // 树节点的标签文本字符串
CString fileText;
CString totalText, temp, temp1, temp2;
CString topViewPng;
CString PrePng;
CString name;
temp = L".obj";
int counter_image = 0;
CString kinds;
std::vector<const std::string> vec_files;
m_tree.GetItemPath(strText, pNMTreeView->itemNew.hItem);
// 获取当前选中节点的句柄
HTREEITEM hItem = m_tree.GetSelectedItem();
// 获取选中节点的标签文本字符串
fileText = m_tree.GetItemText(hItem);
// 将字符串显示到编辑框中
time_t t = time(0); //获取本地时间命名图片 确保唯一性
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S", localtime(&t));
char tmp1[64];
strftime(tmp1, sizeof(tmp1), "%Y%m%d", localtime(&t));
char tmp2[64];
strftime(tmp2, sizeof(tmp2), "%Y-%m-%d %X", localtime(&t));
m_updatetime = tmp2;
m_proupdatetime = tmp;
std::string time = tmp;//Format(_T("%s"), a);
std::string time1 = tmp1;
int size_time1 = time1.length();
time1 = time1.substr(2, size_time1);
CString ctime = (CString)time.c_str();
CString ctime1 = (CString)time1.c_str();
int n = fileText.Find(_T("p.png"));
if (n != -1)
{
PrePng = ctime + _T(".png");
CString image_path = utilProductDir(_T("File\\") + PrePng);
m_preimageview = _T("File/") + PrePng;
SetDlgItemText(IDC_EDIT3, m_preimageview);
USES_CONVERSION;
std::string oldImage(W2A(fullPath+_T("\\")+fileText));
std::string newImage = (W2A(image_path)); //"C:\\Users\\Administrator\\Desktop\\2.PNG";
int result = rename(oldImage.c_str(), newImage.c_str());
if (result == 0)
AfxMessageBox(_T("拷贝成功!"));
else
AfxMessageBox(_T("拷贝失败!"));
}
int n1 = fileText.Find(_T("t.png"));
if (n1 != -1)
{
topViewPng = ctime + _T(".png");
CString image_path = utilProductDir(_T("File\\") + topViewPng);
m_topimageview = _T("File/") + topViewPng;
SetDlgItemText(IDC_EDIT2, m_topimageview);
USES_CONVERSION;
std::string oldImage(W2A(fullPath + _T("\\") + fileText));
std::string newImage = (W2A(image_path)); //"C:\\Users\\Administrator\\Desktop\\2.PNG";
int result = rename(oldImage.c_str(), newImage.c_str());
if (result == 0)
AfxMessageBox(_T("拷贝成功!"));
else
AfxMessageBox(_T("拷贝失败!"));
}
int n2 = fileText.Find(_T(".obj"));
if (n2 != -1)
{
int n = fileText.Find(_T("."));
// int n_length = fileText.Delete(0, n);
CString proNum = fileText.Left(n);
SetDlgItemText(IDC_EDIT1, proNum);
GetDlgItem(IDC_PRO_NAME)->GetWindowText(m_proname);
topViewPng = _T("product/") + m_proid + _T("/") + fileText;
m_proobjpath = topViewPng;
SetDlgItemText(IDC_EDIT_OBJ, m_proobjpath);
}
if (strText != "" || fileText == "计算机")
{
totalText = strText;
fullPath = totalText;
int n = -1;
SetDlgItemText(IDC_EDIT_OBJ, totalText);
USES_CONVERSION;
const std::string path(W2A(totalText));
if ((n = path.find("壁纸")) != std::string::npos)
{
kinds = _T("pap");
AfxMessageBox(_T("选择了壁纸文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='壁纸'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if (( n = path.find("布料")) != std::string::npos)
{
kinds = _T("col");
AfxMessageBox(_T("选择了布料文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='布料'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("地板")) != std::string::npos)
{
kinds = _T("flo");
AfxMessageBox(_T("选择了布料文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='地板'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("地毯")) != std::string::npos)
{
kinds = _T("car");
AfxMessageBox(_T("选择了布料文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='地毯'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("其他")) != std::string::npos)
{
kinds = _T("oth");
AfxMessageBox(_T("选择了其他文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='其他'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("地砖")) != std::string::npos)
{
kinds = _T("flo");
AfxMessageBox(_T("选择了地砖文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='地砖'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("墙裙")) != std::string::npos)
{
kinds = _T("dod");
AfxMessageBox(_T("选择了墙裙文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='墙裙'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("厨卫吊顶")) != std::string::npos)
{
kinds = _T("cei");
AfxMessageBox(_T("选择了厨卫吊顶文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='厨卫吊顶'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("门")) != std::string::npos)
{
kinds = _T("doo");
AfxMessageBox(_T("选择了门文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='门'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
else if ((n = path.find("窗")) != std::string::npos)
{
kinds = _T("win");
AfxMessageBox(_T("选择了窗文件夹"));
CString csql = _T("select node_id from MaterialTreeInfo where node_name='窗'");
std::string Sql = Convert(csql);
m_materialnodeid = SelectTable(Sql);
}
if (n != -1)
{
vec_files = RecureDir(path);
if (vec_files.size() == 0)
{
AfxMessageBox(_T("该文件夹没有文件,请重新选择!"));
return;
}
std::vector<const std::string>::iterator vec_iter;
for (vec_iter = vec_files.begin(); vec_iter != vec_files.end(); vec_iter++)
{
CString imagepath_new;
counter_image++;
std::string num;
if (counter_image < 10)
{
num = "0" + boost::lexical_cast<std::string>(0 + counter_image);
}
else
{
num = boost::lexical_cast<std::string>(counter_image);
}
CString cnum = (CString)num.c_str();
CString company_code;
GetDlgItem(IDC_MATERIAL_PRICE)->GetWindowText(m_materialprice);
GetDlgItem(IDC_COMPANY_CODE)->GetWindowText(company_code);
if (company_code == _T(""))
{
AfxMessageBox(_T("请输入公司代码,请重新选择所要添加的素材文件夹"));
return;
}
if (m_materialprice == _T(""))
{
AfxMessageBox(_T("请输入素材价格"));
return;
}
// std::string file_path = *vec_iter;
boost::filesystem::path ps(*vec_iter);
CString postfix = (CString)ps.extension().string().c_str(); //图片后缀名
std::string filename = ps.filename().string(); //有后缀文件名
std::string filename_nopostfix = ps.stem().string(); //无后缀文件名
CString imagename_new = ctime + _T("-") +cnum + postfix;
m_materialimagepath = _T("material/") + imagename_new;
m_materialname = company_code + kinds + ctime1 + cnum;;
CString image_path = utilDataDir(_T("material\\") + imagename_new);
USES_CONVERSION;
std::string oldImage(ps.string());
std::string newImage = (W2A(image_path)); //"C:\\Users\\Administrator\\Desktop\\2.PNG";
int result = rename(oldImage.c_str(), newImage.c_str());
if (result == 0)
{
SetDlgItemText(IDC_COPY_STATUS, _T("拷贝ING!"));
std::string maxProid = "select MAX(material_id) from MaterialInfo";
m_materialid = SelectTable(maxProid);
InsertMatrialInfo();
}
else
AfxMessageBox(_T("拷贝失败!"));
}
SetDlgItemText(IDC_COPY_STATUS, _T("拷贝成功!"));
}
}
else
{
int length = fileText.GetLength();
if (int flag = fileText.Find(temp) )
{
if (flag < 0)
{
return;
}
else
{
int n = fileText.Find(_T("."));
CString temp = fileText.Left(n);
if (temp == m_pronumber)
return;
else
m_pronumber = temp;
/*for (int i = 0; i < length; i++)
{
if (fileText[i] != (CString)"." )
{
m_pronumber += fileText[i];
}
else if (fileText[i] == (CString)".")
return;
}*/
}
}
}
/************************************************************/
;
// SetDlgItemText(IDC_EDIT3, fileText);
}
void CMateriaManagementDlg::OnEnChangeEditObj()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnEnChangeEdit2()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnCbnSelchangeCombo2()
{
// TODO: 在此添加控件通知处理程序代码
CString strWeb;
int nSel;
// 获取组合框控件的列表框中选中项的索引
nSel = m_comboWeb.GetCurSel();
// 根据选中项索引获取该项字符串
m_comboWeb.GetLBText(nSel, strWeb);
// 将组合框中选中的字符串显示到IDC_SEL_WEB_EDIT编辑框中
m_proname = strWeb;
SetDlgItemText(IDC_PRO_NAME, strWeb);
CString selNodeId = _T("select node_id from ProductTreeInfo where node_name like '") + m_proname + "'";
USES_CONVERSION;
std::string strSel = W2A(selNodeId);
char *ll = G2U(strSel.c_str());
std::string strsql = ll;
CString rtn = Query(strsql);
if (rtn == "")
{
m_prenodeid = "";
}
else
{
m_prenodeid = rtn;
}
}
using namespace boost::filesystem;
using namespace std;
std::vector<const std::string> CMateriaManagementDlg::RecureDir(const std::string &full_path)
{
std::vector<const std::string> vector_files;
if (full_path != "")
{
directory_iterator end;
int files_num = 0;
for (directory_iterator pos(full_path); pos != end; ++pos)
{
boost::filesystem::path path_(*pos);
if (is_regular(path_))
{
string s = path_.string();
vector_files.push_back(s);
files_num++;
}
else if (is_directory(path_))
{
RecureDir(path_.string());
}
}
}
return vector_files;
}
CString CMateriaManagementDlg::SelectTable(const std::string &selMaxID)
{
int rc;
sqlite3 *db;
int result;
char **dbResult;
int nRow, nColumn;
char *errmsg = NULL;
int index;
int i;
int j;
CString maxid;
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
char* databasepath = Unicode2Utf8(unic_DataBasePath);
rc = sqlite3_open(databasepath, &db);
if (rc == SQLITE_OK)
{
result = sqlite3_get_table(db, selMaxID.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
if (SQLITE_OK == result)
{
index = nColumn;
printf("查到%d条记录\n", nRow);
for (i = 0; i < nRow; i++)
{
printf("第 %d 条记录\n", i + 1);
for (j = 0; j < nColumn; j++)
{
printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
maxid = dbResult[index];
int temp = _ttoi(maxid) + 1;
m_materialid.Format(_T("%d"), temp);
SetDlgItemText(IDC_PRO_ID, m_materialid); //显示插入的pro_id
++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf("-------\n");
}
}
}
else
return _T("");
sqlite3_free_table(dbResult);
//关闭数据库
sqlite3_close(db);
return m_materialid;
}
CString CMateriaManagementDlg::Query(const std::string &selMaxID)
{
int rc;
sqlite3 *db;
int result;
char **dbResult;
int nRow, nColumn;
char *errmsg = NULL;
int index;
int i;
int j;
CString maxid;
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
char* databasepath = Unicode2Utf8(unic_DataBasePath);
rc = sqlite3_open(databasepath, &db);
if (rc == SQLITE_OK)
{
result = sqlite3_get_table(db, selMaxID.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
if (SQLITE_OK == result)
{
index = nColumn;
printf("查到%d条记录\n", nRow);
for (i = 0; i < nRow; i++)
{
printf("第 %d 条记录\n", i + 1);
for (j = 0; j < nColumn; j++)
{
printf("字段名:%s> 字段值:%s\n", dbResult[j], dbResult[index]);
maxid = dbResult[index]; //显示插入的pro_id
++index; // dbResult 的字段值是连续的,从第0索引到第 nColumn - 1索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf("-------\n");
}
}
}
else
return _T("");
sqlite3_free_table(dbResult);
//关闭数据库
sqlite3_close(db);
return maxid;
}
void CMateriaManagementDlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnEnChangeCompanyCode()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMateriaManagementDlg::OnEnChangeCopyStatus()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
std::string CMateriaManagementDlg::Convert(CString & select)
{
char* csql = NULL;
USES_CONVERSION;
csql = W2A(select);
char *ll = G2U(csql);
std::string strsql = ll;
return strsql;
}
void CMateriaManagementDlg::InsertMatrialInfo()
{
using namespace std;
char *errMsg;
int rc;
sqlite3 *db;
USES_CONVERSION;
string materialid(W2A(m_materialid));
string materialname(W2A(m_materialname));
string materialnodeid(W2A(m_materialnodeid));
string materialstyle(W2A(m_materialstyle));
string materialpath(W2A(m_materialimagepath));
string materialdeleted(W2A(m_materialdeleted));
string materialupdatetime(W2A(m_updatetime));
string materialsizex(W2A(m_materialsizex));
string materialsizey(W2A(m_materialsizey));
string materialprice(W2A(m_materialprice));
std::string ccc = "ddddd";
std::string insertSql = "insert into MaterialInfo values (" + materialid + ",'" + materialname + "'," + materialnodeid + ",'" + materialstyle + "','" + materialpath + "'," + materialdeleted + ",'" + materialupdatetime + "'," +
materialsizex + "," + materialsizey + "," + materialprice + ")";
wchar_t* changeInsert = StringTWchar(insertSql);
char *rtnSql = AnsiToUTF_8(changeInsert);
CString cstr_DataBasePath = utilDataBaseDir(_T("HouseDesignDB.db"));
std::wstring unic_DataBasePath = cstr_DataBasePath.GetString();
const char* path = Unicode2Utf8(unic_DataBasePath);
rc = sqlite3_open(path, &db);
if (rc == SQLITE_OK)
{
// MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
/****************************************************************/
rc = sqlite3_exec(db, rtnSql, NULL, NULL, &errMsg); //插入一条数据;
if (rc == SQLITE_OK)
{
//AfxMessageBox(_T("添加成功!"));
SetDlgItemText(IDC_INSERT_STATUS, _T("添加成功!"));
}
else
AfxMessageBox(_T("添加失败!"));
}
//关闭数据库
sqlite3_close(db);
}
void CMateriaManagementDlg::OnEnChangeInsertStatus()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
bool CMateriaManagementDlg::DirDelete(CString &str)
{
namespace fs = boost::filesystem;
CString dirName = utilProductDir(_T("product\\") + str);
USES_CONVERSION;
std::string del(W2A(dirName));
namespace fs = boost::filesystem;
fs::path ps(del);
fs::path path = ps;
try
{
fs::remove_all(path);
return true;
}
catch (std::exception e)
{
e.what();
return false;
}
}