★初心者にVisual C++ ..
[2ch|▼Menu]
654:デフォルトの名無しさん
07/11/09 20:34:42
コンパイル通りました。ありがとうございました。
実はURLリンク(fatalita.sakura.ne.jp)のサイトのlesson1を
実行したかったのですが、コンパイルは通っても画面がすぐに消え
"ハンドルされていないwin32の例外が発生しました"
と出て実行できません。
何がおかしいのでしょうか。

655:デフォルトの名無しさん
07/11/09 21:36:28
そんな糞サイトの後始末頼まれても迷惑
書いた本人に直接聞けよ

656:デフォルトの名無しさん
07/11/10 00:33:26
うは、声がきもい。
インデントが変態。
空白の明け方がへぼい。
思考の流れが行き当たりばったり。

657:デフォルトの名無しさん
07/11/10 01:27:18
面白そうなのでオレも見てみた。
インデントが変???ぜんぜん変じゃないんだけど・・・

っつう事で、>>656 がどんな立派なコードを書いてるのか、期待age

658:デフォルトの名無しさん
07/11/10 01:27:26
URLリンク(www.wisdomsoft.jp)

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
CHAR chStr[128];

wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);

return 0;
}

エラー 1 error C2664: 'wsprintfW' : 1 番目の引数を 'CHAR [128]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) c:\documents and settings\gald.pc-p4gald\デスクトップ\sdaf4e\sdaf4e\asdf.cpp 7
エラー 2 error C2664: 'MessageBoxW' : 2 番目の引数を 'CHAR [128]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) c:\documents and settings\gald.pc-p4gald\デスクトップ\sdaf4e\sdaf4e\asdf.cpp 8
というエラーで実行できないんだけど
なぜでございましょう?

つか、VBやらC#の型はわかりやすいのに
WCHARとかTCHERとかLPSTRとか理解しにくい型が多くて苦しい

659:デフォルトの名無しさん
07/11/10 01:31:08
>>658
エラー通りだな
CHAR chStr[128];

TCHAR chStr[128];
に変更すればいいんでない?
それでエラーが出るなら、<tchar.h>をインクルードすればOK


660:デフォルトの名無しさん
07/11/10 01:32:52
プロジェクトがユニコードになってるからだよ。
ANSIに変更しよう。
初心者がかならずつまづく超FAQだね。

661:デフォルトの名無しさん
07/11/10 01:42:19
何回も同じ質問を見てるな
テンプレにでも入れた方がいい気がする

662:若者は馬鹿者 ◆KorX0HCHGU
07/11/10 01:43:24
>>659

#include <windows.h>
#include <tchar.h>

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
TCHAR chStr[128];

wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);

return 0;
}

エラー 1 error C2664: 'wsprintfW' : 2 番目の引数を 'const char [26]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)

だそうでつ

>>660
プロジェクトのプロパティ-構成プロパティ-全般 の
文字セットを「Unicode文字セットを使用する」から「設定なし」にしたら
上記のコードが動いたわけですが、
これはソースコードそのものがUnicodeだったからダメだったってことでつか?
理由がよくわからんです


663:デフォルトの名無しさん
07/11/10 02:01:46
>>662
ユニコードじゃ無いアプリケーションを、ユニコードアプリケーションとしてコンパイルしようとした。

URLリンク(www.wisdomsoft.jp)
ここには「将来性を考えて、これから文字コードは Unicode を用いるべきです。 」とか書いてあるけど・・・
初心者はユニコードアプリには手を出さんほうがいいよ。もうすこし慣れてからがいい。
よっぽど注意深くコーディングしないと、ワケワカランことになるよ。

664:デフォルトの名無しさん
07/11/10 02:03:43
>>662
_T("インスタンスハンドル : %d")
とすれば、いいよ

TCHARってのは、コンパイル時に自動で、マルチバイト文字セットとUNICODE文字セットを切り替えてくれます
文字リテラル("文字列"とか'a'とか)については、_Tもしくは、TEXTマクロで、マルチバイト文字セットとUNICODE文字セットの変更を自動でしてくるようになります

ソースコードがUNICODEとか言うんじゃなく、現在扱っている文字が何なのかをコンパイラに教えてやる必要があるって事です
それを省略したら、勝手に、ANSIとかOEMとか言う文字セットとして扱われるって事です


665:デフォルトの名無しさん
07/11/10 03:09:35
非ユニコードアプリとユニコードアプリの差をまず理解しないとだめってことでつね

666:デフォルトの名無しさん
07/11/10 10:46:55
今、ゲーム作ってるんですけど教えてください。(ゲ製作で聞くべき?)

ゲームの画面を(ウィンドウが隠れたりしても)表示させるために
WM_PAINTで

BitBlt(hDC2,0,0,200,200,GetDC(hWnd),0,0,SRCCOPY);

てな感じでhDC2に退避させて、ウィンドウが隠れたりして再表示する時に
hDC2から持ってくる・・・という風にしたいんですが、

1.WM_PAINTの部分で画面を退避させるという事は変でしょうか?
  「普通はこうやる」っていうのがあれば教えて頂きたい。

2.退避させた画面はどの部分(ハンドラ)で戻すべきですか?
  今のところ、WM_TIMERで一定時間ごとに戻してるのですが・・・

667:デフォルトの名無しさん
07/11/10 10:56:55
予めメモリDCを作っておいて、描画は全てそこへ行う。
WM_PAINTでは、そのメモリDCからウィンドウDCへのBitBltに限る。
ってのが普通。

668:デフォルトの名無しさん
07/11/10 11:32:26
>>667
いまどきそんな原始的な方法なんかw

669:デフォルトの名無しさん
07/11/10 11:38:55
でも666はありえないだろ。
話はそれるがReleaseDCしていないのも目に付くし。


670:デフォルトの名無しさん
07/11/10 18:42:02
>>657
void main() {


671:デフォルトの名無しさん
07/11/10 18:43:53
夫失敬。

>>657
void main(){
 while (1)
 {
  DrawMap();
 }
}
--
変態かどうかは兎も角、不思議なコーディングスタイルだとは思う。

672:デフォルトの名無しさん
07/11/11 00:32:33
めんどくせー > VC++
Formねーじゃん

どうやってGUIつくんだよ

673:デフォルトの名無しさん
07/11/11 00:46:10
珍しいVC++だね。ウチのにはForm付いてるよ。

674:デフォルトの名無しさん
07/11/11 00:56:55
うちのはintも付いてない

675:デフォルトの名無しさん
07/11/11 01:03:24
それVirtualConsoleだろ

676:デフォルトの名無しさん
07/11/11 01:40:15
VC6.0でプログラムしています。
MFCは使わず、APIのみ。

ダイアログボックスにコンボボックスを貼り付けて
内容(数字)をリストから選択するような動作をさせたいと思っています。
ワードでフォントを変更するときのコンボボックスのようなイメージです。

VC上でダイアログボックスにコンボボックスを貼り付け、
コンボボックスのプロパティのデータ にある”リストボックス項目の入力(N)”に
選択したい数字のリストを並べれば良いかと思ったのですが
実際に動かしてみると コンボボックスの▼を押してもキーボードの↓を押しても
リストが現れません。
やり方が間違っているでしょうか?


関係ないかもしれませんが手元の参考書ではリストボックスを使用する場合の方法が書いてあり
リストボックスを初期化するにはSendDlgItemMessage()関数を使用するとのことだったので
試しにやってみましたがリストボックスではリストに文字列を追加できましたがコンボボックスでは追加されませんでした。

内容に不足などありましたらご指摘をお願いします。

677:デフォルトの名無しさん
07/11/11 05:28:25
>コンボボックスの▼を押してもキーボードの↓を押しても
>リストが現れません。

ああこれね

678:676
07/11/11 07:36:53
>>677
おはようございます。
良くある質問でしょうか?

申し訳ないですが質問内容が間違ってました。
▼ボタンを押すとドロップダウンリストは出ます。
しかし、中が空っぽです。
リソースエディタで入力した内容を反映させたいのですが。

679:デフォルトの名無しさん
07/11/11 08:28:15
早まって答えなくてよかった
>リストボックスではリストに文字列を追加できましたがコンボボックスでは追加されませんでした

問題はこれか

680:96
07/11/11 09:14:14
リソースエディタのコンボボックスまわりの内容はこんな感じです
// Dialog
//

IDD_CONFIG DIALOG DISCARDABLE 125, 110, 194, 95
STYLE DS_SYSMODAL | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_VISIBLE |
WS_CAPTION
CAPTION "CONFIG"
FONT 9, "MS Pゴシック"
BEGIN
LTEXT "コンボボックスで値を選択してください",IDC_STATIC,7,19,77,8
PUSHBUTTON "OK",IDC_CONFIG_OK,133,14,26,15
COMBOBOX IDC_COMBO2,86,16,46,71,CBS_DROPDOWNLIST |
CBS_NOINTEGRALHEIGHT | WS_TABSTOP
END

// Dialog Info
//

IDD_CONFIG DLGINIT
BEGIN                  ←コンボボックスのリストに表示したい値(1〜20の数字)
IDC_COMBO2, 0x403, 2, 0
0x0031,
IDC_COMBO2, 0x403, 2, 0
〜〜〜〜省略〜〜〜〜〜〜〜〜
IDC_COMBO2, 0x403, 3, 0
0x3931, "\000"
IDC_COMBO2, 0x403, 3, 0
0x3032, "\000"
0
END

681:676=680
07/11/11 09:15:52
名前欄ミスしました。

682:デフォルトの名無しさん
07/11/11 09:31:42
リソースレベルでコンボボックスのデータを定義できるのはMFCの独自機能。
リソースビューの*.rcを選んでプロパティを見てもらえば分かるが、
'Mfc Mode'という項目が用意されている。
これをFalseにすると、コンボボックスのプロパティでData部分が無効になる。

683:676
07/11/11 13:38:36
>>682
なるほどそういうことでしたか。
ありがとうございます。

リストの値をSendDlgItemMessage()関数で追加できないと書きましたが
参考書で引数に LB_ADDSTRING を指定しているところで
CB_ADDSTRING を指定するようにしたところリストに追加できました。
ありがとうございました。

684:デフォルトの名無しさん
07/11/11 15:40:55
質問させてください。
Visual C++ .net 2005で開発を行っています。

フォーム(Form1)やピクチャボックス(pictureBox1)に簡単なグラフを表示させたいのですが、
button1_Click等で描画すると、一度非表示になった部分の線が消えてしまいます。

Form1_Paintイベント内で描画すれば解決するのですが、毎回データを読み込んだり計算するのが
無駄に感じます。

Form1で非表示になった部分を消さないための方法はあるのでしょうか?


または、なんらかのバッファに描画して、それをForm1_Paint内で毎回読み出すという方法のほうがいいのでしょうか?
そのための方法等があれば教えてください。

よろしくお願いします。

685:684
07/11/11 15:44:04
補足

線は、
 Graphics^ gr = pictureBox1->CreateGraphics();
 Pen^ pen1 = gcnew Pen(Color::Black,2);
 gr->DrawLine(pen1,10,10,200,200);
こんな感じで書いています。

686:デフォルトの名無しさん
07/11/11 22:25:30
>>684
Imageに描いて、Paintイベントでgr->DrawImage

687:648
07/11/12 00:13:47
>686
なるほど、ありがとうございます。

Bitmapをバッファとして使い、Graphics::FromImageで取り込んだイメージに対して、
描画を行いました。おかげでうまくいきました。


↓みたいな感じでよろしいでしょうか? 何か改善点があればご指摘お願いします。

Bitmap^ bmap1;
private: System::Void mnDraw_Click(System::Object^ sender, System::EventArgs^ e) {
Pen^ pen1 = gcnew Pen(Color::Black,2);
        Graphics^ gr1 = Graphics::FromImage(bmap1);
gr1->DrawLine(pen1,10,10,100,100);
// gr1->Dispose(); //なぜかエラーになる
Form1::Refresh();
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
bmap1 = gcnew Bitmap(200,200);
}
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
e->Graphics->DrawImage(bmap1,100,100,200,200);
}


688:デフォルトの名無しさん
07/11/12 00:15:57
>>687
Bitmap^ の 「^ 」 ってどういう意味?

689:若者は馬鹿者 ◆KorX0HCHGU
07/11/12 00:16:21
Win32アプリ開発で
VSの出力の部分にウインドウメッセージを表示したいのですが
.netでいうSystem.Diagnostics.Debug.Printに相当する機能はないですか?


690:デフォルトの名無しさん
07/11/12 00:18:17
>>689
ドットネットの質問は他所でやれ馬鹿者!

691:デフォルトの名無しさん
07/11/12 00:24:38
>>690には>>689が”ドットネットの質問”に見えるらしいw

692:684
07/11/12 01:09:01
>688
自動でガーベージコレクションをやってくれるようです。ようは、使い終わったら勝手にメモリを開放してくれるらしい。



693:デフォルトの名無しさん
07/11/12 03:14:25
>>692
なるほどー 2005からの機能ですね

694:デフォルトの名無しさん
07/11/12 08:44:30
win32APIで虫眼鏡のプログラムを作ってます。
メモリデバイスコンテキストでマウスカーソル周辺を拡大したものを
ディスプレイのデバイスコンテキストに転送してるんですが、
マウスを移動させたときに先ほど拡大した部分を元に戻して
移動先のマウスカーソル周辺をまた拡大という風にしたいんです。

ですが、毎回GetDC(0)をしたとしても拡大した後のディスプレイでは初期化できないし、
hdc2という二つ目のデバイスコンテキストに拡大前の状態を退避させて
hdc1に復活させようと思ったのですがうまくいきません。
さらに、メニューを開いたり新たにソフトを起動させたりと、
刻々と変化するディスプレイの状態を追いかけつつ拡大できるようにしたいのです。

探し方が悪いのかもしれませんが、
いろいろ検索しましたが良い解決法が見つかりませんでした。
それに虫眼鏡のプログラミングを解説してるサイトもなさげだし・・・。

このような場合、どのような方法を用いればいいのでしょうか?
よろしくお願いします。

695:デフォルトの名無しさん
07/11/12 09:49:55
MSDNのサンプルじゃダメなの?

/****************************** Module Header *******************************
* Module Name: zoomin.c
*
* Microsoft ZoomIn utility. This tool magnifies a portion of the screen,
* allowing you to see things at a pixel level.
*
* History:
* 01/01/88 Created.
* 01/01/92 Ported to NT.
* 03/06/92 Cleanup.
*
****************************************************************************/

696:デフォルトの名無しさん
07/11/12 10:35:31
一応
.netを使ったC++/CLI は、普通のC++とは全く別物
.net使いたいならC#がいいと思う

697:デフォルトの名無しさん
07/11/12 12:45:26
argcとargvについて教えてください。

698:694
07/11/12 13:27:05
>>695
そのページってどこを探したらありますかね?
MSDNのサイト調べても見あたらなかったんですが…。
教えて君で申し訳ありません。

699:デフォルトの名無しさん
07/11/12 16:26:41
>>698
Platform SDKはインストールしてる?

700:デフォルトの名無しさん
07/11/12 17:51:17
Visual Studio 2005を使って、DirectXプログラムを作ろうとしてます。
ちなみにOSはWindowsXP Home Editionです。

ネット上の解説サイトで、Visual C++ Express Editionを使って
Windowsアプリケーションを作成する場合にはPlatform SDKが必要と書いてあるんですが、
Visual Studio 2005を使う際にもPlatform SDKをインストールしておいたほうが良いでしょうか?

701:デフォルトの名無しさん
07/11/12 17:58:14
今ならPlatform SDKよりWindows SDKお勧め。
DirectXには、DirectX SDKが必要。
ただし、DirectShowには上2つの内どちらかが必要。

702:デフォルトの名無しさん
07/11/12 18:04:12
>>701
ありがとうございます。

DirectShowが何かよくわかりませんが、
解説本がPlatform SDKで進めているので、
これとDirectX SDKでやってみます。


703:デフォルトの名無しさん
07/11/12 18:20:49
VisualC++ Expressでプログラム製作をしています。
プログラム実行中にコードを書き換えてAlt+F9を押すと、動的にプログラム
の内容を変えてくれますが、ボタンを押しても出来ない時があります。
これは何が原因なのでしょうか?

704:700
07/11/12 20:24:35
度々すみません。
DirectXのテストをしようと、
D:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\CreateDevice.cpp
を自分のプロジェクトフォルダにコピー、既存の項目を追加して、
ソリューションのビルドをしてみると以下のエラーが出ました。

CreateDevice.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 "long __cdecl InitD3D(struct HWND__ *)" (?InitD3D@@YAJPAUHWND__@@@Z) で参照されました。
C:\Documents and Settings\(ユーザ名)\My Documents\Visual Studio 2005\Projects\d3dtest01\Debug\d3dtest01.exe : fatal error LNK1120: 外部参照 1 が未解決です。

そこで、Direct3DCreate9を含む「d3d9.lib」をプロジェクト名→プロパティ→リンカ→入力の「既存の依存ファイル」に追加したのですが、
まだ同じエラーが起こります。
D:\Program Files\Microsoft Platform SDK\Bin/Lib/Includeのパスは追加したのですが、
他に何が原因なんでしょうか?


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4936日前に更新/165 KB
担当:undef