tettsu の回答履歴
- C言語で取得した文字列を、C++の文字列として取り扱いたいです。
C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。
- 【OpenGL ドラッグ&ドロップのやり方教えて下さい】
現在OpenGLでプログラミングをおこなっているのですが、分からないことがあるので教えていただければと思います。 ウィンドウ内に物体を置いて、それをマウスでドラッグ&ドロップのように移動させるプログラムをgltranslateで作ってみたのですが、うまくいきません。 ドラックして移動させるという動作をどの様に実現すればよいのでしょうか?プログラミング初心者なので、わかりやすく教えていただければと思います。 また、参考になるプログラム等あるサイトなどあれば教えてください。宜しくお願いいたします。
- BitBltについて。
どなたか経験のある方、わかる方居られましたら教えてください。 プリンタのデバイスコンテキストからメモリDCに描画してビットマップを作成したいと思っているのですが、プリンタDCからメモリDCへのBitBltがうまくいっていないのか、完成イメージが真っ黒になります。 hMemDC = CreateCompatibleDC(hPrinterDC); hBitmap = CreateCompatibleBitmap(hPrinterDC,lnWidth,lnHeight); Obj = (HBITMAP)SelectObject(hMemDC,hBitmap); iRet = GetDeviceCaps(hMemDC,RASTERCAPS); // iRet の戻り値は 28313(10進)でした。 // コピー iRet = BitBlt(hMemDC,0,0,lnWidth,lnHeight,hPrinterDC,0,0,SRCCOPY); // iRet の戻り値は 1 になってました。 本来は lnHeight の値が BitBlt の戻り値になるのかと思いますがうまくいきません。 hPrinterDC はもともと印刷用の関数で使用しているものなので、そこには問題が無いのではないかと自分では思っていますが、わかる方居られましたら教えていただけませんでしょうか?
- ビットマップの編集について
どなたかビットマップ編集の経験のある方で分かる方おられましたらアドバイス頂きたいと思い書かせていただきます。 デバイスコンテキストからビットマップを作成したいのですが、作成結果が真っ黒なビットマップになります。多分ビットマップ情報がメモリDCに描画できていないまま作成しているという事なのでしょうか? MemDC = CreateCompatibleDC(元DC); ↓ hBitmap = CreateCompatibleBitmap(元DC,Width,LlnHeight); ↓ SelectObject(MemDC ,hBitmap) ↓ GetObject(MemDC ,tpBitmap,(LPSTR)&tpBitmap); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,NULL, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,(LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize(lpbi),(LPBITMAPINFO)lpbi, DIB_RGB_COLORS); 関係ありそうな所ははこんな感じで操作してます。 Bitbltがサポートされていない様なので別の方法でメモリDCに転送させなければいけないのでしょうか?
- ビットマップの編集について
どなたかビットマップ編集の経験のある方で分かる方おられましたらアドバイス頂きたいと思い書かせていただきます。 デバイスコンテキストからビットマップを作成したいのですが、作成結果が真っ黒なビットマップになります。多分ビットマップ情報がメモリDCに描画できていないまま作成しているという事なのでしょうか? MemDC = CreateCompatibleDC(元DC); ↓ hBitmap = CreateCompatibleBitmap(元DC,Width,LlnHeight); ↓ SelectObject(MemDC ,hBitmap) ↓ GetObject(MemDC ,tpBitmap,(LPSTR)&tpBitmap); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,NULL, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,(LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize(lpbi),(LPBITMAPINFO)lpbi, DIB_RGB_COLORS); 関係ありそうな所ははこんな感じで操作してます。 Bitbltがサポートされていない様なので別の方法でメモリDCに転送させなければいけないのでしょうか?
- ビットマップの編集について
どなたかビットマップ編集の経験のある方で分かる方おられましたらアドバイス頂きたいと思い書かせていただきます。 デバイスコンテキストからビットマップを作成したいのですが、作成結果が真っ黒なビットマップになります。多分ビットマップ情報がメモリDCに描画できていないまま作成しているという事なのでしょうか? MemDC = CreateCompatibleDC(元DC); ↓ hBitmap = CreateCompatibleBitmap(元DC,Width,LlnHeight); ↓ SelectObject(MemDC ,hBitmap) ↓ GetObject(MemDC ,tpBitmap,(LPSTR)&tpBitmap); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,NULL, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); ↓ Liret = GetDIBits(元DC, hBitmap, 0, (WORD)tpBmpIH.biHeight,(LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize(lpbi),(LPBITMAPINFO)lpbi, DIB_RGB_COLORS); 関係ありそうな所ははこんな感じで操作してます。 Bitbltがサポートされていない様なので別の方法でメモリDCに転送させなければいけないのでしょうか?
- VC++ Ver1.51での GetDIBits使用時のエラーについて
GetDIBitsを初めて使用したのですが、コンパイル時にエラーが出るのですがどこが悪いのか気付けません。もし気になる所を見つけられた方は教えて頂けると幸いです。 // 画面のDC取得 LhGamenDC = GetDC(NULL); // メモリデバイスコンテキスト取得 MhBitmapMemDC = CreateCompatibleDC(LhGamenDC); MhBitmapDC = CreateCompatibleBitmap(LhGamenDC,(int)(LlnWidth),(int)(LlnHeight)); LlnSelObj = (HBITMAPSelectObjectMhBitmapMemDC,MhBitmapDC); GetObject(MhBitmapDC,sizeof(LtpBitmapAll),(LPSTR)&LtpBitmapAll); // イメージ全体のサイズ取得 bitsize = LtpBitmapAll.bmWidthBytes; if(rest = (int)bitsize % 4) (int)bitsize += 4 - rest; bitsize *= LtpBitmapAll.bmHeight; //LtpBmpIHに情報セット LiColors = (1 << LtpBmpIH.biBitCount); if( LiColors > 256 ) LiColors = 0; LdwLen = LtpBmpIH.biSize + LiColors * sizeof(RGBQUAD); LhDIB = GlobalAlloc(GMEM_FIXED,LdwLen); LtplpBI = (LPBITMAPINFOHEADER)LhDIB; LbyteBits = (LPBYTE)GlobalAlloc(GMEM_FIXED,bitsize); Liret = GetDIBits(LhGamenDC, (HBITMAP)LtpBitmapAll, 0, (DWORD)LtpBmpIH.biHeight,(LPBYTE)LtplpBI + LdwLen, (LPBITMAPINFO)LtplpBI,DIB_RGB_COLORS); 以下のエラーが出ます。 'cast' : 指定されたオブジェクトは、'struct tagBITMAP ' 型から 'unsigned int '型に変換できません。・ 2つの整数値型の間で情報が失われました。・ 'argument' : 指定された演算子を含む式で、間接参照が矛盾しています。・'GetDIBits' : 実引数の型 4 は引数型リストや関数定義内で与えられた型と不一致です。・'GetDIBits' 実引数が少なすぎます。
- [Win32API]JpegをDIBに変換する
お世話になっています。 C+Win32APIでVC++6.0を使用してプログラムを作成しています。 質問はタイトルの通りです。 Jpegファイルの読み込みにはOleLoadPicture()を使用していましたが、DIBへの変換には一回裏画面に描画してGetPixelでデータを拾う程度しか思い当たりません。 できれば外部ライブラリなどを使わずに解決したいと思っているのですが、よい方法がなかなか見当たりません。 ご存知の方、ご教授いただければ幸いです。
- 締切済み
- C・C++・C#
- noname#75566
- 回答数3
- エラーメッセージを別のパソコンに出すには?
VC++アプリで、エラーの場合にエラーメッセージを表示させたいのですが、表示させるのをそのアプリを起動しているパソコンではなく、ネットワーク上の別のパソコン上に表示させたいのですが、やり方がわからなく困っております。 ちなみにネットワーク上の別パソコンは何も起動していない状態で、ポップアップメッセージ(エラーメッセージ)だけを出したいのですが・・。 どなたかご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。
- カスタムドロー
リストビューのカスタムドローについての質問です。 一列目の項目が、たとえば 1になるとその行全体を赤に 2になるとその行全体を青に という処理をするため、WM_NOTIFYにカスタムドローの処理を記述したのですが、一列目の項目しか色が変わりません。 そこでカスタムドローと一緒に行全体の値を書き換える処理を入れてみたのですが、今度は延々とWM_NOTIFY→更新→WM_NOTIFY・・となっていまい、表示がチカチカ点滅してしまいます。 一列目にカスタムドローの通知が来たとき、他の列にカスタムドロー通知をする方法を探してみましたが、見つかりませんでした。 何か良い方法はないでしょうか。
- VisualC++におけるメインウィンドウの領域に子ウィンドウを配置する際に発生する問題
メインウインドウの領域に子ウインドウを作成し、その子ウインドウの領域にオブジェクトを表示しようとしています。 そこで、子ウインドのプロシージャに描画するソースを書いているのですが、子ウインドウの描画領域には何も表示されず、親ウインドウの描画領域に表示されてしまいます。 どうすれば子ウインドウの領域に描画することができるのでしょうか? 説明の至らない点もあると思いますが、わかる方いらっしゃいましたら宜しくお願い致します。
- 構造体 アドレス
VC++6 こんにちは。構造体のアドレスを文字列ポインタで操作することに悩んでいます。下にソースの一部を書きます。 typedef struct{ char code[100]; int type; }AAA; typedef struct{ double method[4][3]; int area; }BBB; 複数の構造体があり、 BOOL CTestApp::File_Check(){ AAA aaa; ~ db.DB_regi(2, (char *)&aaa); ~ } void CData::DB_regi(int key, char *buff) { switch(key){ ~ case 2: sss.push_back(buff); //vector<char *> sss; break; } で、データを登録し、 int CTestApp::Data_Check() { ~ AAA aaa; db.DB_get(2, (char *)&aaa); ~ } void CData::DB_get(int key, char *buff) { switch(key){ ~ case 2: buff = sss[i]; break; ~ } で、構造体のアドレスを取得しようと思ったら、取得できませんでした。 //DB_getの中では、aaa = (AAA *)buff;とすれば指定の構造体を取得できる。 DB_get関数をどのようにしたら、Data_Check()で、登録した構造体を取得できるのか教えてください。長くなってすみません。
- Windowsプログラミングについて。
プログラム初心者です。現在Win32APIを用いて、簡単なプログラムを作成中です。質問させてください! 今、現在私の作っているアプリケーションのウインドウ上にあるボタンを押すと(例 case IDC_BUTTON1の時、) (1)そのボタンを押してから10秒ほどたったあとに、 あるMessageBoxを表示させたいと考えております。 ↑の(1)のところをどうプログラムで書けばいいのかわかりません。 アドバイスよろしくお願い致します!!
- 半角、全角の判別方法
100バイトの領域の半角、全角を含む文字列のから 40バイトを取得したいのですが、最後は文字化けにならないように したいのですが、どうやればいいでしょうか? strncpy(testBefore,testAfter,40); とかやってみましたが案の定文字化けになってしまいました。 半角の文字コードを全て定義しておき、最後がそれになっていないか比較するという方法以外に何か手はありますでしょうか? 文字コードはEUCです。 宜しくお願いします。
- 動的メモリの確保の仕方がわからなくて困っています
バージョンリソースの情報を取得しようと以下の関数をつくったのですがバージョンがうまく読み出せません。環境はVC6.0++です。 /*--------------------------------------------------------*/ char *get_version() { #pragma comment (lib, "version.lib") char szFileName[MAX_PATH]; DWORD dwZero = 0, dwVerInfoSize; unsigned char *szBufferBlock; void *szBufferVersion; UINT VersionLen; GetModuleFileName( NULL, szFileName, sizeof( szFileName)); dwVerInfoSize = GetFileVersionInfoSize( szFileName, &dwZero); if (dwVerInfoSize){ szBufferBlock = (unsigned char *)calloc( dwVerInfoSize, sizeof(char)); GetFileVersionInfo( szFileName, dwZero, dwVerInfoSize, szBufferBlock); if(!szBufferBlock){ } VerQueryValue( szBufferBlock, TEXT("\\StringFileInfo\\041104b0\\ProductVersion"), &szBufferVersion, &VersionLen); } free((void *)szBufferBlock); return (char *)szBufferVersion; }/*--------------------------------------------------------*/ unsigned char *szBufferBlock;を unsigned char szBufferBlock[1604];のようにして 静的に確保するとバージョンをちゃんと返すのですが、 上記のようにcallocをやnew演算子を使うとソソソソソソソソソソソソのような文字列しか返さなくなります。 原因がわかりません。教えてください。
- レコード件数、レコード長の分からない文字列配列の定義の仕方
あるファイルを読み込み、文字列配列に格納しようと思うのですが、 データが数件の場合もあれば、数万件の時もあるので、 数件の時にも数十万件の領域を確保しておくのは抵抗があります。 そこで一度読み込んでレコード件数、レコード長を取得し callocやmallocなどを使い、領域を定義しようと思うのですが、 どのように定義すればよいかわかりません。 char **testData; を定義してmallocを使用しようと思いましたが、その方法を教えてください。