📄 c_proc.cpp
字号:
/*---------------------------------------------*/
// 1.擔杮岅柤
// Image File Load張棟(BMP/JPEG)
// 2.Parameter愢柧
// char *szFileName File柤
// 3.奣梫
// 4.婡擻愢柧
// 5.栠傝抣
// 6.旛峫
/*---------------------------------------------*/
BOOL LoadImageFile(LPPICTURE *pImage, char *szFileName)
{
LPSTREAM pStream;
HGLOBAL hGlobal;
HRESULT hResult;
CFile pFile;
DWORD dwSize;
BOOL bBool, bRet = FALSE;
void *pBuf;
if (*pImage != NULL) {
(*(LPPICTURE*)pImage)->Release();
}
*pImage = NULL;
// Image File Read
bBool = pFile.Open(szFileName, CFile::modeRead);
if (bBool == TRUE) {
dwSize = pFile.GetLength();
// Global椞堟 妋曐
hGlobal = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
if (hGlobal != NULL) {
// Global椞堟Lock
pBuf = ::GlobalLock(hGlobal);
if (pBuf != NULL) {
// File Read
if (pFile.Read(pBuf, dwSize) == dwSize) {
// IStream Get
pStream = NULL;
// Global椞堟->Make IStream
hResult = ::CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
if (SUCCEEDED(hResult) == TRUE) {
// IPicture Object Address Get
hResult = ::OleLoadPicture(pStream, dwSize, FALSE, IID_IPicture, (LPVOID *)pImage);
if (SUCCEEDED(hResult) == TRUE && pImage != NULL) {
// 撉崬惉岟
bRet = TRUE;
}
else {
pImage = NULL;
}
// IStream Object Release
pStream->Release();
}
}
::GlobalUnlock(hGlobal);
}
::GlobalFree(hGlobal);
}
pFile.Close();
}
return bRet;
}
/*---------------------------------------------*/
// 1.擔杮岅柤
// Image Data Print
// 2.Parameter愢柧
// 3.奣梫
// 4.婡擻愢柧
// 5.栠傝抣
// 6.旛峫
/*---------------------------------------------*/
void ImagePrint(CDC *pDcOrg, LPPICTURE pImage, CPrintInfo *pInfo, int nOfs)
{
COLORREF pColor;
CSize pSize;
CRect pRect;
CPoint pPoint;
long hmWidth, hmHeight;
pColor = GetSysColor(COLOR_MENU);
pRect = pInfo->m_rectDraw;
CCqMemDC pDC(pDcOrg, pRect);
// Image Readed
if (pImage != NULL) {
// PICTURE僀儞僞乕僼僃僀僗偐傜暆偲崅偝傪庢摼偡傞
// 偙偺偲偒偺暆偲崅偝偼丄HIMETRIC 扨埵偱偁傞
pImage->get_Width(&hmWidth);
pImage->get_Height(&hmHeight);
// 僨傿僗僾儗僀偺昞帵僒僀僘偵曄姺偡傞偨傔堦帪揑偵CSize偵奿擺偡傞丅
// int偺斖埻傪挻偡傛偆側応崌偼丄暿搑MulDiv偱寁嶼偟側偗傟偽側傜側偄
pSize.cx = hmWidth;
pSize.cy = hmHeight;
// HIMETRIC 扨埵傪僨僶僀僗扨埵偵曄姺
pDC->HIMETRICtoDP(&pSize);
pImage->Render(pDC, // Handle of device context on which to render the image
pRect.left+nOfs, // Horizontal position of image in hdc
pRect.top+nOfs, // Vertical position of image in hdc
pRect.right-pRect.left-2-(nOfs*2), // Horizontal dimension of destination rectangle
pRect.bottom-pRect.top-2-(nOfs*2), // Vertical dimension of destination rectangle
0, // Horizontal offset in source picture
hmHeight, // Vertical offset in source picture
hmWidth, // Amount to copy horizontally in source picture
-hmHeight, // Amount to copy vertically in source picture
&pRect); // Pointer to position of destination for a metafile hdc
}
}
///////////////////////////////////////////////////////////////////////////////////////////
// 22-Mar-2004
void ParaPrint(char *des, PS_PARA_TABLE p)
{
if (p->typ == 0) { // int
sprintf(des, "%*d", p->len, *((int*) p->p));
}
else { // double
sprintf(des, "%*.*lf", p->len, p->dp, *((double*) p->p));
}
}
void ParaScan(char *src, PS_PARA_TABLE p)
{
double dat_d;
int dat_i;
switch (p->typ){
case TYP_INT: // 0: int 宆悢抣
sscanf(src, "%d", &dat_i);
if (dat_i > p->hi ) dat_i = (int)p->hi;
if (dat_i < p->low) dat_i = (int)p->low;
*((int*) p->p) = dat_i;
break;
case TYP_DBL: // 1: double 宆悢抣
sscanf(src, "%lf", &dat_d);
if (dat_d > p->hi ) dat_d = p->hi;
if (dat_d < p->low) dat_d = p->low;
*((double*) p->p) = dat_d;
break;
}
}
// 僥乕僽儖僥僉僗僩昞帵
void PutTblTxt(CWnd* pParent, S_PARA_TABLE* pTbl, int sel, int ofs)
{
char buff[64];
int a, b, keep, id;
CButton *pBt[5];
//-----( Text )-----
a = 0;
if (sel != -1) a = sel;
keep = 1;
do{
switch (pTbl[a].typ){
case TYP_STR2: // 2: 暥帤楍
for (b=0;b<pTbl[a].len;b++){
buff[b] = *((char *)pTbl[a].p+ofs+b);
}
buff[b+0] = 0;
pParent->SetDlgItemText(pTbl[a].id_1, buff);
if (pTbl[a].id_2 != 0) pParent->SetDlgItemText(pTbl[a].id_2, (char *)pTbl[a].p+ofs);
if (pTbl[a].id_3 != 0) pParent->SetDlgItemText(pTbl[a].id_3, (char *)pTbl[a].p+ofs);
if (pTbl[a].id_4 != 0) pParent->SetDlgItemText(pTbl[a].id_4, (char *)pTbl[a].p+ofs);
break;
case TYP_INT: // 0: int 宆悢抣
case TYP_DBL: // 1: double 宆悢抣
ParaPrint(buff, &pTbl[a]);
pParent->SetDlgItemText(pTbl[a].id_1, buff);
break;
case TYP_STR: // 2: 暥帤楍
//ParaPrint(buff, &pTbl[a]);
pParent->SetDlgItemText(pTbl[a].id_1, (char *)pTbl[a].p+ofs);
if (pTbl[a].id_2 != 0) pParent->SetDlgItemText(pTbl[a].id_2, (char *)pTbl[a].p+ofs);
if (pTbl[a].id_3 != 0) pParent->SetDlgItemText(pTbl[a].id_3, (char *)pTbl[a].p+ofs);
if (pTbl[a].id_4 != 0) pParent->SetDlgItemText(pTbl[a].id_4, (char *)pTbl[a].p+ofs);
break;
case TYP_CHK: // 3: check box
pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
if (*((int*) pTbl[a].p)){
pBt[0]->SetCheck(1); // 0:枹check / 1:check
}
else{
pBt[0]->SetCheck(0); // 0:枹check / 1:check
}
for (b=0;b<pTbl[a].len;b++){
switch (b){
case 0: id = pTbl[a].id_2; break;
case 1: id = pTbl[a].id_3; break;
case 2: id = pTbl[a].id_4; break;
case 3: id = pTbl[a].id_5; break;
case 4: id = pTbl[a].id_6; break;
}
if (*((int*) pTbl[a].p) != 0){
pParent->GetDlgItem(id)->EnableWindow(TRUE);
}
else{
pParent->GetDlgItem(id)->EnableWindow(FALSE);
}
}
break;
case TYP_CMB: // 4: combo box
CComboBox* pCmbBx;
pCmbBx = (CComboBox*)pParent->GetDlgItem(pTbl[a].id_1);
pCmbBx->SetCurSel(*((int*) pTbl[a].p));
break;
case TYP_RAD: // 5: radio botton
if (pTbl[a].id_1){
pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
pBt[0]->SetCheck(0); // 0:枹check / 1:check
}
if (pTbl[a].id_2){
pBt[1] = (CButton*)pParent->GetDlgItem(pTbl[a].id_2);
pBt[1]->SetCheck(0); // 0:枹check / 1:check
}
if (pTbl[a].id_3){
pBt[2] = (CButton*)pParent->GetDlgItem(pTbl[a].id_3);
pBt[2]->SetCheck(0); // 0:枹check / 1:check
}
if (pTbl[a].id_4){
pBt[3] = (CButton*)pParent->GetDlgItem(pTbl[a].id_4);
pBt[3]->SetCheck(0); // 0:枹check / 1:check
}
if (pTbl[a].id_5){
pBt[4] = (CButton*)pParent->GetDlgItem(pTbl[a].id_5);
pBt[4]->SetCheck(0); // 0:枹check / 1:check
}
pBt[*((int*) pTbl[a].p)]->SetCheck(1); // 0:枹check / 1:check
break;
default:
keep = 0;
break;
}
a ++;
}while (keep && sel == -1);
}
// 僥乕僽儖僥僉僗僩庢摼
void GetTblTxt(CWnd* pParent, S_PARA_TABLE* pTbl, int isel, int ofs)
{
char buff[64];
int a, b, keep, sel, len;
CButton *pBt[5];
a = isel;
if (isel == -1){
a = 0;
}
keep = 1;
do{
switch (pTbl[a].typ){
case TYP_STR2: // 2: 暥帤楍
for (b=0;b<pTbl[a].len;b++){
buff[b] = *((char *)pTbl[a].p+ofs+b);
}
buff[b+0] = 0;
pParent->GetDlgItemText(pTbl[a].id_1, (char*)pTbl[a].p+ofs, pTbl[a].len+1);
len = pTbl[a].len;
*((char*)pTbl[a].p+ofs+len+0) = 0x0d;
*((char*)pTbl[a].p+ofs+len+1) = 0x0a;
// *((char*)pTbl[a].p+pTbl[a].len) = NULL;
break;
case TYP_INT: // 0: int 宆悢抣
case TYP_DBL: // 1: double 宆悢抣
pParent->GetDlgItemText(pTbl[a].id_1, buff, sizeof(buff));
ParaScan(buff, &pTbl[a]);
break;
case TYP_STR: // 2: 暥帤楍
pParent->GetDlgItemText(pTbl[a].id_1, (char*)pTbl[a].p+ofs, pTbl[a].len+1);
*((char*)pTbl[a].p+pTbl[a].len) = NULL;
break;
case TYP_CHK: // 3: check box
pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
*((int*) pTbl[a].p) = pBt[0]->GetCheck(); // 0:枹check / 1:check
break;
case TYP_CMB: // 4: combo box
CComboBox* pCmbBx;
pCmbBx = (CComboBox*)pParent->GetDlgItem(pTbl[a].id_1);
*((int*) pTbl[a].p) = pCmbBx->GetCurSel();
break;
case TYP_RAD: // 5: radio botton
sel = 0;
if (pTbl[a].id_1){
pBt[0] = (CButton*)pParent->GetDlgItem(pTbl[a].id_1);
if (pBt[0]->GetCheck()) sel = 0;
}
if (pTbl[a].id_2){
pBt[1] = (CButton*)pParent->GetDlgItem(pTbl[a].id_2);
if (pBt[1]->GetCheck()) sel = 1;
}
if (pTbl[a].id_3){
pBt[2] = (CButton*)pParent->GetDlgItem(pTbl[a].id_3);
if (pBt[2]->GetCheck()) sel = 2;
}
if (pTbl[a].id_4){
pBt[3] = (CButton*)pParent->GetDlgItem(pTbl[a].id_4);
if (pBt[3]->GetCheck()) sel = 3;
}
if (pTbl[a].id_5){
pBt[4] = (CButton*)pParent->GetDlgItem(pTbl[a].id_5);
if (pBt[4]->GetCheck()) sel = 4;
}
*((int*) pTbl[a].p) = sel; // 0:枹check / 1:check
break;
default:
keep = 0;
break;
}
a ++;
}while (keep && isel == -1);
}
// 僥乕僽儖弶婜壔
void SetDefaultDat(S_PARA_TABLE* pTbl)
{
int a, keep;
a = 0;
keep = 1;
while (keep){
switch (pTbl[a].typ){
case TYP_INT: // 0: int 宆悢抣
case TYP_CHK: // 3: check box
case TYP_CMB: // 4: combo box
case TYP_RAD: // 5: radio botton
*((int*) pTbl[a].p) = (int)(pTbl[a].def);
break;
case TYP_DBL: // 1: double 宆悢抣
*((double*) pTbl[a].p) = pTbl[a].def;
break;
case TYP_STR: // 2: 暥帤楍
*((char*) pTbl[a].p) = NULL;
break;
default:
keep = 0;
break;
}
a ++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -