電子書籍の厳選無料作品が豊富!

開発環境
XP Home Edtion
SQL Server2005 Express Edtion

DBから選択してきたその値に .png という文字列を繋げて対応する画像を表示を反映させたいのですがどのようにすればよいですか?

String^ str;
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\TEST.mdf;Integrated Security=True;User Instance=True");
sqlConn->Open();
str = "SELECT gazou FROM table1 WHERE gazou=1";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);
SqlDataReader^ exeReader = sqlCmd->ExecuteReader();

while(exeReader->Read() ) {
str3=exeReader["gazou"]->ToString();
System::Diagnostics::Debug::WriteLine(str3);
HDC hMdc;
char* dstChar3;
dstChar3 = (char*)(void*)Marshal::StringToHGlobalAnsi(str3);
LPCSTR dstLPCSTR3;
dstLPCSTR3 = (LPCSTR)dstChar3;
LPCSTR name = "'"+dstLPCSTR3+"'.png";



HBITMAP hbmp = (HBITMAP)LoadImage( NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
hMdc= CreateCompatibleDC(hdc );
SelectObject(hMdc, hbmp );
BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY);
DeleteDC(hMdc);
DeleteObject(hbmp);
}
sqlConn->Close();

なにとぞよろしくお願いします。

A 回答 (3件)

 こんにちは。



 この「str3」は「String^型」でしょうか?(間違いなくString^型だと思う)。でしたら、以下で簡単に合成出来ます。

 str3 = String::Concat("'", str3, "'", ".png");

 それから、Marshal::StringToHGlobalAnsi()の後、Marshal::FreeHGlobal()で開放しないとメモリリークするので要注意です。
 以下参考程度に。

 while(exeReader->Read())
 {
    str3 = exeReader["gazou"]->ToString();
    System::Diagnostics::Debug::WriteLine(str3);
    //文字列を合成してファイル名を作る
    str3 = String::Concat("'", str3, "'", ".png");

    IntPtr name = Marshal::StringToHGlobalAnsi(str3);
    HBITMAP hbmp = (HBITMAP)LoadImageA( NULL, static_cast<LPCSTR>(name.ToPointer()), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );
    //開放しないと駄目
    Marshal::FreeHGlobal(name);

    HDC hMdc = CreateCompatibleDC(hdc );
    SelectObject(hMdc, hbmp );
    BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY);
    DeleteDC(hMdc);
    DeleteObject(hbmp);
 }
    • good
    • 0
この回答へのお礼

返答遅れてすいません。
メモリの開放をしないといけないとは知りませんでした、ご指摘ありがとうございました、そして理解できました。

>この「str3」は「String^型」でしょうか?
すいません、初期化のところを書き忘れました、その通りです。

お礼日時:2009/01/05 01:06

時と場合によっては sprintf系も選択肢にあがりますな>#1.


sprintf(name, "'%s'.png", dstLPCSTR3);
みたいに.
    • good
    • 0
この回答へのお礼

補足していただいてありがとうございました、とても役に立ちました。

お礼日時:2009/01/04 01:34

> LPCSTR name = "'"+dstLPCSTR3+"'.png";


LPCSTRですと内容の変更できない変数の宣言になるのでまずいです
LPSTRまたはLPTSTRなどとして dstLPCSTR3が十分収まる大きさの変数を用意しstrcpy/strcatなどで加工しましょう

LPSTR name[MAX_PATH];
strcpy( name, dstLPCSTR3 );
strcat( name, ".png" );
といった具合です

ファイル名の先頭に 'を付加して 拡張子の手前に' を付加するのであれば
strcpy( name, "'" );
strcat( name, dstLPCSTR3 );
strcat( name, "'.png" );
といった記述になります ・・・
    • good
    • 0
この回答へのお礼

分かり易い説明ありがとうございました。

お礼日時:2009/01/04 01:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!