c++ builder 点滴

DLL接口中传进函数指针

typedef  bool  ( *FUNC_InsertExcelValue)(AnsiString FieldName,AnsiString Fvalue,bool FIsTitleFlag,bool FIsAppendFlag,bool FIsPostFlag);

引用dll接口的程序中也要加上这个函数声明

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CoInitialize(NULL);

CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让 线程注册一个套间,而线程运行过程中必然在此套间。

CoInitialize是Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象,应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。

CoUninitialize;

创建新的应用程序就调用CoInitializeEx代替CoInitialize。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

动态加载dll接口函数
typedef bool   (_stdcall *openEXCEL)(AnsiString filename);
openEXCEL open=NULL;
HINSTANCE H=LoadLibraryA("×××.dll")
open=(openEXCEL)::GetProcAddress(H,"接口函数");
open("");

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EXE执行时带参数。
WinExec("位置 \\\×××exe  connectionstring  |",SW_SHOW );
程序中传进来的参数保存在ParamStr(i),参数个数用ParamCount()得到

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

发送WM_COPYDATA消息
        HWND wnd="×××";
        AnsiString str="×××";
        COPYDATASTRUCT myCopyDATA;
        myCopyDATA.cbData=str.Length();
        myCopyDATA.lpData=str.c_str();
        SendMessage(wnd,WM_COPYDATA,NULL,(LPARAM)&myCopyDATA);
响应接收到的WM_COPYDATA信息
头文件中类内
void __fastcall fun_copydata(TWMCopyData &Msg);//声明响应函数
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, fun_copydata)
        END_MESSAGE_MAP(TForm)
cpp文件中实现:
void __fastcall TForm1::fun_copydata(TWMCopyData &Msg)
{
    COPYDATASTRUCT *cds;
    char* DataBuf;
    cds=(COPYDATASTRUCT*)Msg.CopyDataStruct;
    DataBuf=new char[100];
    memset(DataBuf,0,100);
    CopyMemory(DataBuf,cds->lpData,cds->cbData);
    AnsiString Str=AnsiString(DataBuf);
    delete DataBuf;
}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码  实现  模拟 键盘按下、弹起

        keybd_event(VK_ESCAPE,0,0,0);
        keybd_event(VK_ESCAPE,0,KEYEVENTF_KEYUP,0);

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DLL中有Form,如果dll中接口函数传进来调用dll的窗口句柄,如何使dll中的form的窗口的图标和调用者的一致

TMemoryStream *pStream=new TMemoryStream();
    pStream->SetSize(1024);
    mainApp->Icon->SaveToStream(pStream);

    pStream->Seek(0,soFromBeginning);
    Application->Icon->LoadFromStream(pStream);
    delete pStream;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于vector

#include "map.h" 

#include “vector.h”

map<int,int> b;  b[0]=1;b[1]=2;

map<AnsiString,AnsiString> string;  string["wowo"]="peng";string["shishi"]="xiao";

if(string.count("wowo")>0) 可以用来判断索引“wowo”存在否。

vector<AnsiString> a;   a.push_back("wo");    ShowMessage(a[0]);或者ShowMessage(a.at(0));

对vector类型进行排序

vector<button*> globalButton;

bool mysort(const button* v1,const button* v2)
{
    return v1->designinfo<v2->designinfo;
}

sort(globalButton.begin(),globalButton.end(),mysort);

迭代器

 vector<int>::iterator iters;

for(iters=move_designinfo.begin();iters!=move_designinfo.end();++iters)
 {

     globalEdit.at(*iters)->Style->Shadow=False;
 }

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

改变控件的一些枚举属性

t_TcxTextEdit->Style->TextStyle=TFontStyles()<<fsUnderline<<fsItalic;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

实现对控件的一些交互操作

TControl* control=(TControl*)Sender;

ReleaseCapture(); //释放鼠标监控

control->Perform(WM_SYSCOMMAND,0xF001,0);//左边框可伸缩

control->Perform(WM_SYSCOMMAND,0xF012,0);//控件可拖拽移动

control->Perform(WM_SYSCOMMAND,0xF002,0);//右边框可伸缩

改变鼠标的样式

if (X>=0&&X<=5)
    {
        control->Cursor=crSizeWE;  //向左拉 箭头
    }
    else if (X>5&&X<control->Width-5)
    {
        control->Cursor=crHandPoint;  //小白手
    }
    else if (X>=control->Width-5&&X<=control->Width)
    {
         control->Cursor=crSizeWE;   //向右拉  箭头
    }

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

panel控件没有Canvas 画布属性,怎么办?
            TCanvas* c=new TCanvas();
            c->Handle=GetDC(mainPanel->Handle);
            c->Pen->Color=clDefault;
            c->Pen->Style=psDot;
            c->MoveTo(start->x,start->y);
            c->LineTo(end->x,start->y);
            c->LineTo(end->x,end->y);
            c->LineTo(start->x,end->y);
            c->LineTo(start->x,start->y);
            delete c;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

程序关闭提示信息!
int v=Application->MessageBox("是否保存修改?","温馨提示",MB_YESNOCANCEL|MB_ICONQUESTION);
v=2;//取消
v=6;//是
v=7;//否

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

类声明中如果有new出来的成员,要在析构中释放!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在 Canvas 上画出任意长宽比例,旋转任意角度的,带反走样算法(anti-aliased)的字符串

TCanvas *lpCvs = PaintBox1->Canvas;
  HFONT hFnt = CreateFont(
    -MulDiv(40,GetDeviceCaps(lpCvs->Handle,LOGPIXELSY),72), //字高40磅
    -MulDiv(10,GetDeviceCaps(lpCvs->Handle,LOGPIXELSX),72), //字宽10磅(汉字20磅)
    450,450,             //旋转 45 度 (可旋转任意角度, 以 1/10 度为单位)
    0,0,0,0,
    GB2312_CHARSET,      //简体中文
    0,0,
    ANTIALIASED_QUALITY, //使用反走样(anti-aliased)算法
    0,
    "宋体");             //字体
  SelectObject(lpCvs->Handle,hFnt);
  SetTextColor(lpCvs->Handle,RGB(0,0,255));
  SetBkMode(lpCvs->Handle,TRANSPARENT);
  lpCvs->TextOut(0,200,"欢迎访问 C++ 爱好者网站");
  lpCvs->TextOut(60,200,"www.cppfans.com");
  DeleteObject(hFnt); //释放创建的字体的资源

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值