website

m_dwType Union data member comment
DBVT_NULL No union member is valid for access.
DBVT_BOOL m_boolVal
DBVT_UCHAR m_chVal
DBVT_SHORT m_iVal
DBVT_LONG m_lVal
DBVT_SINGLE m_fltVal
DBVT_DOUBLE m_dblVal
DBVT_DATE m_pdate
DBVT_STRING m_pstring Stores a pointer to an object of type CString.
DBVT_BINARY m_pbinary
DBVT_ASTRING m_pstringA Stores a pointer to an ASCII CString object.
DBVT_WSTRING m_pstringW Stores a pointer to a wide CString object.

topmost 显示

MessageBox(NULL,
"your message",
"box title",
MB_ICONERROR | MB_OK | MB_SETFOREGROUND | MB_TOPMOST);

vscode cpp 插件

ext install cpptools

环境搭建 mac

vscode,sdl2,macbook 10.14.1 (18B75)

brew install sdl2

mkdir myproject
cd myproject
touch main.cpp
touch Makefile
mkdir include
mkdir lib

main.cpp

#include <iostream>
#include <SDL2/SDL.h>
using namespace std;
int main()
{
cout << "Hello World!";
SDL_Init(SDL_INIT_VIDEO);
return 0;
}

把 /usr/local/Cellar/sdl2 下面的 include 和 lib 拷贝到 myproject 下面

Makefile 的内容

game:
g++ main.cpp -o play -I include -L lib -l SDL2-2.0.0

-I (i as in include) tells it additional include directories you want to add
-L tells it additional library directories you want to add
-l (lowercase l as in lib) tells it specific library binaries you want to add

编译项目
make game

运行,看到 “Hello World!” 输出表示 SDL 可用了
./play

环境搭建 linux -尚未验证

sudo apt-get update
sudo apt-get install libsdl2-2.0.0 libsl2-dbg libsdl2-dev
libsdl2-image-2.0-0 libsdl2-image-dbg libsdl2-image-dev

环境搭建 windows

添加项目

// 头部添加
int cmb_idx = m_cmb_marked_mp.AddString(str);
m_cmb_marked_mp.SetItemData(cmb_idx, idx);
m_cmb_marked_mp.SetCurSel(cmb_idx);

// 尾部添加
int cmb_idx = m_cmb_marked_mp.InsertString(-1,str);
m_cmb_marked_mp.SetCurSel(cmb_idx);

获取当前文字

CString str;
m_comboPath.GetLBText(m_comboPath.GetCurSel(), str);

对于可以输入的情况,使用下面的代码获取当前文字
用户输入数据,和选择数据的 index 是不一样的。

CString strPort;
int idx = m_cmb_port.GetCurSel();
// 用户手动输入的情况
if (-1 == idx)
{
m_cmb_port.GetWindowText(strPort);
}
else
{
m_cmb_port.GetLBText(m_cmb_port.GetCurSel(), strPort);
}
if (strPort.IsEmpty())
{
AfxMessageBox(L"请输入串口号,例如:COM1");
return;
}

删除所有项目

m_cmb_force_type.ResetContent();

删除指定项目

删除之后,剩余所有项目的索引自动减一

int idx = m_cmb_marked_mp.GetCurSel();
m_cmb_marked_mp.DeleteString(idx);
idx = m_cmb_marked_mp.GetCount();
if (idx >= 0 )
{
m_cmb_marked_mp.SetCurSel(0);
}

添加项目

// 头部添加
int cmb_idx = m_cmb_marked_mp.AddString(str);
m_cmb_marked_mp.SetItemData(cmb_idx, idx);
m_cmb_marked_mp.SetCurSel(cmb_idx);

// 尾部添加
int cmb_idx = m_cmb_marked_mp.InsertString(-1,str);
m_cmb_marked_mp.SetCurSel(cmb_idx);

获取当前文字

CString str;
m_comboPath.GetLBText(m_comboPath.GetCurSel(), str);

对于可以输入的情况,使用下面的代码获取当前文字
用户输入数据,和选择数据的 index 是不一样的。

CString strPort;
int idx = m_cmb_port.GetCurSel();
// 用户手动输入的情况
if (-1 == idx)
{
m_cmb_port.GetWindowText(strPort);
}
else
{
m_cmb_port.GetLBText(m_cmb_port.GetCurSel(), strPort);
}
if (strPort.IsEmpty())
{
AfxMessageBox(L"请输入串口号,例如:COM1");
return;
}

删除所有项目

m_cmb_force_type.ResetContent();

删除指定项目

删除之后,剩余所有项目的索引自动减一

int idx = m_cmb_marked_mp.GetCurSel();
m_cmb_marked_mp.DeleteString(idx);
idx = m_cmb_marked_mp.GetCount();
if (idx >= 0 )
{
m_cmb_marked_mp.SetCurSel(0);
}

声明控件变量
CTabCtrl m_ctrl_tab;
声明两个对话口类
CReceipt m_dlgReceipt;
CRefund m_dlgRefund;


//添加选项卡
m_ctrl_tab.InsertItem(0, _T("收款"));
m_ctrl_tab.InsertItem(1, _T("退款"));
m_ctrl_tab.InsertItem(2, _T("交易查询"));
m_ctrl_tab.InsertItem(3, _T("统计查询"));

m_dlgReceipt.Create(IDD_RECEIPT, &m_ctrl_tab);
m_dlgRefund.Create(IDD_REFUND, &m_ctrl_tab);
m_dlgTradeQuery.Create(IDD_TRADEQUERY, &m_ctrl_tab);
m_dlgStatisticsQuery.Create(IDD_STATISTICSQUERY, &m_ctrl_tab);
m_dlgConfig.Create(IDD_CONFIG, &m_ctrl_tab);

//获得IDC_TABTEST客户区大小
CRect rect;
m_ctrl_tab.GetClientRect(&rect);
//this->ScreenToClient(&rect);//转换为对话框上的客户坐标

//调整子对话框在父窗口中的位置
rect.top += 22;

m_dlgReceipt.MoveWindow(&rect);
m_dlgRefund.MoveWindow(&rect);
m_dlgTradeQuery.MoveWindow(&rect);
m_dlgStatisticsQuery.MoveWindow(&rect);
m_dlgConfig.MoveWindow(&rect);

//分别设置隐藏和显示
m_dlgReceipt.ShowWindow(SW_SHOW);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);

m_ctrl_tab.SetCurSel(0);



void CDlgPayMain::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
int CurSel = m_ctrl_tab.GetCurSel();
switch (CurSel)
{
case 0:
m_dlgReceipt.ShowWindow(SW_SHOW);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
case 1:
m_dlgReceipt.ShowWindow(SW_HIDE);
m_dlgRefund.ShowWindow(SW_SHOW);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
case 2:
m_dlgReceipt.ShowWindow(SW_HIDE);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_SHOW);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
}

*pResult = 0;
}

声明控件变量
CTabCtrl m_ctrl_tab;
声明两个对话口类
CReceipt m_dlgReceipt;
CRefund m_dlgRefund;


//添加选项卡
m_ctrl_tab.InsertItem(0, _T("收款"));
m_ctrl_tab.InsertItem(1, _T("退款"));
m_ctrl_tab.InsertItem(2, _T("交易查询"));
m_ctrl_tab.InsertItem(3, _T("统计查询"));

m_dlgReceipt.Create(IDD_RECEIPT, &m_ctrl_tab);
m_dlgRefund.Create(IDD_REFUND, &m_ctrl_tab);
m_dlgTradeQuery.Create(IDD_TRADEQUERY, &m_ctrl_tab);
m_dlgStatisticsQuery.Create(IDD_STATISTICSQUERY, &m_ctrl_tab);
m_dlgConfig.Create(IDD_CONFIG, &m_ctrl_tab);

//获得IDC_TABTEST客户区大小
CRect rect;
m_ctrl_tab.GetClientRect(&rect);
//this->ScreenToClient(&rect);//转换为对话框上的客户坐标

//调整子对话框在父窗口中的位置
rect.top += 22;

m_dlgReceipt.MoveWindow(&rect);
m_dlgRefund.MoveWindow(&rect);
m_dlgTradeQuery.MoveWindow(&rect);
m_dlgStatisticsQuery.MoveWindow(&rect);
m_dlgConfig.MoveWindow(&rect);

//分别设置隐藏和显示
m_dlgReceipt.ShowWindow(SW_SHOW);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);

m_ctrl_tab.SetCurSel(0);



void CDlgPayMain::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
int CurSel = m_ctrl_tab.GetCurSel();
switch (CurSel)
{
case 0:
m_dlgReceipt.ShowWindow(SW_SHOW);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
case 1:
m_dlgReceipt.ShowWindow(SW_HIDE);
m_dlgRefund.ShowWindow(SW_SHOW);
m_dlgTradeQuery.ShowWindow(SW_HIDE);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
case 2:
m_dlgReceipt.ShowWindow(SW_HIDE);
m_dlgRefund.ShowWindow(SW_HIDE);
m_dlgTradeQuery.ShowWindow(SW_SHOW);
m_dlgStatisticsQuery.ShowWindow(SW_HIDE);
m_dlgConfig.ShowWindow(SW_HIDE);
break;
}

*pResult = 0;
}

Mac 系统

Mac 下,~/.gradle 文件夹下打开/新建 gradle.properties 文件,设置代理.

systemProp.http.nonProxyHosts=*.xcompany.com|localhost
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1087
systemProp.https.nonProxyHosts=*.xcompany.com|localhost
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1087

systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password

RECT rect;
::GetClientRect(this->m_hWndOwner, &rect);
int cxClient = rect.right - rect.left; // 获得客户区宽度
int cyClient = rect.bottom - rect.top; // 获得客户区高度
SetWindowPos(NULL, 0, 0, cxClient, cyClient, SWP_NOZORDER | SWP_NOSIZE);

RECT rect;
::GetClientRect(this->m_hWndOwner, &rect);
int cxClient = rect.right - rect.left; // 获得客户区宽度
int cyClient = rect.bottom - rect.top; // 获得客户区高度
SetWindowPos(NULL, 0, 0, cxClient, cyClient, SWP_NOZORDER | SWP_NOSIZE);