郑重承诺:本公司所有销售软件均为原装正版,假一罚十 在线QQ:331871241 375017345
 主 页 | 世纪飞扬 | 下载专区 | 技术支持 | 主要客户 | 联系我们 | 主页链接
会 员 登 录
   
控 件 分 类
图 表 控 件
工 控 仪 表
图 形 图 像
报 表 表 格
数 据 库
用 户 界 面
网 络 通 讯
文 档 处 理
条 形 码
数 据 处 理
系统及工具软件
明星产品推荐
NetAdvantage for .NET
ComponentOne Stutio Enterprise
ComponentOne Spread.NET
ActiveReports for .NET
DevExpress 宇宙版
FastReport.NET
Xcced Ultimate Suite
PDFlib
Nevron Chart for .NET
AnyChart
DotNetBar
nSoftware 红地毯版
Janus WinForms Controls Suite
MindFusion.WinForms Pack
dotConnect for Oracle
ChartFX PowerGadgets Mobile
PowerWeb for ASP.NET
GTP.NET 甘特图
SyncFusion Essential Studio
SyncFusion Orubase 移动开发
GDPicture.NET 图像处理套件
Aspose.Cells for .NET 电子表格
SymbolFactory.NET 工业图库
Xamamin C# 开发Android/iOS
Softek 条码扫描 Android/iOS
图形仪表组件ActiveX GDI+
图形仪表组件.NET
航空仪表组件

| General | Visual Basic | Visual C++ | Web | Delphi | C++Builder |

我动态创建了一个控件,它在我的机器上运行正常,但在其它机器上不能正常运行?
如何用正式版本的控件替换掉试用版本,而不会破坏原来用试用版做的工程?
如何在运行当中装载图片?
如何使用TREND控件的AddXYArray方法?

我动态创建了一个控件,它在我的机器上运行正常,但在其它机器上不能正常运行?
通常,一个商业控件只可以在设计模式下创建,在Visual C++里可以在对话框当中使用放置控件。如果您的程序一定要动态创建我们的控件,您需要联系世纪飞扬,以达成新的许可协议(现有的许可协议不适合这种开发使用),世纪飞扬将提供一个新的版本以供您使用。

Back to Top
如何用正式版本的控件替换掉试用版本,而不会破坏原来用试用版做的工程?
Unregister 反注册掉旧的控件。
Register 注册新的控件。
打开您原来的包括旧控件的工程,会弹出一个对话框,提醒有些控件不能正常显示。
选择您 project workspace中的FileView page。
删除掉旧控件已经生成的 .cpp .h ,例如 _trend.cpp、font.cpp、picture.cpp、
     _trend.h、font.h、picture.h

删除您工程目录中的这些文件。
选择菜单 "Add to project"->Compoent and Controls,引用新的控件到您的工程。
在对话框上放一个新的控件。
关闭并保存您的工程。
用记事本打开 .rc 文件,找到 dialog 资源描述一项,你可以发现旧控件和新控件的 classid ,用新
  的 classid 替换掉旧的 classid ,保存 .rc 文件。

使用记事本打开 .dsw 文件。
删除旧控件生成的 classid ,保存 .dsw 文件。
重新打开您的工程,一切正常。

Back to Top

如何在运行当中装载图片?
以下例程实现了在运行当中为TREND控件的BackPicture属性添加图片。例程使用了一个按钮调用了文件对话框,这个方法适用于所有的图片文件。当然您不需要使用这个对话框和这么多代码。在设计模式下图片可以被很方便地装载并被编译到应用程序内部。

HRESULT _AfxCreateStreamOnFile(LPCTSTR pszPath, LPSTREAM* ppstm,LONG* plSize)
{
ASSERT(pszPath != NULL);
ASSERT(ppstm != NULL);

*ppstm = NULL;

if (plSize != NULL)
*plSize = 0;

CFileStatus fstatus;
CFile file;
HRESULT hr = E_FAIL;
? LONG cb;

if (file.Open(pszPath, CFile::modeRead) &&
file.GetStatus(pszPath, fstatus) &&
((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;

if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
BOOL bRead = (file.ReadHuge(pvData, cb) == (ULONG)cb);
GlobalUnlock(hGlobal);

if (bRead && SUCCEEDED(hr = CreateStreamOnHGlobal(hGlobal, TRUE, ppstm)))
{
ASSERT(*ppstm != NULL);
if (plSize != NULL)
*plSize = fstatus.m_size;
hr = S_OK;
}
}

if (FAILED(hr))
GlobalFree(hGlobal);
}
else
hr = E_OUTOFMEMORY;
}
else
hr = E_ACCESSDENIED;

return hr;
}

void CVCDemoDlg::OnBitmapBUTTON()
{
CString strFilter, strTitle;

strFilter.LoadString(AFX_IDS_PICTUREFILTER);
strTitle.LoadString(AFX_IDS_PICTUREBROWSETITLE);
CFileDialog fdlg(TRUE, NULL, NULL,
OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY |
OFN_PATHMUSTEXIST,
strFilter);

fdlg.m_ofn.lpstrTitle = strTitle;

int nResult = fdlg.DoModal();
SetFocus();

if (nResult != IDOK)
return;

CString strPath = fdlg.GetPathName();

LPSTREAM pstm = NULL;
LONG lSize;
HRESULT hr;

if (FAILED(hr = _AfxCreateStreamOnFile(strPath, &pstm, &lSize)))
{
UINT idsText;
CString strText;
CString strCaption;

switch (GetScode(hr))
{
case E_OUTOFMEMORY:
idsText = AFX_IDP_PICTURETOOLARGE;
break;
case E_ACCESSDENIED:
idsText = AFX_IDP_PICTURECANTOPEN;
break;
default:
idsText = AFX_IDP_PICTUREREADFAILED;
break;
}

AfxFormatString1(strText, idsText, strPath);
strCaption.LoadString(AFX_IDS_PICTURE_PPG_CAPTION);
MessageBox(strText, strCaption, MB_OK | MB_ICONEXCLAMATION);
SetFocus();
return;
}

ASSERT(pstm != NULL);

LPPICTURE pPict;

if (SUCCEEDED(OleLoadPicture(pstm, lSize, FALSE, IID_IPicture, (LPVOID *)&pPict)))
{
ASSERT(pPict != NULL);

LPPICTUREDISP pPictDisp = NULL;
if(SUCCEEDED(pPict->QueryInterface(IID_IPictureDisp,(LPVOID*)&pPictDisp)))
{
ASSERT(pPictDisp != NULL);

m_Trend1.SetBackPicture(pPictDisp);
pPictDisp->Release();
}
pPict->Release();
}
else
{
CString strText;
CString strCaption;
AfxFormatString1(strText, AFX_IDP_PICTURECANTLOAD, strPath);
strCaption.LoadString(AFX_IDS_PICTURE_PPG_CAPTION);
MessageBox(strText, strCaption, MB_OK | MB_ICONEXCLAMATION);
SetFocus();
}
pstm->Release();
}

Back to Top
如何使用 TREND 控件的 AddXYArray 方法?
以下例程实现了这个技巧。

void CTrendDemoDlg::OnTimer(UINT nIDEvent)
{
    double x,y,v[10][2];
    int i=0;
    VARIANT varray;
    SAFEARRAY *psafearray;


    //Speed
    switch (Speed)
    {
        case 0: //normal
            x += 0.1;
            y = 8 * sin(x) + 3 * cos(x * 0.5);
            m_Trend1.AddY(0, y);
            break;
        case 1: //fast
            for(i=0;i<15;i++)
            {
            x += 0.1;
            y = 8 * sin(x) + 3 * cos(x * 0.5);
            m_Trend1.AddY(0, y);
        }
            break;
        case 2: //really fast
            psafearray = (SAFEARRAY *) new char[sizeof(SAFEARRAY) + sizeof(SAFEARRAYBOUND)];
            psafearray->cDims = 2;
            psafearray->cbElements = 8;
            psafearray->rgsabound[0].cElements = 10;
            psafearray->rgsabound[0].lLbound = 0;
            psafearray->rgsabound[1].cElements = 2;
            psafearray->rgsabound[1].lLbound = 0;
            psafearray->pvData = (void *) v;

            varray.vt = VT_ARRAY | VT_R8;
            varray.parray = psafearray;

            for(i=0;i<10;i++)
            {
            x += 0.1;
            v[i][0] = x * 10.;
            v[i][1] = 8 * sin(x) + 3 * cos(x * 0.5);
        }

            m_Trend1.AddXYArray(0, &varray);
            break;
    }

    CDialog::OnTimer(nIDEvent);
}


Back to Top
 
 
北京世纪飞扬科技发展有限公司 版权所有 京ICP备05074308号