1 :
デフォルトの名無しさん :
2006/11/29(水) 17:00:54
2
1乙
乙ついでに質問です。 ツールチップを表示するため、CToolTipCtrlのメンバ変数を定義し、 OnInitialUpdate()内でCreate()、Activate(TRUE)、AddTool()を実行しています。 ツールチップを貼り付けたコントロール内でカーソルを移動する際に、即ツールチップを 非表示にしたいのですが、表示されたツールチップ上を通過したときのみ即消えし、それ 以外ではしばらく時間がたたないと消えてくれません。 ツールチップ表示後、マウスカーソルが移動を開始したらすぐにツールチップを消すように するにはどうしたらよいのでしょうか?
5 :
デフォルトの名無しさん :2006/12/07(木) 02:51:32
>>5 Webインストール版だと必要なものだけダウンロードできる。
それをやるにはたぶんCore SDKとIEのやつくらいがあれば十分だと思う。
足りなかったらその分だけをまたダウンロードしろ。
でも、Core SDKだけで100MiBは軽く越えると思う。
人の家かどこか高速回線でCDイメージを落として、CDに焼いてきたほうが早いと思う。
7 :
デフォルトの名無しさん :2006/12/08(金) 06:44:48
>>6 ありがとうございます。
サイズ的に厳しそうなので人に頼むことにしました。。
まずは簡単な数字あてゲームを作りたいので無料の開発環境の作り方を知りたい・・・ 結論として2Dのゲームまで(ゼルダ・ドルアーガ・ワルキューレ)できるような言語はVC++が良いと聞きました。 初心者質問 @ VC++2005エクスプレス エディションをインストールしたのだが どうやって作ればいいのかわからない(手順のサイトあればよろ) A ボーランドのC++ でも作り方をしりたい(手順のサイトあればよろ) B もしあれば他の良いC++の無料をダウンードしたいのですが・・・(VC++の無料版って他にあるのか・・・) ↑C++にはこだわらない(HSP、VB以外で・・・っていうか ないですよね^^) 一応JavaScript で簡単なやつを作った。 1と2は自分PCにインストールプログラムはある。一度インストールはしたが、そこでどうしたらいいのか? まとめとして Bだけ聞きたいです。
不特定のダイアログが、現在 DoModal で表示されているかどうかを 判定する方法はありますか? やりたいことは、ダイアログが DoModal で表示されている最中に、 メインフレームに飛んでくるメッセージ(他プロセスから飛んでくる)に 対して、反応しないようにしたいのです。 ダイアログ表示前後にフラグ立てをしてやればいいんでしょうが、 今後、ダイアログ表示が増えたとき、そのルールを徹底するのが面倒なので、 不特定のダイアログが DoModal されているという状況が判定できないか と考えています。
11 :
9 :2006/12/08(金) 15:00:33
12 :
デフォルトの名無しさん :2006/12/08(金) 21:58:55
Visual C++を始めたばかりのものです。いきなり以下の課題を上司から指示 されました。”ダイアログボックスを表示し て、リストボックスをその中に2つ作り、片方のリストボックスに複数の 文字列を初期状態で挿入されている状態にします。この文字列の1つを選択 してボタンを押すともう片方のリストボックスに移動するようなダイアログ ボックスを作るようにしなさい。”というものです。当方Javaを3ヶ月ほど やった経験があるのでオブジェクト指向は大体わかるのですがC++や VisualC++はまったく初めてです。参考になるお薦めの本がありましたら どうか教えてください。よろしくお願いします。
VCのバージョンは? 新規作成のプロジェクトからMFCのダイアログベースでアプリケーション できた? あとはダイアログにボタン1つリストボックス2つ貼り付け 変数を割り当ててふにふにする。
14 :
12 :2006/12/09(土) 08:46:43
VCのバージョンは6.0です。MFCのダイアログベースでアプリケーション できました。ボタン1つリストボックス2つの貼り付けもできました。 変数を割り当てるところがわかりません。良い本などあったらおしえて ください。よろしくお願いします。
DDX/DDVでgrep メンバ変数じゃなくて一時的にリストボックスの インスタンスへのポインタが取れればいいのなら CDialog::GetDlgItem() を使えばいい 凡例: CXXDlg::OnInitDialog() { ・・・ CListBox* pListBox = (CListBox*)this->GetDlgItem(IDC_LISTBOX); ・・・ } 良い本は俺も知らん
>ボタンを押す ボタンを右クリックしてイベントハンドラの追加 あとはMSDNかヘルプのCListBoxの項目。 VC6は操作がちがうかも。 >良い本 VCとかMFCの本買ったことない。MSDN使って覚えた。
VC++2005EEで、メニューを作ることはできないのでしょうか。 .netのフォームではありません。
できます。
では、その手順を簡単に教えてください。
CreateMenuして、 AppendMenuする。
>>20 それはできますけど
聞きたかったのはリソース作るやつです。
できないっていうことっすか。
フリーソフトとか使ってます^^;
自分でリソーススクリプト書けば良いやん。
23 :
ななし :2006/12/14(木) 13:13:21
あの〜質問なんですが・・・VC++でビットマップを表示させたいのですがインポートしても ビットマップは256色以上含んでいるため表示できませんとでるのですがどうしたらいいのですか??
初めてソフトを作ってみたのですが、バージョン情報に入れるURLの一つが何故かハイパーリンクになりません
どなたかヒントを教えていただけませんか?
↓の
http://hoghog.hog/がそうです 。
//ここから
hoger のバージョン情報
hoger ver 0.1
Copyright (C) 名無しさん 2007 All Rights Reserved.
Web Site :
http://nanashi.hog/ Web Site :
http://hoghog.hog/ //ここまで
使用しているCONTROLは、STATIC, SS_LEFT SS_NOTIFY WS_CHILD WS_VISIBLE WS_GROUPです。
よろしくお願いします。
25 :
デフォルトの名無しさん :2006/12/25(月) 22:15:25
ほしゅあげ
26 :
デフォルトの名無しさん :2006/12/26(火) 01:34:59
一般的に関数の戻り値にローカル値を指定するのはダメですが、 以下のような定数文字列もダメなんでしょうか? 試しに実行したらうまくいったのですが… std::string func() { return "hoge" }
どうみても戻り値はstd::stringです。 本当にありがとうございました。
>>26 戻り値の型が一般型ならば何の問題もない。
問題は、ローカルなオブジェクトをポイントするポインタを返すことだ。
定数はローカルオブジェクトではないから、それを返すことは問題ないし、
まして別の型に変換してしまえば問題になるわけがない。
// 1行目の例
int func() {return 0;}
// 2行目の例
char * func() {char foo[] = "FOO"; return foo;}
// 3行目の例
const char * func() {return "BAR";}
// 4行目の例
std::string func() {return "hoge";}
別の型に変換するという場合をもっと一般的に言えば、 ローカルなオブジェクトそのものを返すのは問題ないという感じか。
呼び出した側が自分のローカルな変数にコピーしてるべ int n; n = f(x); ってやったらf(x)の戻り値を自分のローカル変数に入れてるやん
つまりアクセスするのは自分のローカルだから何の心配も要らない
35 :
デフォルトの名無しさん :2006/12/28(木) 10:21:34
>29が何を言いたいのかもよく判らないが、>30に至っては一体全体何を言いたいのやら。 まして>29が間違いだという>34は何を考えているのかさえ判らない。 結局のところ、>26の疑問は>28で答えられているので>29以降の流れはノイズということで宜しいか。
37 :
デフォルトの名無しさん :2006/12/28(木) 10:48:08
リストボックスにセル範囲を調節できる、|が入ったタイトルバーを 付けたいのですがどうやったらよいかわかりません。どなたか ご存知の方教えてください。よろしくお願いします。
つ[ListView(ListCtrl)]
39 :
デフォルトの名無しさん :2006/12/30(土) 21:13:44
混合モードって一体どうやったら表示出来るんですか。 プロパティで設定しても全く変化がないです。 そもそもドコに表示されるんですか?
デバッグ中
41 :
デフォルトの名無しさん :2006/12/30(土) 22:41:53
VC++6.0でプログラムを始めたものです プログラムの設定をiniファイルで管理しようと思っているんですが iniに0xを記述しなくても16進数のデータを読み込む方法は無いでしょうか? 現在は数値読み込みを使って test=0xFFFFFF のようにして読み込んでいるのですが、他のプログラムのiniで test=FFFFFF の形で読み込んでいるものがあり、方法を調べたんですが見つからなかったので質問しました ご存知の方、是非教えてください。お願いします。
>>41 GetPrivateProfileString()して、strtol()かstrtoul()でもできる。
44 :
41 :2006/12/30(土) 22:50:45
>>42 レス有難う御座います
その方法でやってみます
45 :
41 :2006/12/30(土) 22:55:15
>>43 このスレで発言したのは初めてだったんですが、過去に同じ質問をした方がいたようで申し訳ないです。
最低限過去ログは読むべきでした。
今後は過去ログを読んだ上で質問させていただきたいと思います。
連レスすみませんでした
47 :
39 :2006/12/30(土) 23:06:51
>>40 デバッグ中に、"逆アセンブル"ウインドウを表示する事は出来るのですが、
混合モードについてはは影も形もありません。
何か特別な設定が必要なのでしょうか
debugモードでビルドしたか
50 :
デフォルトの名無しさん :2007/01/05(金) 14:54:42
VC++ 2005で以下のDLL作成を考えています。 1.C言語で作成されたDLL関数を読み込む 2.関数を別名称にしDLL化する。 3.vb.netで作成したDLLを使用する。 1、2を実現するため以下のソースを記載したのですが 構文的におかしくないでしょうか?
51 :
50 :2007/01/05(金) 14:55:19
#include "stdafx.h" #include <stdio.h> #include "api.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #pragma comment(lib,"api.lib") extern "C" __declspec(dllimport) BOOL __stdcall APIOPEN(LPTSTR lpHostName ,LPTSTR lpNetmserviceName); __declspec(dllexport) BOOL CAPIOPEN(LPTSTR host,LPTSTR netmservice) { BOOL r = APIOPEN(host,netmservice); return r; } #ifdef _MANAGED #pragma managed(pop) #endif
構文チェックはコンパイラの仕事
53 :
50 :2007/01/05(金) 16:03:49
>52 失礼しました。 ビルドを実行するとCVTRES の致命的なエラー CVT1100 が発生しました。 MSDNで検索すると/TLBID オプションを変更するとなっているのですが 変更しても同様のエラーが発生します。
プロパティにカテゴリをつけたい場合 IDLファイルにどう書けばいいの?
ICategorizePropertiesを自力実装
56 :
デフォルトの名無しさん :2007/01/10(水) 11:27:08
Win32APIをいぢってプログラムを作ってるんですが、 エディットボックスで日本語入力がうまく行えません。 ウィンドウプロシージャでWM_CREATEのメッセージ処理に、 //ctrls.chatBar⇒HWND //cs⇒LPCREATESTRUCT ctrls.chatBar = CreateWindow(TEXT("EDIT"),TEXT(""), WS_CHILD | WS_VISIBLE, 0,425,531,20, hWnd, (HMENU)CHAT_BAR, cs->hInstance, NULL ); と書いてエディットボックスを貼り付けてます。 日本語を入力する際、何か他に書かないことはあるのでしょうか
フォント
58 :
デフォルトの名無しさん :2007/01/10(水) 12:02:26
HFONT hFont; hFont = CreateFont(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "MS Pゴシック"); SendMessage(ctrls.chatBar, WM_SETFONT, (WPARAM)hFont1, MAKELPARAM(FALSE, 0)); で、フォントを変えてみましたが何もかわりませんでした
59 :
デフォルトの名無しさん :2007/01/10(水) 15:14:12
A,B,Cと3つのボタンを配置し、Aのclick処理を行っている最中にBとCのボタンを先行してclickすると、 Aの処理が終了後B->Cと処理が続きますが、 このBとCの先行入力分のclickイベントを破棄して、無かった事にする方法ってありますか? B,Cがclickされていても、Aの処理終了後は何もしない仕組みが作りたいのですが... VS.NET 2003
60 :
デフォルトの名無しさん :2007/01/10(水) 15:21:55 BE:15528724-2BP(202)
Aの処理のアタマでBとCをdisable。
終了した後にもう一度繰り返し動作させたいのですが、 exit(0);のように簡単に終了させつつ、 繰り返し最初からやり直すコマンドみたいなものはないんでしょうか? 初心者のまま卒業した先輩のプログラムをいじることになったのですが、 クラスやヘッダなど分からないままやらされてます。 どうもバグがあるらしく、先輩のプログラムは終了しないプログラムでした。 (本当は作業が終わったら終了しなくてはならないプログラムです) return;を使ってもどこに返して居るか分かりません。 main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・
無理やり戻したところで、続きを正常に実行できる保障がどこにある。
>>61 >main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・
それは別のバグを仕込むだけの愚行。
まず規定の処理で正しく終了するようにしれ。
64 :
デフォルトの名無しさん :2007/01/17(水) 14:29:56
助けてください Visual C++ 2005 Express Editionを昨日インストールした本当の超初心者なのですが インストールはしっかりできたのですが、新しいプロジェクトを開いても、何の反応 もしない新しいプロジェクトとかかれたものしか出てきません。どうしたらよろしいですか? 教えてください、お願いします
65 :
デフォルトの名無しさん :2007/01/17(水) 16:20:02
MAME32をジョイスティックで動かすことをしたいのですが keybd_eventをつかっても動きません メモ帳で試してみたら、動きました 何か他の方法があるのでしょうか
>>62 続きはありません。
メインじゃないプログラムで「この文章を読み込んだら終了」
ってことになってるんですが、終了させる方法が分かりません。
プログラムが少しできる人に付き添って貰ってreturn;ってのを付けて行ったんですが
だめでした。
>>63 初期化の関数が別にあります。
return;を付けていってもダメなのでmain文に何とか戻す方法は無いか困ってます
>>66 Cを知らないのにソースをいじろうってのが根本的に間違ってます。
まあ試しにsetjmp/longjmpを試すのも面白いかもw
>>67 Cは約半年程授業で習ったのですが、C++は初めて触るような感じです
素人に毛が生えた程度なので超初心者用とタイトルのあるここに書き込みしました
>>68 このプログラム自体は卒業した先輩の卒論ですので、
アップロードのような行為はできないです
サイズとしても26.2Mあります。
このプログラムを使って工場のようなものを擬似的に再現して実験するのですが
実験後、待ち状態のまま終了しないことが分かり弄らされてます。
72 :
デフォルトの名無しさん :2007/01/17(水) 19:09:16
#include <iostream> using namespace std; int main(void) { unsigned char x,y; cout << "2つの値を入力してください。\n"; cin >> x >> y; x -= '0'; y -= '0'; int a = x + y; int b = x * y; printf("x = %d, y = %d, x + y = %d, x * y = %d",x,y,a,b); return 0; } これで出力したら10以上の数値が出ないんですが、 どうしたら出るようになるか教えてください。
73 :
デフォルトの名無しさん :2007/01/17(水) 19:26:55
>>70 様 新規作成したあと新しいプロジェクトとでて、どのボタン押してもフーリズ
したままです
74 :
デフォルトの名無しさん :2007/01/17(水) 20:11:04
Visual Studio 2005でC++のMFCでダイアログベースのアプリを作っているのですが、 C○○DlgクラスのメソッドでgetParent()を使うとNULLが返ってきます。 getWindow(GW_OWNER)も試しましたがNULLが返ってきました。 どんな原因が考えられますか? やりたい事はCProgressCtrl::Create()なのですが、これの引数に親ウィンドウのポインタが必要になります。 アプリ内で子ウィンドウを立ち上げる事はしていないのですが、 この場合親ウィンドウが無いのでそのせいでしょうか?
>>74 そりゃCreateしないとウィンドウは存在しないべ
>>73 新しいプロジェクトってどこにでるの?
通常は、ファイル-新規作成-プロジェクトでWin32を選べば
Win32コンソールアプリケーションが出ると思うけど。
77 :
73 :2007/01/17(水) 21:31:09
>>76様 ありがとうございます Win32っていう選択肢もでてこないんです。ファイルに新規作成という言葉がなくて 類似する言葉は新しいプロジェクトぐらいしかありません。その新しいプロジェクト のなかにはテンプレート、プロジェクトという項目があります。 お手数おかけしますが、どうぞおねがいします
>>74 親ってCProgressCtrlの親だから、DlgからCreateするならthisポインタでOK
79 :
74 :2007/01/17(水) 21:32:29
>>78 thisポインタも試したのですが、
ビルドは通ってもランタイムに不正落ちします。
どんな原因が考えられるでしょうか?
コード見ないと分からない。
>>79 どこでCreateしてるのだ
ダイアログのOnCreate以降じゃないとだめだぜ?
>>77 デフォルトのテンプレートがインストールできてないのかな?
インストールしなおしてみては
Express EditionってなんかファイルをいじらないとWin32のプロジェクトが出てこないとか言うことはなかったっけ?
84 :
73 :2007/01/17(水) 21:46:21
久々にVC++インスコしてみたら書式が変わってるんですがこれはいったい何事ですか? なんかすべての処理がヘッダファイルに書かれていてcppの方はヘッタファイルのインクルードしかないんですけど・・・ マネージコード、アンマネージコードとかいうヤツのせい? それとも.NETとかいうヤツから変わったの?
>>83 MSのサイトにそういうのあったようなきがす。
PlatformSDKあたりに。
>>85 ウィザードの種類によっては、cppファイルの生成とかいうオプションがあったと思うよ。
>>87 だから、それで生成したcppファイルが・・
よーわからん、クラスのプロパティ出してメッセージ選ぶとハンドラが作成される。 ってそういう話でまくて?
どーせVC++がVC#っぽくなってるってことだろう
91 :
73 :2007/01/18(木) 17:11:06
たびたびすいません、
>>82 様のいうとおりやったのですが、document and settingなどと書かれたものが 有効な
win32アプリケーションではありませんとでました。
どうしたらよろしいですか?市販のVisual C++ 2005 Express Editionを買えば
できるでしょうか?
93 :
73 :2007/01/19(金) 12:57:22
>>92 様どんレスですいません、ありがとうございます
やってみます
エディットボックスに入力した日本語を、ボタンを押すとtestという 関数に取り込みたいのですが下のようにしてみたんですがうまくいきません。 どのように変更すれば取り込めるのか教えていただけないでしょうか? よろしくお願いします。 char ss; m_edit.GetWindowText(ss); void test(char *ss) { while(*ss != '\0'){ ・・・・処理・・・ ss++; } }
何がどううまくいかないのか説明しろ。話はそれからだ。
>char ss; >m_edit.GetWindowText(ss); コンパイル通らん。
97 :
94 :2007/01/19(金) 16:38:11
すいませんchar ss;じゃなくて、CString ss;でした。 エディットボックスにコントロール変数m_editをつくって、 ssに取り込んで、そのデータをtestにとりこんで処理をしたいと考えています。 *ssでよめるようにするには、エディットボックスからどのようにとればいいの かわかりません。よろしくお願いします。
void test(LPCTSTR ss)で受け取る
99 :
デフォルトの名無しさん :2007/01/20(土) 16:26:02
MFCのダイアログベースのプログラムからスレッドを生成した場合、 生成した子スレッドに対してダイアログの方は親スレッドと考えて良いのでしょうか? つまりスレッドの識別子などがあるのでしょうか?
スレッド間に親子関係は無い。 ライブラリの初期化・終了処理を考慮しなければ、全て同等。 スレッドの識別子は両方にある。
101 :
デフォルトの名無しさん :2007/01/20(土) 21:38:38
ifの条件が増えたとき、下のどちらの記載が望ましいのでしょうか? if ( (条件1)&&(条件2)&&(条件3)&&(条件4)&&(条件5)&&(条件6) ){ ; } if ( (条件1)&&(条件2) ){ if ( (条件3)&&(条件4) ){ if ( (条件5)&&(条件6) ){ ; } } }
>>101 どっちでもいいけど自分なら前者で書くかな。
条件部分が長すぎて画面からはみ出るなら適度に改行したり。
if((条件1)&&(条件2)&&
(条件3)&&(条件4)&&
(条件5)&&(条件6)){
;
}
>>100 返信ありがとうございます。
では、生成されたスレッドからダイアログの方へメッセージを投げたい場合は
どうすればいいのでしょうか?
スレッドを生成する際に引数としてダイアログのスレッドIDを渡す、など必要になるのでしょうか?
ダイアログなんだからウィンドウハンドルでも渡しておけばいいのでは?
107 :
101 :2007/01/21(日) 20:41:18
>>103-104 トンクス
ifを分割すれば余分な条件を弾けて得かなって思ったので質問しました。
クラス内で関数化するのが一般的かもしれませんが、
if() の括弧の中を全て#defineに入れてみようと思います。
スレ違い
実行ファイルにjpgなどを格納することはできますか? 使用しているのはVC++.net2003です。
>>109 できます。この板のどこかのスレでそんな話題を見かけました。
fgets や std::getline を使わずにテキストファイルからデータを一行ずつ読み込みたいのですが、 ReadFile で改行文字か EOF が来るまで1バイトずつ読み込んでバッファに取り込むという方法しか 思いつきません。もっといい方法ってありますか? ReadFile でファイルを全部読み込んでから、一行毎に分解するという方法は出来れば避けたいです。 扱いたいのは200万行以上あるファイルです。 いまだにVC6
>もっといい方法ってありますか? あなたにとって、どういうものが良いものなのか説明してください。
>>112 素直にfgets()やstd::getline()を使うことにするのが、「もっといい方法」だと思います。
ならメモリマップトファイルはどうだ。
116 :
112 :2007/01/22(月) 19:16:40
回答ありがとうございます。
>>113-114 std::getline() でやってたのですが、処理に時間が掛かるのでどうにかならないかなと思いました。
根拠はありませんが、 API で同様の機能が提供されていればもっと効率よく出来そうだとも思ったのですが
どうやら無さそうですね。
素直に std::getline() のままで処理内容を見直すことにします。
>>115 CreateFileMapping() とMapViewOfFile() でファイルをメモリ空間にマップできるんですね。
これはこれで面白そうなので別件で試してみようと思います。
全部読む必要があれば結局同じことだけどな
待ち状態のまま終わらないプログラムの
int nRet = WaitForMultipleObjects(NUM_OF_THREADS, hThread, TRUE, INFINITE);
このWaitForMultipleObjectsを終了させるか、
INFINITEYのまま何かを読み込んだらタイムアウト、
のような動作はできるものなのでしょうか?
>>69 さんのsetjmp/longjmpを使ってみたのですが、
WaitForMultipleObjectsの後ろにジャンプすると、何故か
ジャンプした後にプログラムが勝手に終了してしまいます。
WaitForMultipleObjectsExとQueueUserAPCという手がなくはないが、 なんかお前がいきあたりばったりで使いそうで嫌だ。
>>118 スレッドのいずれかが終了すればWaitFor....から制御が返る。
戻り値から終了したスレッドを特定できるので、それ以外のスレッドを終了させればOK。
66でreturnしても駄目だったと書いてるけど、何が駄目だったのか不明。
あ、第3パラメタTRUEか。120じゃだめです。
FALSEにして120すれば良い気もする
124 :
デフォルトの名無しさん :2007/01/23(火) 01:05:12
Visual C++ 2005 Expressエディションでまずは Hello Worldからと思い 新規プロジェクトでCLRコンソールアプリケーションを選びました。 そうしたら、もうビルドするだけになってるんですね。 まぁこれはいいんですが、このときこんな感じで自動生成されたんですが、 -- #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); return 0; } -- ここで int main(array<System::String ^> ^args) の部分の意味がさっぱりわかりません。 多分引数を受け取る?配列?な気がしますが、良く分かりません。 C言語でやったように int main( int argc , char *argv[] ) パラメタを処理できることが出来るのは判ったのですが、やっぱり int main(array<System::String ^> ^args) の意味と具体的なパラメタの処理方法が知りたいです。 よろしくお願いします。
126 :
デフォルトの名無しさん :2007/01/23(火) 01:37:22
>>125 Visual Studio にインストールされたテンプレートってのが表示されて
その中に Win32コンソールアプリってのはありません
あるのは
クラスライブラリ CLRコンソールアプリケーション
空のCLRプロジェクト Windowsフォームアプリケーション
の4つだけです。
それと知りたいのは、
int main(array<System::String ^> ^args)
の意味するところです。
できれば解説願えませんでしょうか?
あっ、くだすれC++/CLI(初心者用)で聞くべき質問ってことですか?
すみません、良く分かってなくて。
MSDN読めよ、糞が。 とか言いたくなっちゃうから、きちんとマニュアルは読もうな。 C++/CLIで探せばすぐ判るから。
MSは初心者にはC#やVBを推奨してるから VCは使いにくい面があるかもしれない。 特に目的が決まってないならC#やVBをお勧めする。
PlatformSDK入れてMSDNの該当ページ(
>>92 )に従え
>>126 そりゃ左でCLRを選んでるからだろ
Win32選んでみな
Visual C++だとstring型のハンドルがありますが、 C++のstringは使えないでしょうか? Visual C++はC++の拡張と聞きましたが、C++が分かっていても、 Visual C++はほとんど一から型とかライブラリの使い方を勉強する必要が あるのでしょうか?
使いたければ使えばいい。
組み込み型じゃないからな
VC++.NET2002で質問です。 MFCアプリケーション上でダイアログボックスを作って、 DoModal()でモーダルダイアログボックスを表示してます。 ところが、そのダイアログボックスのOnInitDialog()内で メッセージボックスAfxMessageBox( "HogeHoge");を表示すると OKで閉じた後、なぜかモードレスダイアログになってしまいます。 (ダイアログ表示中でも親ウィンドウが操作できてしまう。) これってこういう仕様なのでしょうか?
Visual Studio C++ Express Edition使っています。 初めてwindowsプログラムします。 猫でもわかるプログラミングのWindowsSDK編第1部の イントロダクションのsample01.cppをビルドしたんですが、 エラーが出てしまいます。 ★プロジェクトの作成方法 [ファイル]-[新規作成]-[プロジェクト] [新しいプロジェクト]ダイアログで [プロジェクトの種類]→Win32 [テンプレート]→Win32コンソールアプリケーション と選択して、 プロジェクト名(lesson)を入力して [OK]をクリック。 [Win32アプリケーションウィザード] で、 [アプリケーションの種類]→Windowsアプリケーションにチェック [追加オプション] で、 [空のプロジェクト]→チェックせず(デフォルト) [プリコンパイル済みヘッダー]→チェック(デフォルト) で、[完了]ボタンを押しました。
あらかじめ用意された↓をビルドすると正常終了します。 //lesson.cpp #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; }
★プログラムの変更 これを猫でもわかるに変えたいんですけど、 関数名が@とAで違うので、 Aの関数名だけ@の名前(_tmain)に変えて 実行しました。 @↑ int _tmain(int argc, _TCHAR* argv[]) A猫でもわかるのサンプル int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
すると、↓のようなエラーが出てしまいました。 ★エラー内容 lesson.cpp d:\lesson\lesson\lesson.cpp(24) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 d:\lesson\lesson\lesson.cpp(26) : error C2440: '=' : 'char [25]' から 'LPCWSTR' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 d:\lesson\lesson\lesson.cpp(40) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 d:\lesson\lesson\lesson.cpp(47) : warning C4244: 'return' : 'WPARAM' から 'int' への変換です。データが失われる可能性があります。 ビルドログは "file://d:\lesson\lesson\Debug\BuildLog.htm" に保存されました。 lesson - エラー 3、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== プロジェクトの作成の仕方が悪いのでしょうか? 教えてください。
変更後のプログラムです。(長いので分割して書きます。すみません) #include "stdafx.h" #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "ウィンドウクラス・ネーム";
(「連続投稿です」と言われて書き込みが途中で止まっていました)
>>140 ありがとうございます。気付きませんでした。
[VS2005の設定方法]見ました。
>次に、Win32APIを利用したWindowsアプリケーションの設定です。
>「新しいプロジェクト」では、プロジェクトの種類を「Visual C++」、テンプレートを「Win32 プロジェクト」にします。
私の環境だと「Win32 プロジェクト」がありません。
「Win32コンソールアプリケーション 」のみです。
(これってVC++2005のExpressだと無理ということでしょうか?)
とりあえず「Win32コンソールアプリケーション 」として
残りはサイトに書かれている通り、
「アプリケーションウィザード」で、
アプリケーションの種類を「Windowsアプリケーション」
追加のオプションを「空のプロジェクト」
にしました。
しかし、
>>138 と同じエラーがでてしまいました。
>>141 プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
24行と47行のは明示的にキャストしとけ。
にしても、初心者が見る箇所に
Win16を引き摺ってるようなコードを放置してあるのは良くないな。
>>142 >プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。
できました!ありがとうございます。
OS:WindowsXP SP2 環境:VS2005 MFC使用 教えていただきたいことがあります イミディエイトウィンドウにメモリリーク時の情報が表示されますが、発生したファイル名 を表示したいのですがどのようにしたらよいのでしょうか? MFCでは標準でDEBUG_NEWが定義されており、これでファイル名も表示されるという情報を ネットでよく見かけるのです。この情報に間違いがなければデフォルトで表示されるはずなのですが・・。 今のアウトプットウィンドウの表示 Detected memory leaks! Dumping objects -> {15027} normal block at 0x01322E30, 346 bytes long. Data: <5 9 9 9 E Q> 35 00 39 00 39 00 39 00 00 00 45 00 00 00 E6 51 Object dump complete. おそらくこうなるであろうファイル名付属のアウトプットウィンドウの表示 Dumping objects -> C:\MyProjects\TestProt\Test.cpp(17) : {16} normal block at 0x00780EC0, 4 bytes long. Data: < > CD CD CD CD Object dump complete. よろしくお願いいたします。
その質問に答えようと思ったら 適当なプロジェクト作ってわざとメモリリークさせて結果を見てみるだけだから 自分でやってみればいい
146 :
144 :2007/01/25(木) 14:04:43
>>145 ためしに新規のプロジェクトを作成し、ってわざとメモリリークさせてみたところ、
ファイル名が表示されていました。
DLL参照したり、ソースファイルとプロジェクトのディレクトリを別々にしたりしてるんで
それが原因なのでしょうか?
>>135 猫でもわかるなら、VS2005サンプルプログラムのところも見てみろよ。
>>147 は死ね
このスレは「くだすれVisual C++(超初心者用)その4」だぞ
馬鹿か貴様
超初心者には147程度の記述では不親切だったか?
135の件は142の答えで解決済み。
Visualstudio.NET2003使ってる者ですが プロジェクトを作って 新しい項目の追加を選択して a.cとか適当名前いれて ソースファイルに何も書き込まずに デバッグ無しで開始を選択すると エラーが発生して デバッグを開始出来ません 指定されたファイルが見つかりませんのウインドウと error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。 fatal error LNK1120: 外部参照 1 が未解決です。 とでます。 どうしたらよいのでしょうか・・ さっぱり見当が付かないんですが。
main(wmain/_tmain)関数から始まるプログラムを書きたければ、Win32コンソールプロジェクトを作れ。 そうでなければWinMain(wWinMain/_tWinMain)関数を書け。
プログラム以前のレベルですが2点教えてください。
10年近く前までC(++ではない)やってた者ですが、
突然ゲーム作りがしたくなりまして
一から勉強し直しのつもりでVisual C++を買おうと思ってるんです。
でも何を買ったらいいのかさっぱり判りません!
1.VC++.NET2003ってStandard版しかないのですか?
Professionalとか、上位版が出ていたりするのですか?
2.VC++.NET2003って今でも店頭で入手できるんでしょうか?
2005を買ってダウングレード、みたいな方法もできるのですか?
その場合には2005のどれを買えばいいのですか?
とりあえずDirectX関連の本を買って読んでるんですが
その本がC++.NET2003までしか対応していないのです。
↓漏れが買った本
ttp://www.kohgakusha.co.jp/books/detail/978-4-7775-1043-6
>>154 2003を買う必要は全くありません。
2055EEを入手するか、それで飽き足らなければ2005PRO辺りを買えば宜しいかと。
2005EEはフリーだよ
157 :
154 :2007/01/28(日) 15:31:30
>>155-156 ありがとう
あえて2003を買おうとしているのには訳があって
この本にソースとかプロジェクトファイル?が収録した
CD-ROMが付属してあるわけですが、
2003用のファイルを2005の環境で開いたら、
何かと細かいエラーとか警告とか、いろいろ出てきそうな
気がするんです。(問題ない?)
いちばん恐れているのは、2005の環境で変なエラーがいっぱい出て、
それを直すためにコンパイラの設定とかソースの修正とか
いろいろ見直してるうちに結局ワケわかんなくなっちゃって、
しかもそれでもなお直らず、本当に勉強したい部分にまったく
触れられないまま、挫折してしまうことです。
・・・すいません、実はVC6の頃に一度これで挫折してるんですorz
とりあえず2003の環境なら、あまり深く考えずに
本に書いてある通り操作したら、一通りサンプルもうまく動いて
勉強に専念できそう、と考えたんです。
本読んでて、昔と今じゃあ技術が全然違う事だけはよくわかったので、
初心に帰ってがんばろうと思ってます
長文スマソ
10年近く前までCをやっていたと言い張る人間にしては、随分と情けない話だ。
古本屋で買って来たVC1の本でもほとんど同じだったよ 昔の方が機能が少なくてわかりやすいという点もあるけど
途中で挫折するのは基本ができてないくせに応用したがるからじゃまいか
そういうこと。 順調に進歩する人と いつまでたっても進歩しない人と 途中で投げ出す人を見てきたが、 性格というか気分というか、 そういうが現れてるような気がした。
>>157 まあVC++ 2005はセキュリティ関連で色々と細かい警告を出すようになったが、それは有名だしググれば対処法はすぐ見つかる。
その程度のプログラムならそのほかには、特にVC++ 2005に持っていったからといってエラーになるということはないと思う。
せいぜいSDKを入れていない、入れたけどVC++で設定し忘れることに気を付けろというくらいかな。
もう一つ、文字コードの違いにも注意。
164 :
デフォルトの名無しさん :2007/01/30(火) 00:08:27
10年前ってオレ学生だな DOSのBorlandCと窓のC++習ってたけど 似たような事やるにしても DOSベースか窓ベースかで難易度に死ぬほど差を感じた で、その頃C++Builderとか出てきたけど あれはMSVCとは比べもんにならんぐらい簡単で驚いた
165 :
デフォルトの名無しさん :2007/01/30(火) 00:43:43
失礼します。 今日C++をはじめてみた者です。アホらしい質問かもしれませんがお願いします。 以下のプログラムについて質問です。 #include <iostream> using namespace std; class Glass {int nakami; //水の量 public: Glass(int x) : nakami(x){} //引数を取るコンストラクタ //ユーザかプログラマに渡される値(xで表される)をnakamiに格納 void dasu(int); //水を出す関数 }; void Glass::dasu(int x){ if(nakami >= x){ nakami -= x; cout<< "水を出しました。" << endl; cout<< "現在のコップの中身は" << nakami << "です。" <<endl; } else{cout<< "そんなに水がありません。" <<endl; cout<< "現在コップの中には" << nakami << "入っているだけです。" <<endl; } } int main() {int x; //整数の「いれもの」xの定義。下のcinの前ならどこにあってもよいのです。 cout << "コップを生成します。どれだけ水をいれるか入力してください。" << endl; cin >> x; Glass glass(x); //引数を取るコンストラクタが呼び出され、 //水がxだけ入ったglassという名のコップが生成される cout << "さあ、glassから水を出します。いくら出しますか。入力してください。" <<endl; cin >> x; //上のxを使いまわしている glass.dasu(x); cout<<"終了"<<endl; } これは、とある(おそらく有名な?)C++入門ページの所からの引用なんですが、 なぜ、変数のxを使いまわすことができるのかわかりません。 一回目に指定した物がnakamiに入って、二回目に指定した物がdasu量になるなんて、 そんな都合のいいようになるわけが・・・と思ったら普通になったわけですが、どうなってるんでしょうか?
>>165 何が聞きたいか分からん・・・
たとえば、
x=5;
cout << x;
x=10;
cout << x;
これでも x を2回使いまわしてることになるが(1回目は1"5"、2回目は "10" が出力される)
何か疑問があるか?
>>166 あーーーーーー、簡単な形で見ると、わかりました。
つまり、cinでユーザーがxに入力した値はそのすぐ下にあるxに
反映されると言うわけ・・・かな? いや、そうですね。
解決しました。ありがとうございます。
>>167 今更どうでもいいけど、ここはVCのスレだから、どうせならC++初心者のスレに逝けばよかったのに。
169 :
デフォルトの名無しさん :2007/01/30(火) 12:26:49
foobar2000のプラグインを作ってみたいんだけど、 当方、組込み系のプログラムが専門で、Windowsのプログラムは未経験です。 VisualC++を使ってみようかと思ってるんですが、Foobar2000のプラグイン開発って ExpressEditionでもできるの?
超初心者とかいう以前の問題かもしれないけど、教えてください。
ttp://www.imgup.org/iup324420.jpg このOrchisのブラウザ→firefox.exeの部分はなんていう名称でしょうか?
Orchisではサブメニューとなってますが、VC++でいうには?
マウスポインタが来ると展開されるもの…というか…メニューバーとも違いますし…
フラッシュ板かこっちか迷いましたがプログラム側で起動すると思ったのでこちらに書きます インターフェイスをswfにしたいんですがプログラム側ではどういう処理が必要ですか? .exe起動→swf起動→swfをウィンドウに貼り付け 今ここで行き詰ってます よろしくお願いします
さあ?
175 :
173 :2007/01/30(火) 18:32:03
今プロジェクト作成に気をつけながらやってみたらうまく行きました 朝のやつは何かおかしかったみたいです。ありがとうございました
openfiles.exeのように、 ロックを取得しているプロセス名を取得する方法ってどんなやり方がありますかね?
includeファイルの中身を見ても仕組みがよくわからないんですが インクルードファイルの機能を見るにはどうすればいいですか? ヘルプを見ましたがいまいちよくわかりませんでした・・・ 何かよい検索方法があれば教えてください よろしくお願いします
もう少し具体的に書いてくれ 普通は、この機能を使うには どのヘッダファイルをインクルードすればいいのかを 調べるから順番が違って参考になる答えがだせるかわからんけど
179 :
デフォルトの名無しさん :2007/01/31(水) 23:01:33
タブ(CTabCtrl)を使ったプログラムを作ったのですが、タブ内の処理(他クラス・チャイルド)と親クラス(?)で変数を共有する方法を教えてください。 親クラスの変数をタブのクラスで参照できれば良いです。 また、親クラスからあるトリガで子クラスの表示処理を走らせたいのですが、子クラスを起こすor親クラスから直接描画できますか? よろしくお願いいたします。
スルー
>>179 正直言っている意味がわからんのだが、
参照できる親クラスメンバは、子クラスからならばprotectedかpublic、
継承関係にないならばpublicのみだぞ。
182 :
デフォルトの名無しさん :2007/02/01(木) 04:52:51
親ってことは、CWnd::GetParent()か?
183 :
デフォルトの名無しさん :2007/02/01(木) 04:55:17
みんな意地悪しないで(知ってて知らん振り、わからない振り?)、 自分が初心者だった頃を思い出して質問を酌んでやれよ。
>>181 >正直言っている意味がわからんのだが、
そりゃ、
>>179 以上にあんたが初心者ってことだお。
言いたい事は何となくわからんでもないけど クラスをどう作ってるか分からんとねぇ
>183-184にまかせた
そりゃクラスじゃなくてウィンドウの親子だな
つまりそうだろ!?
189 :
デフォルトの名無しさん :2007/02/01(木) 22:29:51
すいません、自分はクズたれ初心者です。 そこで質問です、何か作ってみようと思って、SDKみたりするんですが C言語だと、長ったらしいソースをメッセージ毎に書いて、他にも知識が必要だと思い ところが、MFCだと、それら(win32api達)を一通り用意用意されすぎて、でも結局win32apiをラップ したものですし、なんかMFCを使うのは、パソコン初心者に「さぁ、使い方は教えないが便利だよ。使ってみなさい」 と言って標準アプリが付いたパソコンをわたしてるような感じで、使い勝手が分からない感があります。 どこかサイトで、MFCをつかわずwin32apiを使ったC++プログラムサンプルソースを公開してるところは ありませんでしょうか、CodeGuru,TheCodeProject,Programmer'sHeaven,SourceForge等を見ても MFCか、いわゆるコンソールアプリ(boost等)のどちらかしか見つけられません。 自分の探し方が悪いのでしょうが、どなたか教えてください。 (ちなみに、FastCopyのソースを見ましたが、敷居が高すぎました)
MSDNにSDKのサンプルがいっぱいついてる
>>189 そもそもWin32APIが関数と構造体の塊のようなものだから、
直にWin32APIを使うプログラムなんてCでもC++でも大して変わらない。
(COMが絡む分野を除く)
Win32APIを使ったプログラムで、C++らしく書くとすると、
結局MFCがそうであるように多かれ少なかれWin32APIを何らかの形でラップしたような感じになるのがオチ。
だからといってMFCを使えというわけではないし、MFC以外にも色々とあるわけだが。
192 :
デフォルトの名無しさん :2007/02/01(木) 23:35:56
VC++を評価版でやってみたいのですが、何をダウンロードしてインストールすればよいのでしょうか? 初歩的な質問で恐縮ですがよろしくお願いします。
>189 おいらは、猫->ATL/WTL
195 :
デフォルトの名無しさん :2007/02/01(木) 23:45:32
リソース*.rcファイルの中で#ifdef,#else,#endifの処理があるのですが、 プロジェクトの設定の、プリプロセッサの定義に書いても、*.rcの中だけ無視されます。 (他の*.cppとかはちゃんと#ifdefで条件分岐してます) どうすれば*.rcの中でもプリプロセッサの定義が有効になりますか?
解決しました。 プロジェクトのリソースタブにもプリプロセッサの定義がありました。
>>192 どうしても有料のエディションの評価版がいいの?
無料のExpress版は嫌?
評価期間過ぎたら製品版買ってMSに貢献するんだろ 無料勧めちゃイカン
200 :
デフォルトの名無しさん :2007/02/08(木) 17:12:26
多分すごい有名な 「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」 を使って今勉強中なんですが、 241ページのサンプルプログラムで、 CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、 ’旧ペン’と銘打って保存って書いてありますが、 これをする意味がわかりません。 わざわざポインタでなぜ確保しているのでしょうか? pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、 別に’旧ペン’を保存しておく必要があるのでしょうか? 私が簡単に確認した程度では、 oldPen 自体設定しなくても実行可能でしたし、 最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。 他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、 やればやるほど意味がないのではという考えに傾きます。 大変限定的な質問ですが、 よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば 教えていただけないでしょうか?
201 :
デフォルトの名無しさん :2007/02/08(木) 17:13:22
多分すごい有名な 「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」 を使って今勉強中なんですが、 241ページのサンプルプログラムで、 CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、 ’旧ペン’と銘打って保存って書いてありますが、 これをする意味がわかりません。 わざわざポインタでなぜ確保しているのでしょうか? pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、 別に’旧ペン’を保存しておく必要があるのでしょうか? 私が簡単に確認した程度では、 oldPen 自体設定しなくても実行可能でしたし、 最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。 他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、 やればやるほど意味がないのではという考えに傾きます。 大変限定的な質問ですが、 よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば 教えていただけないでしょうか?
DCに選択中のGDIオブジェクトは破棄できないから。
204 :
デフォルトの名無しさん :2007/02/08(木) 18:31:55
ほんとだあ
あちこち書き込むと早く回答がもらえるよ〜俺って頭いい〜とか思ってるのかね。
>>206 そのリンク踏んでも問題はありませんか?
自分の環境で支障がでると困るので
208 :
デフォルトの名無しさん :2007/02/09(金) 10:29:48
あっちこっちかいたらあかんのか、ぼけ。 二箇所しか書いてへんし、掲示板のタイトル選んで書いてるし、 回答は少しでも速いほうがいいし、 もしかしたらいろんな答えがあるかもわからんし、 それを知りたいのは普通やんけ。 誰も頭がいいなんか思うか。 そういう発想にいたるお前は自分が悲しくないんか。 まあ、ここでそんなやつにかまってる自分が悲しいけど。 気分が悪いんでもうこんなところに質問書いたりしません。 どうも何らかの答えになるようなことを書いてくださった方はありがとうございました。
もうくるなよ
質問です。VC++6.0でMFCを利用しています。 3つのダイアログをモーダレスで表示します。 仮に、A,B,Cとします。 この3つのダイアログのZオーダーを常にA→B→Cに固定するにはどうすれば よいでしょうか。 私自身、Zオーダーという言葉の使い方が間違っているかもしれませんので補足します。 AとBが重なっていれば必ずAが前面に表示され、BとCならB,AとCならAという 動作です。 ダイアログが2個なら、TOPMOSTが利用できるのですが、3つの場合はどのようにしたら よいでしょうか。 可能であれば、BダイアログをドラッグしながらAダイアログ上を横切ると、スムースにAの下 を潜り抜けるようなのがよいです。 よろしくお願いします。
こういう向いてないやつはどうしたらいんだろうね 本人が悟ってくれるといいけど
>>210 ダイアログの作成順をC B Aの順にし、Create時Aの親をBに、Bの親をCにする。
213 :
デフォルトの名無しさん :2007/02/09(金) 22:52:26
ど素人です。 labelに文字を続けて表示させたいのですが、 label->Text = S"hello wo"; label->Text = S"rld"; としてもrldとなってしまいます。 これをfor文等で何回も実行させたいのですが、どうすればよいのでしょうか。
これなら低級エスパーでも答えられるな。
>>213 普通のCのプログラムならそんな感じだろうけど
Windowsだからね
最低限の基礎知識がないとこれから大変だと思うよ
手取り足取り面倒みてくれる人がいるといいね
S""って、マネージリテラル文字列?C++/CLIか?
初心者です。 超アホな質問で申し訳ないんですがよろしくです。 VistaにてVS2005Expressを使おうと思ってます。 一応本体+SP1(MSUpdateにて)とSP1Update4Vista(β版)とやらをインスコしてみました。 ・・がこれでSP1は適用できてるんでしょうか? 確認方法がわからないんですorz||| バージョン情報にはSPの文字は見えませんでしたが・・ また、Vista上の2005でビルドすると文字コードエラーが連発しますが、 なんとなくSP1では対策済みとの情報があったような気がしてて、 SP1が適用できてないのでエラーが残ってるのかなぁとか思ってるわけですが、 実際のところどうなんでしょうか? SP1にしたからって文字コードエラーが消えるわけではないのか、 それともSP1自体適用されてないのか・・ どうかよろしくお願いします!!m(_ _;;)m
>>213 label->Text += S"rld";
219 :
213 :2007/02/09(金) 23:40:38
>>216 よくわかりませんがVC++.NETでwinフォームアプリケーションを作っています。
>>218 ビルドすると
'+':__gcポインタ 'System::String __gc *'に対してポインタ演算ができません。
とエラーがでてしまいます。
一つの入れ物に二つ入れようとしたら 前に入れたのがでて、後から入れたのが残るよ
221 :
213 :2007/02/10(土) 00:13:25
String* ss; ss = System::String::Concat(S"hello wa", S"rld"); label->Text = ss; とすれば表示させることができました。 一応問題は解決したのですが、もしこれより効率的な書き方があれば 今後のために教えてください。
>>221 MASM6.3?
だったら
MOV ES・SI、ソース
MOV DS/SI、ですちねーしょn
MOV ECX、カウント
REP MOV
コンパイラ様より効率的なんだろうか
>>223 昔DECのフォートランでDOループで定数を埋めるプログラムを作ったら
逆アセンブルしたら全部クリア命令だった
>>222 rep movsb だろ。
ていうか、そもそもCLIか。
>>221 大量の文字列連結用にSystem.Text.StringBuilderってのがあるけど、
二つ三つ繋ぐのには大げさすぎだな。
227 :
デフォルトの名無しさん :2007/02/11(日) 17:15:26
乱数を取りたいんですが Random random = new System::Random(); int ran = random.Next(100); ではコンパイルできないんですがどうしたらいいですか?
C++/CLIならたぶんこう。 System::Random random; random.Next(100); マネージドC++ならたぶんこう。 System::Random* random = new System::Random; random->Next(100); .NETを使わないC++ならboost::randomを使っておけ。 嫌なら<cstdlib>のstd::rand (& std::srand)。
猫でもわかる…の他にWin32SDKでダイアログベースアプリケーション の作り方を解説しているところを教えてください。
WisdomSoft
>>231 ありがとうございます。
ハード + たまにファーム屋なので、すぐ壁にぶち当たると思うけど
頑張ります。
C++とは直に関係なくリソースエディタのことなのですが メニューをリソースエディタで作る時に 最初にメニュー項目に割り振られたIDをメニューエディタで変えても resource.hに繁栄されないのですけど そういう仕様なんですか?リンクしてない? リソースシンボルを見ると書き換えたはずの前のIDも使用中になって消すことも できませんし…… 自分でresouce.hを書き換えるものなんでしょうか? グラフィカルなメニューエディタとresouce.hの関係がよくわかりません 環境はVS2005stdです
それあるね。素直に変わる時もあるけど、バグのような気がする。
235 :
233 :2007/02/13(火) 01:55:09
>>234 ということは 本来はメニューエディタで変えたIDはリソースシンボルや
resource.hに反映されるものなのですね
勝手にresource.h書き換えるとVSに怒られるし……
何度か再起動してれば連動することもあるということですね
sp1も充ててるんですけどね
明日 試してみます
自分が作ってるのと関係ない窓(例えばIE)を移動させることって可能でしょうか?
可能です。
VS2005STD-VCの アイコンエディタの色の並びは どういう根拠で決定されたものなのでしょうか? 正直、あの並びをデータとして持っているのが無駄に思えます。
VGA(640x480,16色)の初期パレットじゃね?
って、256モードか
あれはわかんね
WebSafeColorの216色+WindowsSystemColorの32色+αじゃないのかな。 要は、255を5等分した6濃度をRGB3プレーン分展開したのがWebSafeColorの216色で、 ウィンドウ枠なんかに使っているのがWindowsSystemColorの32色。
MFCのOnTimerイベントの処置中は他のボタンなどのイベントを受け付けない (OnTimer内の処理が終了後に他のイベント処理)動作は可能でしょうか?
OnTimer内でメッセージループ回さなきゃ、そういう動作になると思うが。
245 :
243 :2007/02/19(月) 20:50:43
>>244 イマイチOnTimerの処理について把握してないのですが、OnTimer内の
処理が終わるまではボタンイベントの処理等には行かないって事でいいのでしょうか?
246 :
243 :2007/02/19(月) 20:52:58
あ〜すいません。 行かないってか、貯まったメッセージキューの処理とかしなきゃ行けないですね。
247 :
デフォルトの名無しさん :2007/02/20(火) 11:37:39
これからどうやって勉強すればいいですか Cに関する知識0です。
今まではどうやって勉強して、どこまでいったのだ
諦めて樹海にでも行けばいいんじゃね?
関数が多くなって非常に醜いソースファイルがあるのですが、 ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用したりはできませんか?
つ ヘッダ
>>250 ほかのファイルにいくつかの関数をもっていき、それをメインのソースファイルから利用
すれば出来る。
case 1: if(GetOpenFileName(&ofn)){ GetFileTitle(GotFileName,GotFileShortName,256); strcpy(musictitle,"open "); strcat(musictitle,GotFileShortName);strcat(musictitle," alias oto");mciSendString(musictitle,NULL,0,NULL); } break; case 2: mciSendString("stop oto",NULL,0,NULL); mciSendString("play oto from 0", NULL, 0, NULL ); break; こんな感じでボタン1が押されたらコモンダイアログ出してファイルを選択させ、 ボタン2が押されたら、選んだファイルを再生する、というようにしてるんですけど 動作が変なんです。 例えば、最初に「oo.mp3」を選択した後、ボタン2を押して再生します。 そして、もう一度ボタン1を押して、「xx.mp3」を選択します。 その後、ボタン2を押すと、「oo.mp3」が最初から再生されてしまいます。 本当は、「xx.mp3」を再生したいのですが・・・
>>253 mci使ったことないし、曲再生もやったことないけど、気づいた点を一つ。
closeしないうちに再openできるの?
単純に、oo.mp3がopenされたままだからxx.mp3でopenできてないんじゃない?
255 :
253 :2007/02/22(木) 14:35:39
>>254 すんません、書いてなかったです。
WM_DESTROYの中でcloseはしてあります。
256 :
254 :2007/02/22(木) 14:51:50
んにゃ、closeしないままopenしてないかって話だけど。 2度目のxx.mp3のときのcase 1で、ちゃんとopenできてるかどうか確認してみたら? #つーか、mciSendString()はエラーを返さないのか? 返さないとしたら確認手段くらいないのか? いっそ、試しにこんなロジックでも書いてみたら? mciSendString("open oo.mp3 alias oto", NULL, 0, NULL); mciSendString("stop oto", NULL, 0, NULL); mciSendString("play oto from 0", NULL, 0, NULL); Sleep(10000); mciSendString("close oto", NULL, 0, NULL); mciSendString("open xx.mp3 alias oto", NULL, 0, NULL); mciSendString("stop oto", NULL, 0, NULL); mciSendString("play oto from 0", NULL, 0, NULL); Sleep(10000); mciSendString("close oto", NULL, 0, NULL); んで、巧く行ったらcloseをコメントにしてやってみると。
257 :
253 :2007/02/22(木) 15:05:31
>>256 出来ました、サンクスです。
てっきり、closeは最後にアプリ閉じるときだけすればいいと思ってました。
そっかー、一旦、close 要るんだったのか。
どうもです。
VC++の古いやつ(5.0 Ent)使ってるんだけど SDKで case WM_PAINT: return 0; この2行が入っていると、 何故か(左上のアイコンをクリックして出す)システムメニューの 表示が遅くなったり、配置したコントロールの反応が遅れたりする (例えばチェックボックスをクリックしてもチェックマークが入るのが遅い)。 この2行をコメントにすると直る。 これって、普通なのかな? 今更なんで5.0かって言われそうだけど
WindowsのWM_PAINTで再描画が行われない (正確には更新リージョンが空にならない)と、再びWM_PAINTが投げられる。 だから例えばDefWindowProcの中ではWM_PAINTに対し ただBeginPaintとEndPaintだけを呼んで更新リージョンを空にしていると、 Programming WindowsかAdvanced Windowsのどっちかに書いてあった。
windowsアプリケーションでアイコン作ったものの コンパイルしても表示されないんですが 設定の仕方があるのですか?
俺様のエスパー能力を駆使した感じでは、 元々リソースを含まなかったプロジェクトに対して、アイコンファイルだけを直接追加した予感。 リソースファイル(*.rc)とresource.hがプロジェクトに含まれているか? 通常は、リソースファイルを追加した後、 そのリソースファイルに対してアイコン等を追加する。
残念ながら含まれてます ただ今気付いたんですがフォルダの表示をアイコン表示にすると ちゃんと表示されます 一覧表示や詳細表示などでは表示されないんですがこれもしかして仕様ですか?
諦めずに再エスパー。 アイコンの内32x32の方だけ書き換えていて、16x16は空のまま、とか。 イメージ - 現在のアイコンイメージタイプ をチェックしてみ。
>>263 遅くなってすいません
見事にそれでした
エスパーさんありがとう!
エスパーされるってことは、質問の情報が不足してるってことだぞ
つまり、馬鹿にされているってこった。
関係ないけどFLVPというフリーソフトも小さいアイコンの表示が変だ 大きいやつは赤いアイコン、小さい方はMFCの青いアイコン
昔からそうだけど、MFCの吐き出す既定コードが手抜きだから。 LoadIconしたアイコンを大小両方に割り当てる所為で、 タイトルバーには16x16では無く、32x32のアイコンが縮小されて使われている。 両方描くのが面倒な時は、どちらか一方を削除しておくのが無難だな。
>>269 最初から16x16も作ってくれちゃうしなあ
アイコン作ったときは、小さいほうはとりあえず消して
小さいアイコンの見栄えが気になってから追加するようにしてる。
271 :
デフォルトの名無しさん :2007/02/27(火) 19:27:48
ソースが同封されてるツールがあって、自分でVisual Studioで ビルドしてみたのですが、同封されているexeと比べると何故か サイズが大きいのはどう言ったことが原因と思われるのでしょうか? あと何個か警告が出たのですが、一応exeが出来ています。 どんな警告も出ないように作ると勝手に想像していたのですが ある程度の許容範囲内の警告が出るくらいは無視されるものなのでしょうか? よろしくお願いします。
さあ
作成者とまったく同じコンパイラと 作成者とまったく同じコンパイルオプションと 作成者とまったく同じライブラリをリンクすれば たぶん同じサイズの実行ファイルになるんじゃないかな
覆水盆に帰らず
同じCPUで、同じOSな必要もあるんじゃね?
size = GetFileSize( hFile, NULL ); SetWindowText(label,(char)size); こんな風に書いて、sizeにhFileのファイルサイズを スタティックコントロールのlabelに表示したいんですが、 labelの表示が変わらないんです。 (char)を取ると、めちゃくちゃな文字列が出ちゃう。 これ、このスレでいいんかな?
SetWindowTextなんだからテキストを渡さないと
VisualC++2005ExpressEditionを久々に起動しようとおもったんですが ”一つ以上のコンポーネントがみつかりません。再インストールしてください” とでて、 アンインストールしようとしてもなにかのファイルがみつからないとかいうエラーがでてアンインストールできず それでも再度インストールしようと試みたらエラーとおもわれるものがでました。 以前にはしっかりと登録もしたはずなんですが どうすればいいでしょうか。
パソコン買い換え
最後の手段っぽいけど、Windows Installer CleanUp ユーティリティを使う、とか。 サポート技術情報を文章番号290301で。
SetFilePointer(hFile,1,NULL,FILE_BEGIN); ReadFile(hFile,buf,3,&readsize,NULL); buf[3] = ('\0'); 教えてください。 上のように書いて、hFileのファイルの先頭3バイトを読み そこにヌル文字を加える、これで先頭3バイトを受け取りたいんです。 でも、これだと2バイト目+3バイト目+ヌル文字になってしまいます。 相当馬鹿なことしてるかもしれませんが・・・
>>281 >SetFilePointer(hFile,1,NULL,FILE_BEGIN);
先頭から読みたいなら0じゃない?
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
この世はすべて1から始まっている という世界ですな
284 :
281 :2007/03/01(木) 14:36:34
>>282 どうもです。できました。
かなり馬鹿なことしてたんかな?
また、質問するかもしれないんでよろしくお願いします。
ここでいいかどうかよく判らないですが、質問です。 Web ブラウザから起動される Java アプレットがあり、そこに表示されている情報を 現在作成しているツール(Visual C++ .NET, ダイアログ)から読み取ろうとしています。 ・アプレットのクラス名を指定して FindWindow() ・EnumChildWindows() で子ウィンドウを列挙 ・子ウィンドウに対して GetWindowRect() や GetWindowText() という感じで、ラベル(SunAwtLabel)のキャプションは GetWindowText() で取得できるんですが エディットボックス(Edit)の現在の値が取れません(""となります)。 また、コンボボックス(ComboBox)もあるんですが、これは値の取り方すら分かりません。 エディットボックスとコンボボックスの現在の値を取得するには、どうしたらいいでしょうか?
みためがエディットボックスとコンボボックス
VC2005ってPDBの埋め込みできないの?
SetFilePointer(hFile,1,NULL,FILE_BEGIN); //(1)先頭3バイト読む ReadFile(hFile,buf,3,&readsize,NULL); // bufはchar buf[3] = ('\0'); SetFilePointer(hFile,0,NULL,FILE_CURRENT); //(2)先頭から4バイト目を読む(1)の続きを読みたい ReadFile(hFile,buf,1,&readsize,NULL); buf[1] = ('\0'); if (buf==0x01) { MessageBox(hWnd,"aaa","bbb",MB_OK); //(3)4バイト目は01だからメッセージが出るんじゃ? } 度々質問ですが、 こんな感じで、まず(1)で先頭から3バイトバイナリを読みます。 次に(2)で(1)の続き(先頭から4バイト目)を読みます。 例えば、バイナリで「41 42 43 01」なら(1)はABCになると思います。 でも、(3)のメッセージが出ません。 if の所の比較が変なんでしょうか?
C++とDelphiどっちが簡単なわけ
>>288 > SetFilePointer(hFile,1,NULL,FILE_BEGIN);
0から数え始めるからこれでは最初の1バイトを飛ばすことになる
> SetFilePointer(hFile,0,NULL,FILE_CURRENT);
無意味
> if (buf==0x01)
上を治したとして、buf[0]に書き込まれているはずだからif (buf[0] == 0x01)では?
実験ならいいけど こまぎれで読んだらパフォーマンス悪そうだな
実験する場合はデバッガ使った方がいい
293 :
288 :2007/03/02(金) 10:07:08
>>290 thanxです、buf[0]だったんですね。
それにしてもこのスレで教えてもらうたびに
自分の実力の無さを感じてしまう。
実力以前の話だから気にするな
イイハナシダナー( ;∀;)
イイハナシダナー( ;∀;)
イナバウアー( ;∀;)
>>289 GUIアプリを作るなら
Delphi>>>(超えられない壁>>>VC++(MFC)
やりたいことができなくなったらVC++へ。
http://www.kumei.ne.jp/c_lang/ 初心者でここを見ながらVisual C++2005の勉強してるのですが、
現在時刻を表示するのに
case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,"%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond);
でstatic char str[256]に格納して
WM_PAINTでTextOutでこの文字列を出力しようとするとVisual C++では文字化けしてしまいます。
borland c/c++コンパイラでコンパイル実行させるとちゃんと時間が表示されます。
これを直すにはVCの何処を弄ったら良いのでしょうか?
ひろってきたソース弄ってるのは勉強とは言わない
>>300 プロジェクトのプロパティ → 全般 → 文字セット → マルチバイト文字セットを使用する
にしてみる。
または、
wsprintf(str, TEXT("%02d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);
にしてみる。
第一引数にはLPTSTRを渡さないと
>>302 「strの宣言をstatic TCHAR str[256];に直す」が抜けている。
これくらい警告やエラーになりそうな気がするんだがな。
常に/W4 /Wp64付けておけ。
糞サイトの無料サポートをほいほい引き受けるお人良しがいたとは
307 :
300 :2007/03/04(日) 22:14:39
>>302-303 ,
>>305 ありがとうございます、出来ました!
今までbccだと通っていたので気にしていませんでしたが、
VCだと型に対してキビしいのですね。
仮引数の型を教えてくれる機能があるようなのでこれからは気をつけます><
またプロパティで警告のレベル等を変えられるのも初めて知りました。
親切に教えてくださり本当にありがとうございました。
>>307 単に VC8(VS2005)は、デフォがUNICODEになってて、BCCは MBCSに
なっているってだけだよ。
BCCでも UNICODEにすると同じようになるはず。
Visual c++ で、ソフト作成にチャレンジしようと思うのですが、 Visual C++ 2005 Express Edition ってのが マイクロソフトからダウンロードできるんだけど、 それでいいのですか。 ここの皆さんが使っているのはこれですよね。 違ったら教えてください。 似たような名前のソフトがたくさんあって どれがどれなのかさっぱり分かりません。 どうかお願いします。
>>309 EEじゃないけど、まあそれだ。
PlatformSDKとかMSDNライブラリとかも一緒にな
ツールボックスのList Controlについて質問です。 List Controlに対する処理(後で記述)を関数化しています。 「変数の追加」でList Controlをm_listctrlとしました。 プロパティは、Viewをレポートにしてるだけです。 関数の処理を行うと「説明」のColumn部分が二つになってしまいます。 m_listctrl.DeleteColumn(1); で消しているのですが、どうしてでしょうか? Columnをうまく初期化する方法をおしえて下さい。
312 :
311 :2007/03/06(火) 17:18:23
m_listctrl.DeleteColumn(0); m_listctrl.DeleteColumn(1); m_listctrl.DeleteAllItems(); // 詳細表示のときのコラムのヘッダーの設定 LVCOLUMN myColumn; // 列情報を保持するオブジェクト myColumn.mask = LVCF_TEXT|LVCF_WIDTH; // pszText,cxを有効にする RECT myRect; m_listctrl.GetClientRect(&myRect); // リストビューサイズを得る myColumn.cx = (myRect.right - myRect.left) / 3; // 横幅の1/3を表題にする myColumn.pszText = "項目"; // 列タイトル文字列 m_listctrl.InsertColumn(0, &myColumn); // 0列目を確保する myColumn.cx = (myRect.right - myRect.left)*2 / 3; // 横幅の2/3を説明にする myColumn.pszText = "説明"; // 列タイトル文字列 m_listctrl.InsertColumn(1, &myColumn); // 1列目を確保する // リストビューにアイテムを設定する static LVITEM myITEM; // 初期値をクリアするためにstaticを使用 myITEM.mask = LVIF_TEXT; // pszTextを有効にする myITEM.iItem = 0; // 項目0 myITEM.iSubItem = 0; // 列0 myITEM.pszText = "リスト1"; // タイトル文字列 m_listctrl.InsertItem(&myITEM); // 設定する myITEM.mask = LVIF_TEXT; // pszTextを有効にする myITEM.iSubItem = 1; // 列1 myITEM.pszText = "ああああああ"; // 説明文字列 m_listctrl.SetItem(&myITEM); // 設定する
何がどうなってるのかよくわからんが、 (0) で0個目を消したら1個目は前にずれるから それも消すのはまた(0)じゃないか?
314 :
311 :2007/03/06(火) 17:36:17
すみません、追加です。 プロジェクトの内容は テンプレート:MFCアプリケーション アプリケーションの種類:ダイアログベース 「ユニコードライブラリの使用する」のチェックを外す
315 :
311 :2007/03/06(火) 17:44:06
>>313 レスどうもです。
m_listctrl.DeleteColumn(0);
m_listctrl.DeleteColumn(0);
で、できました!
しかし、なんかもっとスッキリしたやり方はないのかな・・・。
Columnの数を計算して、ループでDeleteColumn(0);とするんでしょうか・・・。
今見たけど、ヘルプのDeleteColumn の例はそうなってるな。
317 :
311 :2007/03/06(火) 18:06:45
>>316 なるほど、そうなってますね。
勉強になりました。
ありがとうございます。
strcat(all,rectform.top); all(char[]で宣言)にstrcatでフォームの高さ(位置)を入れたいんですが '.top' : 左のオペランドが 'struct' へのポインタです。'->' を使用してください。 というようなエラーが出てしまいます。 . を -> に変えると強制終了しちゃうし。 何かキャストが要るんかな? SDKです。
はい。
キャストが必要と言うより、プログラミングの基礎知識が必要かと思われます。
数値と文字列の相互変換からやっとけ
キャストもsdkも100年早い
char tmp[20]; sprintf(tmp,"%d",rectform->top); strcat(all,tmp);
こう書くのは駄目か? int len = strlen(all); _snprintf(tmp + len, sizeof tmp - len, "%d", rectform->top);
326 :
323 :2007/03/08(木) 17:42:54
お、俺のはどう・・?
327 :
324 :2007/03/08(木) 17:43:09
ほんとだ、323に影響されてallとtmpをごっちゃにしてる すまん
>318が低レベル過ぎてそれに対するフォローしても妥当かどうかの判断しようがない件。
エラーが出たらまずキャストって誰に教わったんだか
strcat使うべきところかどうかもあやしい
どうみても厨房です。本当にありがとうございました。
strcatは安全じゃないってばぁちゃん言ってた
333 :
デフォルトの名無しさん :2007/03/08(木) 20:58:50
いっそ全部stringにしちゃえ
最適化なしだと意図通りに動いて、最適化ありだとバグが起こるって よくあることですかね?
変数の未初期化
volatileが必要な変数とか?
マルチスレッドのプログラムで、外部でフラグを立ててスレッドを終了させ ようとしています。フラグの変数はvolatileをつけてます。 いろいろ試してみましたが、プログラムサイズの最適化だと意図したとおりに 動くようです。でも実行速度の最適化のオプションではだめなようです。
>>337 そうならないためのvolatileなのに変だね。
別の原因なのかな。
Win32のイベントを使えばいいだろ。 C/C++のvolatileはそもそも対マルチスレッド専用に作られたわけではないから、 マルチスレッド時にvolatileを付けておけば絶対に大丈夫ということはない。
この使い方が駄目なら、volatileの存在意義が無いんじゃね? とりあえず、プログラムをupしる。
じゃあ〜volatileはなんなんだよ〜 最適化による期待はずれの動作は奥が深そうだな。 volatileでは解決しないことの原因なら 勉強のためにも というかマルチスレッドを使う俺としてはぜひ知りたいところだ。
とりあえず重要そうなとこだけ抜粋してみました。 ひょっとかしたら根本的な間違いがあるかもしれませんが。 // グローバル変数 volatile bool exitflag; int WINAPI WinMain() { (中略) hThread = reinterpret_cast<HANDLE>(_beginthread(childThread, 0, NULL)); (中略) // 終了処理 exitflag = true; WaitForSingleObject(hThread, INFINITE); return 0; } void childThread(void *arg) { (省略) while(!exitflag){ // いろいろな処理 } if(exitflag) return; (省略) while(!exitflag){ // いろいろな処理 } return; } 最適化なし、プログラムサイズ最適化はスレッドが終了しますが、 実行速度最適化にするとスレッドが終了しないようです。
とりあえず_beginthreadexに変えてみる、とか。 _beginthreadは、CloseHandleが生成されたスレッドで処理されるので、 スレッド終了時点で、返されたハンドルの保証ができなくなる。 運が悪いと、別のスレッドを指してしまう可能性もある。
main.cpp main.h func.cpp func.h ・・・ という感じでソースを書いてるんですが、 main.cppの方でfunc.cppの関数を呼び出す際、引数に構造体のアドレスを渡して、関数内でその構造体の中身を変更、としたいんです。 この場合構造体の型と構造体の宣言はどこにどういう風にすればいいんでしょうか。 externを使ったりしてやってみてるんですがどうもエラーがでてしまいます・・・
手取り足取り教えてくれる親切な人がいるといいね
>>344 func.cpp の関数や構造体をfunc.hで宣言して両方でinclude
つーかcppなのにそれでいいのか、、って気はするが
もうちょっと他のソースやIDEの吐き出したソース参考にしてくれ。
あんまり初歩的だと
>>345 みたいになる
すみません,伺わせてください. Windowsフォームで何らかの処理をした際に出現する フォームの多重起動を防ぐ方法についてなんですが. グローバルな領域にフォームのオブジェクトを持たせて, 一度目にnew生成,終了時にnullを代入することで, nullチェックを行えばできるのですが. グローバル領域を使用せずにする方法があったら教えてください. お願いします.
348 :
344 :2007/03/09(金) 19:08:30
>>346 なんとかなりました。
まだCしか使えないのでこんな形になっています。
C言語質問の方で聞くべき事だったかもしれません。
回答ありがとうございました。
一応__beginthreadexに書き換えてみました。しかし駄目でした。 最適化段階で終了条件が消えてしまっているような。。
>>342 exitflagをlong型にしてtrueの代入の代わりにInterlockedIncrementを使ったらどう?
>>350 試してみました。でも駄目でした。やっぱり速度最適化が駄目です。
volatile修飾ちゃんと利いてるのかな。。それとも俺の書き方が悪いのかorz
回っているときにブレークしてみたらどうなる?
動作中にブレークポイントを設定してみたら、最適化なしのときには |if(exitflag) ●| return; こんな感じで設定できたのですが、 最適化コンパイル後の動作中だとreturnの横クリックしても数行後の 処理に移動してしまいます。 説明が悪くて、わかりにくかったらすいません。
>>353 最適化するとソースの行とプログラムコードが一致しないからな
ステップ実行がへんになることある。
ダイアログアプリケーションを作っていますが、エディットボックスなどの コントロールの配置が終わるのはいつでしょうか? 最初の表示が終わった契機でコントロールの表示位置を取得しようと OnInitDialog() でコントロールの座標を調べてみましたが なぜか位置が(0,0)となってしまいます。 コントロールの表示位置を取得するのに最適な契機を教えてください。
OnInitDialogで設定した0秒のSetTimerが到着する頃には出来てるんじゃないの。
あとから動的にコントロール追加とか普通にやるから そのタイミングでいいんじゃないかな
358 :
355 :2007/03/09(金) 22:41:51
>>356 確かに OnInitDialog() 内でタイマをセットするやり方もありますね
もっとスマートな方法がなければこれしかないですね
>>357 「そのタイミング」とは OnInitDialog() で、ということですか?
やりたいのは、ダイアログエディタで配置したコントロールの座標を取得することです。
コントロールは動かさないので、一回だけ座標を取得できればいいのです。
>>355 OnInitDialog() でコントロールの座標を調べるなんておれやったことあるけどなあ。
おかしいなあ。
360 :
355 :2007/03/09(金) 23:01:51
済みません。 私の初歩的なミスっぽいです。 コントロールの座標を GetClientRect() で取ってたんですが 左上が (0,0) になるので取れてないと思っていました。 OnInitDialog() で GetWindowRect() を発行してみたら どうやらダイアログ上の座標が取れたようです。 もうちょっと調べてみます。
361 :
355 :2007/03/10(土) 02:03:43
OnInitDialog() にて CRect rect; CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_HOGEHOGE); pEdit->GetWindowRect(&rect); ScreenToClient(&rect); でダイアログ相対の座標が取れました。 大変お騒がせ致しました。
>>351 駄目っていうのはスレッドが終了しないの? or デバッガ上でのトレースで
returnの行が飛ばされるの?後者ならあまり気にする必要が無い気がする。
前の方の書き込みを見る限り前者なのかな....
XP上のVC6 & VC2005で試してみたけどvolatile longとInterlockedIncrement
の組み合わせでスレッドは終了してたよ。試行回数各10回ほど。
_beginthreadでマルチスレッドやったのは今日がはじめてだけど、MFCでやる場合は
同期オブジェクトを使って終了を通知してる。APIでいうとCreateEventなど。
363 :
362 :2007/03/10(土) 05:24:03
追記 最適化は実行速度
>>362 スレッドが終了しないってことです。
ってことは書き方が悪いのかなー。。
>>361 本当は、ScreenToClientよりMapWindowPointsがお勧め。
まあ、RTL(RightToLeft)環境で動かすようなことは、まずないだろうけど。
MFCのScreenToClient実装は、過去互換の関係で放置してる予感。
あと、GetDlgItemで取るより、メンバ変数に割り当てた方がいい。
>>364 アセンブリコード吐き出させて、頑張って読む。
visualC++でプログラム作れるように なるには、C言語をまず勉強しないといけない と聞いたのですが、本当ですか? あとその次にポインタというのを勉強して それからVisualC++の本買った方が良いというのも 本当でしょうか? なんか知らないけどどうせならVisualC++でソフトを作ってみたいです。 憧れみたいのがあります。
小説を書くにはまず日本語を勉強しないといけないのですか? みたいな質問だな
>>366 C++はC言語+アルファ(語弊あるけど)。
だからC言語を学ぶことは有効だけど
いけないっていうこともないだろうな。
C++って難しい部分もあるから
簡単なところからはじめたほうがいいっていう意味で
先にC言語を学べってことになってしまう。
ポインタは壁にぶつかるやつが多いからな。
ポインタがわからないやつにC++を使わせるのは危険ともいえる。
そもそもC言語を使わせるのも危険だけど
ポインタを理解してからC++をはじめたほうがいいな。
>>366 きにすんな。
作っちゃいなよ。
壁にぶつかっちゃいなよ。
Visual C++ = CとC++などのコンパイラ(独自拡張有) + CとC++の標準ライブラリ(独自拡張有) + Platform SDK(ただしExpressは別) + MFCやATLなどMS製のライブラリ + IDE(デバッガこみ) + MSDN ライブラリ + 各種ツール およそこんな感じ
>>366 コンパイラの使い方とかデバッグの仕方とかは
ツールによって異なるからな。
バージョンによってメニューとかも多少変わるぞ。
自力で判るとか
友達に手取り足取り教えてもらえるとか
ヘルプをみながら判るやつなら不要だが
初心者はバージョンも合っている解説書的本があったほうがいいな。
すまんが聞きたい事がある。フリーソフトでアナログ時計を作って ベクターに公開しているのだが、ウィンドウズの時計部門の人気順で20位以内に 入っている。オレのプログラミングのレベルはどの位か評価してほしいのだが、頼む。 自分ではVisual C++のレベルが初級を脱した位だと思っているのだが。
そんなことわかるわけがない。 良いプログラムが書けるかどうかと人気のあるプログラムが書けるかどうかというのは別問題。
人気とプログラミングレベルに相関関係があると思ってるん?
ソースアップしてリンク張ってくれれば見るよ ここだと辛口な意見が多そうだが
プログラミングのレベルと人気は必ずしも関係ないでそ。 自分は、どの程度的確に言語仕様を理解しているか、とか、 プロジェクトに適した方法で開発できるか、とか、 そういうことだと思う。 ただ、人気のあるソフトを作れるってことは 良いクリエイターなんじゃないかな。 なんていうかな、Flashとか使えるWebDesignerが、 必ずしもプログラムの技術があるとは限らないっていうか。
サイズのでかいのが結構上位に入ってるな 常駐系はサイズが小さいのが常識だと思ってたけど時代は変わっていく
非矩形ウィンドウ システムトレイへの登録 レジストリ操作 多重起動の防止 ぐらい実装していれば中級ではないか
コピペでも作れるだろ。そのくらい
通信関連のマルチスレッドと低レベルAPI コピペでやると一発で落ちる
非矩形ウィンドウは時計の初歩
非矩形ウインドウってまだRegion使ってるの?
描画するだけならカラーキー設定して切り抜く クリック範囲とかなら、リージョン使わないでどうやってるん?
画像の処理を行うクラスを作ろうとしています。 メモリDCを確保してビットマップの操作等を行うのですが その場合は CWnd クラスの派生クラスとする必要があるのでしょうか?
ウィンドウハンドルが必要ならメンバに持ってればいいわけだから 別に継承する必要ないだろ
DCならCDCが思い浮かびそうなもの
387 :
384 :2007/03/14(水) 21:31:57
そもそもDCがよくわかっていません。 メモリDCを確保する際に、CreateCompatibleDC()の引数に メイン側でGetDC()したポインタを渡せばうまくいくのですが そうしないでこのクラスだけでCreateCompatibleDC()するには 何を渡せばいいのかわかりません。 NULL だと真っ黒になってしまって・・・
なんだ既存のクラスがよくわからない人が作ろうとしてるのか それだったら1から自分で作れ
>>387 CreateCompatibleDCに渡すべきデバイスコンテキストのハンドルを
引数に受け取ればいいだろ。
>>389 class GAZOU
{
void Gazou(CDC* pDC)
{
CDC memDC = CreateCompatibleDC(pDC);
・・・
}
}
ダイアログ等
Gazou gazou(GetDC());
gazou.hogehoge();
という感じでしょうか?
今の処理はこの通りで、うまく動作しているのですが
これ以外のやり方(CDCのポインタを渡さない)はないでしょうか?
GAZOUクラス内だけで処理できないものかと思っています。
>>390 NULLかデスクトップのウィンドウハンドルでDCを用意し
そのDCにコンパチブルなメモリDCを作成するのはどうかな。
出来るかどうか俺は保障しないが。
DCなしでビットマップを操作したいところだがWindowsがそういう仕組みなんで仕方ない。
DCってのは画面用とかプリンタ用とかそれらのコンパチブルなメモリDCなどがあって
ペンとかブラシとかを指定して対象物に描画するときに必須という面倒な代物だな。
392 :
384 :2007/03/14(水) 22:25:44
>>391 画像処理クラスにおいて
CWnd* pDesktop = CWnd::GetDesktopWindow();
CDC* pDC = pDesktop->GetDC();
CDC memDC = CreateCompatibleDC(pDC);
・・・
と記述してうまく動作しました。
どうもありがとうございました。
レス頂いた他の皆さんも、ありがとうございました。
よく理解していないため、変な質問で済みませんでした。
スクリーン互換のDCなら、CreateCompatibleDCは引数NULLでOK。 あと、ウィンドウからDCを取るときは、必要に応じてCWindowDCかCClientDC使うと楽。
394 :
384 :2007/03/15(木) 00:20:23
>>393 ありがとうございます。
CDC memDC;
CBitmap memBmp;
CreateCompatibleDC(NULL);
memBmp.CreateCompatibleBitmap(&memDC, width, height);
memDC.SelectObject(&memBmp);
としてみましたが、どうもモノクロになってしまうようです。
使い方が間違っているのでしょうか?
CreateCompatibleBitmapにはmemDCじゃなく392のpDCを渡すのだ。 MSDN - CBitmap::CreateCompatibleBitmapの解説を参照
それ以前にCreateCompatibleDC(NULL)の左側が抜けてるな
デフォルトでは、素のDCにはモノクロの1x1のビットマップが選択されている それと互換のビットマップを作ったらモノクロになるのは当然
398 :
384 :2007/03/15(木) 22:41:43
>>395-397 なるほど 何となくわかりました。
皆さんのアドバイスを基に、以下のコードに落ち着きました。
CWnd* pDesktop = CWnd::GetDesktopWindow();
CDC* pDC = pDesktop->GetDC();
CDC memDC;
memDC.CreateCompatibleDC(NULL);
CBitmap memBmp;
memBmp.CreateCompatibleBitmap(pDC, width, height);
memDC.SelectObject(&memBmp);
399 :
デフォルトの名無しさん :2007/03/18(日) 15:42:26
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ
すみません。教えて下さい。 VisualC++2005ExpressEditionをMSのサイトから DLして使用したいと考えているのですが、 ズバリ、フリーのデーターベースであるFirebirdと 繋げられるのでしょうか? やはり製品版でないと無理なのでしょうか? 自分は、単純に初心者向けプログラムである。 CDやDVDの在庫管理アプリを作りたいだけなんですが、 自分の労力以外は、極力フリーで作りたいと思っています。 可能でしょうか? 宜しくお願いします。
繋げる意味がよく分からんが、実質フォーマットさえ分かってしまえば作れるんじゃないの?
402 :
400 :2007/03/19(月) 00:19:01
>>401 言葉足らずで、すみません。
ただ単に、フリーのDB(FireBird)に基本テーブルやら
履歴テーブルやらを作成して、
そのDBの記録を読み書きさせたいだけです。
製品でも繋がるかどうか知らない。 MicrosoftからしてみればフリーのFirebird用の ライブラリを用意する義理なんてないでしょうし(推測)。 Firebird用のADOがあれば繋がるんじゃい(推測)? ADO.NETじゃないよ。 あるいはODBC。 実際はDBMS固有の色々あるからすんなり行くか判らんけどね。
Visual C++ 2005 ExpressだとATLとかないんだっけ? ADOはActiveX(COM)だからちょっと大変かもな。
405 :
400 :2007/03/19(月) 02:24:40
>>403 ,404様
本当に、レスありがとうございます。
そうですか、難しいですか・・・。
やはり、SQLServerExpressを使用しないといけない見たいですね。
こちらも、フリーなのですが4G制限等があるからイヤだったんですよねぇ。
実は、図書館レベルとは言わないが、資料がたくさんあるので4Gで収まるか
自信ないんですよねぇ。何件分くらい入るもんでしょうか?
はぁ・・・。
でも、SQLServerExpresとVisualC++2005Expressとの組み合わせなら、
初心者でも簡単にDBアプリ(資料メディア管理アプリ)出来ますでしょうか?
又、DBアプリに関してわかり易いサイトって、MS以外にありますか?
よろしくお願いします。
ちなみに、ググッても分かりませんでした。(検索が悪いとは思いますが)
最初は誰でも初心者だけど それを免罪符にして疑問を○投げって姿勢は良くないお
もうSQLiteでいいんじゃね?
408 :
400 :2007/03/19(月) 21:58:57
>>406 その通りですね。
>>ALL
取り合えず、初心者なんだからDBは置いといて
C++の勉強から先に始めたいと思います。
ある程度、出来てからまた質問させて頂きたいと思います。
みなさまレスありがとうございまいした。
↑にハマっています。 すみません。 単純な日付計算が出来なくて困っています。 dateTimePicker1の日付から、dateTimePicker2の日付の差である。 日付をラベルに出力する方法をお願いいたします。 自分の想像では、 日付変数の宣言 日付変数=dateTimePicker2−dateTimePicker1 ラベル.Text=型変換(日付変数) だと想像するのですが、HELPにも乗っていません。 ご教授お願いします。
日付に罠が仕掛けられていたり、使用法がHELPにのっていないような開発ツールは 使わないほうが良いと思いますよ。
dateTimePicker って VB?
dotnet
>>409 それはC++/CLIかな?それともMscomct2.ocx?
C++とC++/CLIの区別がつかず、知らずににC++/CLIを使ってる初心者が増えている。 これはMSの罠だな。
415 :
409 :2007/03/20(火) 10:52:25
>>413 レスありがとうございます。
Microsoft Visual C++ 2005 Express Editionを使用しています。
只単に、カレンダー1とカレンダー2との差を表示したいだけです。
例:”期間は、Y年M月D日です。”または、”日数のみ計算でXXX日です。”
C++/CLIが何かさえ分らない自分ですが、よろしくお願いします。
>>414 そうなんですよ。
HELPが分りにくくて・・・理解しにくいし検索もHITしないんです。
なんか、単純計算使用例みたいなのも載ってないっぽいです。
もちろん、頭が悪い自分が一番悪いだろうけどね。
>>415 DateTimePickerで検索したら、値を取り出すサンプルが出てきたぞ。
値を取り出すとDateTime型のようだから、DateTime型のメソッドがそのまま利用できる筈なんだが。
417 :
416 :2007/03/20(火) 11:23:26
あ、検索したのはMSDNね。
418 :
409 :2007/03/20(火) 18:49:03
>>417 レスありがとうです。
でも、理解出来ませんでした。(T_T)
何がどうなっているのやら・・・。
まず、
>>409 の1行目の予定の
日付変数の宣言方法さえ分りません。
Int型は、市販の書籍に載ってたんですけどねぇ。
お手数ですが、簡単なソースにコメントを書いて頂ければ幸いです。
教えて頂いたサイトから、
「プログラミング チャレンジ スクエア」って言うのも
見つけたんですが、C++は無いのです。
あんな感じのサイトのVisualC++2005ExpressのHPは無いんでしょうか。
宜しくお願いします。
そういうやつのためにC#があるんだから素直にそっち使っとけ
最早C++/CLIはC++じゃない(と言い切ってもいい位の)存在だから、 C++をやりたいならGUIは一旦横に置くべきだし、GUIをやりたいならC#に乗り換えるべき。
2つの日時の値を引き算すると、時間間隔を表すTimeSpan型が返る。 TimeSpan span = dateTimePicker1->Value - dateTimePicker2->Value; でそのTimeSpanから日の部分だけを取り出し文字列に変換してラベルにセット label1->Text = span.Days.ToString(); 最初はMSDNが理解しにくいのはわかるけど、あれを読めるようにならないと進歩はないよ。
422 :
409 :2007/03/21(水) 10:44:52
>>421 ありがとうございます!私にも分りやすいです。
そういう答えが欲しかったんです。m(_ _)m
本当に感謝しています。私にとっては貴方は神です。
>>419 ,
>>420 さんの忠告もありがとうございます。
自分が求めているのがC++ではなくC#だと気付かされました。
何より、またこのスレで
>>421 神に頼るのは心苦しく思います。
C++は、置いといてC#をダウンロードして試してみます。
423 :
デフォルトの名無しさん :2007/03/22(木) 21:29:05
質問があります。 あるデータベース的な2次元vector vecがあって、 性質の違う2つのクラスA,Bからそのvecを参照したり、書き換えたり したいのですが、そのvecはどんなクラスにしてA,Bからどんな風に 使えばよろしいのでしょうか? 考えた範囲ではvecを静的データメンバにして参照するという方法ですが、 何か「vecはA,Bに含まれるよー」という雰囲気が出せないので他に方法が あるかのかなぁと思っています。
424 :
423 :2007/03/22(木) 21:42:50
追加で質問です。教えてクンですみません・・。 2次元vector(大きさは確定)をデータメンバに持つクラスにおいて、 どうすれば綺麗に初期化すればよいのか教えてください。 考えたのは、以下のとおりです。 Class hogeData{ std::vector< std::vector<char*> > data; hogeData(){ data.resize(I); for(int i=0; i<I ; i++){ data[i].resize(J); } // ...dataに代入など } } 気分的には std::vector< std::vector<char*> > data(I,J); というように一発で初期化したいのですが、クラスのメンバだと そうもいかず・・。
boost::numeric::ublas::matrixとか使った方が良くね?
426 :
423 :2007/03/22(木) 22:14:19
Linux環境でgetopt()を使うためにunistd.hをincludeしているソースを、 VisualC++でコンパイルしたところ、unistd.hが見つからないと言われました。 代替になるインクルードファイルはありますでしょうか? よろしくお願いします。
ない
無いんですか・・ありがとうございます
ほんとかよ、と思ってしまう回答だがはて…
getopt()があればどれだけ楽か……
CUI環境の話だったらC++スレとかでやってほしい。 激しくどうでもいい
GUI環境しか使えない香具師は只単に読み飛ばすということさえ出来ないらしい。困ったもんだ。
腐るぐらいスレがあるのにわざわざここで質問するやつの気が知れない。
VCだからだろ。
Linux依存→依存なしの移植だろ VC関係ない
getopt()だからLinux依存じゃないぞ。VCがPOSIX準拠してないのが問題なんだ。
>unistd.hをincludeしているソースを uniって何の略?
初心者だったら基本やってりゃいいんだよ 実力もないのにややこしいことやろうとすんな 1 初心者には無理だから素直にあきらめる 2 初心者卒業してからやる 3 教えてくれるまで暴れる
と、実力もないのに初心者を脱出したと思い込んでいる>432=434=436=438=440が申しております。
>>439 unix standardって感じか? システムコール系の関数が詰まってるね。
自分が答えられそうにもないCUI系の質問が来るだけで 火病起こす奴ってなんなの?
openFileDialogのOKボタンが押されると、c_printfuncにファイル名を渡して 呼び出し、その関数の内部でファイル名を標準出力したいです。 以下のようにしているのですか何も出力されません。 どこが間違ってるのでしょうか・・? -------------------- [openFileDialogのOKボタン押された時] private: System::Void openFileDialog1_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) { String^ fname; if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { fname = openFileDialog1->FileName; c_printfunc(fname); } } ---------------------- [c_printfunc.cpp] #include "stdafx.h" #include <stdio.h> int c_printfunc(char* fname) { printf("%s\n", fname); return 0; }
すみません今リブルドしたところ、エラーが出ていました 1>f:\documents and settings\(省略)\Form1.h(485) : error C3861: 'c_printfunc': 識別子が見つかりませんでした
なんどもすみません openFileDialogの中からどうやってc_printfuncを認識させるのでしょうか? 今日始めたばかりでわけわかめ状態です;;
質問とは関係ないけど そういえばアウトプットウインドウにデバッグストリング出力する機能があったな デバッガばっかり使ってて存在自体を忘れてた
だからCUIというかソースレベルの質問はスレ違いだって 過去スレ見ればわかるだろ ここはVisualCの機能や使い方を答える程度のレベルのスレなの
450 :
446 :2007/03/25(日) 10:16:58
関数プロトタイプを記述することで自己解決しました お騒がせしました
ダウンロードするのに住所や電話番号を登録するようですが、 何か連絡が来ることってあるんでしょうか?
無いよ
#include <stdio.h> main() { printf("文字表示のテスト"); } これを実行した時に、F5(デバッグあり)で実行すると すぐにウィンドウが閉じてしまいますが ctrl+F5(デバッグなし)で実行すると、ウィンドウが表示されたままに なるのは何故なんでしょうか。 また、DOS窓でなく、通常のウィンドウへの描画は どのような手順で行うのが簡潔でしょうか。
454 :
453 :2007/03/30(金) 01:56:21
環境はVC++8.0ですが、学習のためにCの記述をしています。 また、8.0以前のサンプルを開こうとした時に、変換を行った後 そのソリューションを実行するにはどうすればいいでしょうか。
#include <conio.h> を追加して }の前にgetch();追加で キー一回押すまで進行停止が出来るよ
>453 裏で別のプログラムが面倒みてくれてる
458 :
453 :2007/03/30(金) 07:55:11
すみません、自分で読み直してみて、一度に質問を書き込みすぎました。 でも、皆さん親切に教えていただけるので、とても嬉しいです(;;)
微妙に回答のポイントがずれてる希ガス
じゃ、簡潔に。 >ctrl+F5(デバッグなし)で実行すると、ウィンドウが表示されたままに >なるのは何故なんでしょうか。 仕様です。 >また、DOS窓でなく、通常のウィンドウへの描画は >どのような手順で行うのが簡潔でしょうか。 WinAPIを使えばできますが、その為には先ず一通りCの知識が必要になります。
EEなら該当スレみつけてSDKインストール
>また、DOS窓でなく、通常のウィンドウへの描画は >どのような手順で行うのが簡潔でしょうか。 まとめると (1)MicrosoftのサイトからPlatformSDKをダウンロードしてインストール (これでWin32APIを使うことができる) (2)ウィンドウ作成 (Win32APIはmainの代わりにWinMainを使う) (3)ウィンドウに文字を出力
>通常のウィンドウへの描画は...
通常のウィンドウをどうやって作るかにもよるんだけど
1. Win32(C or C++)
基本だけど全てを自分でやる必要がある。
2. MFCアプリ(C++)
MFCが多くのことをやってくれるけど、構造の理解に時間がかかる。
3. CLRのWindowsフォームアプリ(C++/CLI)
上の二つとは異質だけど初心者には楽。いわゆるドットネット。
他にも選択肢はあるけど、普通はこの3択。誘導される前のスレッドを見る限り
VC8EEなんだろうな。その場合2は選択できない。1を選ぶなら
>>462 で。
プロジェクトの変換については情報不足杉。
>>463 MFCアプリ(C++)、CLR(C++/CLI)になってるけど、
この二つは、C言語形式で書けないの?
勉強中でよくわからない・・・
MFCの場合、自分のロジックはCと互換性のある書き方もできるけど、 WindowsとのI/FはC++でないとコンパイルできない。 CLRの場合、最早Cと互換性を持たせることが無意味。 何故なら、文字列から日付け処理からメモリ管理から何もかも流儀が全て違う。
466 :
453 :2007/03/30(金) 16:51:55
ありがとうございます、通常のウィンドウへの描画は WindowsのAPIを使ってみることにします。 まだ、ポインタもわかってないので(というか勉強がまだなので) 地道にCの言語仕様を学んだ後で、SDK取りに行きます。 バージョンの古いサンプルが開けない、というのは 恐らくツールの使い方がわかっていないだけだと思うので もう少し自分で頑張ります。
そのレベルなら1年は覚悟した方がいいよ
468 :
453 :2007/03/31(土) 00:20:45
かかるかもしれないですね。でも、正直そこまで時間はかけたくありません。 地道にひとつずつ習得する以外方法はないと思いますが、 例えば、「ブロック崩し」を作りたい、という目的がある、とした場合に どの道筋が適切かご指導いただけるとありがたいです。 ちなみにお察しの通り環境はVC8のEEです。
C#でもやれば? Javaだと某有名プログラムがあることだし、フラッシュも最近増えてきたけど。
別の環境で作ったソースをVCで編集しなきゃいけないんですが、 フォルダ構成を元のままVCで作業するにはどうしたらいいでしょうか? 新規プロジェクトを作ってみたら ソースもヘッダも全部同じフォルダにできてしまうみたいで・・・ フォルダの設定とかありませんか?
好きなようにできるだろ
できてしまう、って何でソースやヘッダを作る必要があるんだ? もうソースはあるんだろ?
VC6.0でWIN32API(SDK?)で開発しています エディットコントロールで文字列を追加したときに、自動でスクロール させたいのですがうまくいきません(文字列の追加はできてます)。 CreateWindowExで指定しているウィンドウスタイルは次の通りです。 WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY, 文字列周りは、このようにしています。 SetWindowText(hEdit, "起動\r\n(^-^)\r\n"); SendMessage(hEdit, EM_SETSEL, 0, -1); SendMessage(hEdit, EM_SETSEL, -1, -1); SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"(@-@)\r\n"); SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"(T-T)\r\n"); SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"orz\r\n"); SendMessage(hEdit, EM_SCROLLCARET, 0, 0); ネットで調べたところ、ES_AUTOVSCROLLやEM_SCROLLCARETがあれば勝手 にやってくれそうなんですが… どうすれば自動でスクロールし追加した文字列部分が表示されるように なるのか、教えて下さい。
EM_SCROLLCARET これでわざわざスクロールしてるような気がする
>>473 の文字列追加した後で、別のルーチンから文字列追加を大量に
行ったら、ちゃんとスクロールしてくれました。
>>473 の処理はEM_SCROLLCARETの一行をコメントにしても変わらず…
なにか条件があるんでしょうか…
>>468 ブロック崩しを作りたいなら
@まず持ってるVCの基本操作を覚える(プロジェクト作成の仕方、コンパイルの仕方、実行の仕方、
できればブレークポイントを使った基本的なデバッグ手法やコンパイルオプションの違い等も。)
ACを覚える(基本文法・関数・ポインタ等。これはどんなCプログラムが作りたかろうが全ての人が通る道。)
BWin32APIに触ってみる(ウィンドウを使ったプログラムの作成。)
Cグラフィカルなプログラムを作ってみる(GDIを使うorDirectXを使う。どっちでもお好きに。)
Dブロック崩しを作ってみる(ゲーム特有のアルゴリズム・当たり判定や入力制御等を学ぶ)
酷く大まかだけどこんな感じでいいんじゃないでしょうか。
ちなみにかかる時間はAが一番長くなると思います。
嘘だ、絶対4だ。
でも挫折するのはたいてい3じゃないか?
M$と相性が合わないなら(1)で挫折するはず
ゲームは昔から出来合いのゲームのソースをいじりながら覚えたもんだが BASIC限定だったのかもしれないな
basicでゲームやったことありますとか言い出すやつは使いものにならない。 たとえそういう経験あったとしても黙っておくもの
< ワタシ ヲ ヨンダ?? ●/ <■ / >
>>481 そういう話じゃないでしょ。
既存のソースの改造から始めるのはどうかという話では。
いきなり改造から始めるなんて聞いたことがない。 VCの場合コードの量が半端じゃないし、 他人の書いたコード読んで仕様まで理解できたら相当なレベルだと思う。 初心者レベルだとビルドできなくて投げ出すのがせいぜい。
いやだからBASICの話でしょ改造なのはw
昔はね。 今でも新しいことやるのはサンプルソースからやるけど。
┏┳┳┓ ハイ. ┏┳┳┓ ┏┫┃┃┃ 雑談は ┃┃┃┣┓ ┃┃┃┃┣┓ ここまで.┏┫┃┃┃┃ ┃ ┃┃┏━━━┓┃┃ ┃ ┃ 雑談 ┣┫ . ・∀・ ┣┫. STOP!┃ ┗━━━━┛┗┳━┳┛┗━━━━┛ ┏┻┓┃ ┏━┛ ┣┻┓ ┗━━━┫ ┗━┓ ┗━━━┛
┌┬┬┐ ハイ. ┌┬┬┐ ┌┤│││ 雑談は │││├┐ ││││├┐ ここから.┌┤││││ │ ││┌───┐││ │ │ 雑談 ├┤ . ・∀・ ├┤ START.!!│ └────┘└┬─┬┘└────┘ ┌┴┐│ ┌─┘ ├┴┐ └───┤ └─┐ └───┘
489 :
デフォルトの名無しさん :2007/04/03(火) 23:58:42
初心者なんですが、どうしても分からない事があります。お教え頂けないでしょうか? フックプロシージャで、VK_DOWNをVK_TABに変換しているのですが、PostMessageだとうまく行くのに SendMessageに変えると動作しません。 ソースは次のようなものです。 static LRESULT CALLBACK OnKeyHook( int nCode, WPARAM wparam, LPARAM lparam ) { if( nCode < 0 ) return CallNextHookEx( HHook, nCode, wparam, lparam ); UINT msg; if( lparam & 0x80000000 ){ msg = WM_KEYUP; }else{ msg = WM_KEYDOWN; } switch( wparam ){ case VK_DOWN: PostMessage( GetFocus(), msg, VK_TAB, lparam ); ←ココです。 return TRUE; default: ... break; } return CallNextHookEx( HHook, nCode, wparam, lparam ); } VK_UP を SHIFT + VK_TAB に変換するのに SetKeyboardState を使いたいので、SendMessage で 行いたいので困っています。 私の知らない何かがあるのでしょうか? どうかご教授下さい。よろしくお願い致します。
あまり詳しくないけどSendMessageはメッセージキューを経由しない (TranslateMessageを通らない)のでWM_KEYDOWNのSendでは WM_CHARが発生しないとか何とか。 ↑↓でフォーカス移動をするだけなら、キーボードイベントを捏造するより WM_NEXTDLGCTLをポストしたほうが楽だと思う。
MessageBoxみたく、手軽に小さいウィンドウを出して ユーザに文字列を入力させたいんですが、そういう関数ってありますか?
どういやDialogBoxと自分でウィンドウ作るのとどう違うんだろう・・・
>>494 ダイアログテンプレート以外の違い?
モーダルとモードレスで違うべ。
モードレスは自分で作る場合に近いな。
自分でメッセージループ持たせてモーダルにすることもできるけど。
>>490 さん
ありがとうございます。SendMessageはあきらめました。
ところで WM_NEXTDLGCTL ってダイアログでしか使えないんでしょうか?
今ダイアログを使ってなくて、普通のフォームのEDITとかCreateWindowで貼り付けてる状態で、
WM_NEXTDLGCTLは効かないみたいなんです orz
>>494 さんの疑問は私も悩んでいる点です
初心者でいっぺんにいろいろ覚えられないので、とりあえずダイアログを使わずにフォームをゴリゴリ
書いて、きつくなってきた所でダイアログの恩恵にあやかろうという方針を立てていました。
でも、そもそもの使用目的が違うような気がしてきて、にもかかわらず、その辺りの指針がはっきり
せず、すっきりしません。
皆さんはどういう基準で使い分けられてるんでしょうか。
今思ったんですが、普通のウィンドウとDialogの違いってメニューを付けられるかどうかじゃないでしょうか? 普通のウィンドウ、Dialog ともにモーダル、モードレスにできるし、どれで始めて、どう遷移していけばいいか 迷うんですけど... ひょっとしてDialogにもメニュー付けられたりして OTL
たしか付けられるはず。
基本的にダイアログテンプレートを使うか使わないかでわければいいじゃん
ウィンドウには色々なスタイルがあって、 その中の一部分をダイアログと呼ぶ、というだけ。 てか、ダイアログをメインウィンドウにした方が 色々と楽だと思うのは俺だけ?
>>496 IsDialogMessageでを使えるようにならない?
あと、ウィンドウクラスが #37770 じゃ困ることもあるべ
>>498 メニュー簡単に付きました orz
>>499 ですよね
現在ダイアログに傾倒して行ってるところです。
できれば全部これでやりたいと思い初めています。メイン画面から全部。
でもどのサンプルを見ても通常フォームから始まってるんですよね...
ダイアログでは実現できない事って、例えばどんな事なんでしょうか。
>>503 ダイアログでもウィンドウクラスを指定できる。
指定したときには、そっちになり#37770にはならない。
WM_PAINTとかWM_CHARとかウィンドウそのものに関するメッセージを使うときには 普通のウィンドウにして、ダイアログにしない気がする。 あと、501のとおりメニューやスクロールバー、ステータスバーが付くときも ダイアログは使われていないと思う(でもたしかにユーティリティでは見かけたことある)。 505みたいにどっちつかずな面もあるけど。
507 :
デフォルトの名無しさん :2007/04/04(水) 20:58:21
>>500 私もメインウィンドウをダイアログで行こうと考えています。
>>501 ありがとうございました。指針を示して頂いて、安心しました。
MSDN英語で読めるっていいですね。私はMSDN日本語でも頭がぐるぐるしてくるんです。
>>496 だめでした。
>>503 ダイアログのWM_CREATE(?)から CREATESTRUCT は取れるんですか?
まちがえました。
>>502 IsDialogMessageをメッセージループに入れてもだめでした。
ダイアログをメインフォームにしようとしているのですが、分からない事が出てきました。 DialogBoxParam でモーダル起動した場合、メッセージループが内部にあるから IsDialogMessage を組み込めないと 思うのですが、何か方法があるのでしょうか? CreateDialogParam でモードレスダイアログを作って、メッセージループを準備するのが正しいやり方なのでしょうか? どうかお教え下さい。よろしくお願いします。
ModalならIsDialogMessageは必要ないだろ
511 :
デフォルトの名無しさん :2007/04/05(木) 02:11:46
2個スレッドを作って、一つでユーザーインターフェースの処理 でもう一方で計算をさせたいと考えてます。 で、AfxBeginThreadと制御関数でマルチスレッドぽくはできました。 ただ、計算の進歩状況の表示や中断をさせられません。 今のところボタンをクリックされた後イベントハンドラ中で while文を回して進歩状況を表示していて意味がないんです。 ユーザー インターフェイス スレッド?を作れば一つは解決ですか?
>>510 本当だ!IsDialogMessage を入れないと TAB キーが使えないのかと思ってました。
ありがとうございます。
ウィンドウ登録、作成、メッセージループをダイアログに任せるだけで、こんなにもソースがすっきり!VBみたい しかもコントールをXP風にできました。 うれしいです (↑∇↑) ありがとうございました。
514 :
511 :2007/04/05(木) 05:12:06
ようするに、 WinMain()に別のスレッドから進歩状況を伝えて イベントを起こして表示させる方法を教えてください。 ということだったんですが、今もう一度探したら PeekMessage()というのを見つけました。 どうも自分が行わせたい処理はマルチスレッドを使わなくても よいように思うんでPeekMessage()を使ってみます。 できたあとの話になるんですが、処理にかかった時間を計測とか できるんでしょうか?関数の実行に要した時間なんですが…
515 :
511 :2007/04/05(木) 05:26:52
timeGetTime見つけました。 スレ汚し申し訳ない…
>>505 ダイアログにウィンドウクラスを指定する方法を是非ともお教え下さい。お願いします┏○
COM(ActivX?)が良く分かりません。以前VBでコントロール作ったり、ActiveX.Exe,ActiveX.Dllを作ったぐらいで... 将来的にやりたい事は、以下の2つです。できればMFCなしで行いたいんです。 1.ブラウザ上に貼り付けて利用するもの。 2.DirectX,DirectShow がComベースらしいので理解したい。 疑問点は以下の2つです。 1.MFC使わずにATL だけで実現可能でしょうか? 2.VS.NET 2003 で作成できるのでしょうか?(No Managedで) 今まではVC6の ATL COM AppWizard で作成してたんですが、VS.NET 2003 ではどの AppWizard で作ればいいのか 分かりません 。 どうかよろしくお願いします。
┏ ・:∴○ ドシュッ
520ですが、1は自己解決しました。 VC付属の OLE VIEWER で右クリックしたらHTML用にOBJECTタグを作ってくれて、ブラウザ上で動作しました。 ろくに試しもせずに質問してしまい、申し訳ありませんでした。
聞きたいことがあったんだけど、レス書いてたら答えに気づいたw
そういうことって結構あるよ。 文章にするというのが軽く気分転換になっていると思う。
すみません。 変数の定義(int型)をmainメソッドの中の中間あたりで行うと 「そのような識別子はありません」とエラーが出てしまうんですが (定義をmainの先頭に持ってくるとエラーが出なくなります) なぜなんでしょう。先頭と中間での定義の間で printf、scanf、while関数等を使っているんですが、何か関係がありますか?
>>525 言語は何?
古いCでは変数宣言はブロックの先頭にある必要がある。
#勿論、ブロックの先頭ならよいので以下の例は問題ない。
int main()
{
printf("foo\n");
{
int foo = getchar();
printf("%c\n", foo);
}
return 0;
}
どうでもいいが、while関数なんてものは無いし、
一般的にcではメソッドとは言わない。用語は間違わないように。
知ってるけどスレ違いだから教えてやらない
そうなんですか、ちなみに言語はCですね。失礼しました。 getch()等が「古い型」だと注意されるのはなんだろうと思っていましたが。 ブロックを設けて先頭へ記述するようにします。 用語も適当に使っていました。
まさか printf("%d", a); int a; なんてやってるオチでは…
あー、普段はエディタが勝手にインデントするし、どうせ見えないと思って割愛した。許せ。
自動コード整形のパターンってカスタマイズできるんでしょうか?
2chにソース張ること自体ねぇ・・・ どっか引っ越そうぜ
int main() { using std::vector; typedef std::vector<int>::size_type vec_sz; vector<int> Integers; int Integers_num = 112, Integers_max = 100, Integers_min = 0 ; make_randnums( Integers, Integers_num, Integers_min, Integers_max); vector< vector<int> > Devided; vec_sz Devided_num = 4; Devided.resize( Devided_num ); vec_sz Dev_contents_num = Integers.size() / Devided_num ; for ( vec_sz i = 0; i < Devided_num - 1 ; i++ ) Devided.at(i).resize( Dev_contents_num ); vec_sz last_num = Integers.size() - ( Devided_num - 1 ) * Dev_contents_num; Devided.back().resize( last_num ); if ( Integers.size() == ( Devided.size() - 1 ) * Devided.at(0).size() + Devided.back().size() ) { }else exit(1); std::sort( Integers.begin(), Integers.end() ); std::reverse( Integers.begin(), Integers.end() ); vector<int>::iterator start_ptr = Integers.begin(), end_ptr = start_ptr ; for ( vec_sz i = 0; i < Devided.size(); i++ ) { std::copy( start_ptr, end_ptr += Devided.at(i).size(), Devided.at(i).begin() ); start_ptr += Devided.at(i).size(); } return 0; }
535 :
534 :2007/04/08(日) 22:05:10
このプログラムは某入門書の例題でヘタレの俺なりの回答案です 80行以上あったプログラムがコメントとか{}消したら1レスに収まっちゃったわけですが コレって元の書き方が悪いんですかねぇ?
勿論全体ではなく一部なんですが それでも80超行が30行ちょっとってのは無いでしょうってことです
すみません
激しく読みにくくてウザい
ゴミ
こういうのだったら消していい。 int i; /*ループ変数*/
542 :
デフォルトの名無しさん :2007/04/08(日) 22:37:41
良いプログラムとは、コードよりコメントの行数の方が多い
ん? 元のソースはわからないけど これよりはマシだったんだろうなぁと思う。
良いプログラムとは、コード自体がコメントのように読める
良いプログラムとはコードのないプログラム
良いプログラムとは、ドキュメントだけでコードが理解できる ( ・`ω・´)ノ
それは読んでる人の性能がいいだけじゃ・・・
学習用の過程で作ったものだったら それこそ8割がコメントとかでもいいんじゃないの? コメントに表現しようとあれこれ考えるのも理解の助けになるし
8割コメントって、学生かい ( ・ω・) 一応、クラス3分、関数30秒(=4行くらい) で、読み終わる程度がいいとされてる 限られたスページと時間で、どれだけ理解させるかが文章力だ m9( ・`ω・´) 仕様100ページもあったら、結局何書いてるか分からんし マニュアルも全部読まないでしょ、バージョン上がったらゴミになるし
>仕様100ページもあったら、結局何書いてるか分からんし ・・・
Boostのビルドも出来ん雑魚はほっとけ
仕様書以外に何が用意されているかが問題だな。 サンプル一切無しなら死ねる。
どれだけコードを綺麗に区切ってまとめられるかと、 それにどれだけ適切なコメントをできるかが 勝負の分かれ目 コメントは付けりゃいいってもんじゃない 8割コメントはちょっとアホだろ・・・w 場合によるけどさ
ここって結構底辺なのなww
_____ /::::::::::::::::::::::::::\ _ /::::::::::::::::::::::::::::::::::::::\ /  ̄  ̄ \ |:::::::::::::::::|_|_|_|_| /、 ヽ |;;;;;;;;;;ノ \,, ,,/ ヽ |・ |―-、 | きみ頭だいじょうぶ? |::( 6 ー─◎─◎ ) q -´ 二 ヽ | |ノ (∵∴ ( o o)∴) ノ_ ー | | /| < ∵ 3 ∵> \. ̄` | / ::::::\ ヽ ノ\ O===== | :::::::::::::\_____ノ:::::::::::\ / |
それがくだすれのくだすれたる所以
class Fred; typedef auto_ptr<Fred> FredPtr; class Fred{ public: static FredPtr create() throw(bad_alloc); static FredPtr create(int i) throw(bad_alloc); static FredPtr create(const Fred& x) throw(bad_alloc); virtual void goBowling(); private: Fred(int i=10) throw(); Fred(const Fred& x) throw(); int i_; }; FredPtr Fred::create() throw(bad_alloc) { return new Fred(); } FredPtr Fred::create(int i) throw(bad_alloc) { return new Fred(i); } FredPtr Fred::create(const Fred& x) throw(bad_alloc) { return new Fred(x); } void Fred::goBowling(){ std::cout << this->i_; } Fred::Fred(int i) throw() : i_(i){} Fred::Fred(const Fred& x) throw() : i_(x.i_){} void sample() { FredPtr p(Fred::create(5)); p->goBowling(); }
558 :
デフォルトの名無しさん :2007/04/15(日) 09:37:49
C++QAにあるソースなんですが、 p->goBowling();でアクセス違反が起こります。 なんで?
559 :
デフォルトの名無しさん :2007/04/15(日) 21:24:47
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて 結局派遣やってるバカがいるんだけどw なんか派遣先といい関係、とか言ってたから思わず吹き出しちゃったよw 最近はマネージャーもやってるとか寝言言ってるし、派遣がまねぇじゃぁ?はあ!?w そもそも信頼されてるなら直接契約するか正社員にするはずだが、 いつでも切れる派遣会社経由って舐められてんだよ 派遣期間が長くならないうちに早く就職しろ、と忠告したら、ウッキー!って逆ギレw バカで頑固だから何度言っても理解できない 騙されたとはいえ結局は自分で決めて派遣やってる癖に逆ギレしちゃってまぁ 人間として本当に恥ずかしい
そうか、とりあえずスレタイ読み直せ。
>>559 派遣と言ってもいろいろあるんだけど知らんのか?
数十人の派遣プログラマがいればマネージメントする人間も当然必要になる
だろ。その人間は責任を負うと同時に給与も高いって仕組み。
派遣は確かに「いつでも切れる」存在ではあるけど、切るためにはそれなり
の理由が必要だし、むやみに切れば信頼関係が損なわれて派遣を採用する
会社側にも損失はあるんだよ。
そもそもお前のそのレスから簡単にプロファイリングするに、
お前自身がちょっとどうかと思う人間に見えるわけだが…。
よくみかけるコピペだけど
>>562 そうなの?俺ははじめて見た。
どこが笑い所のコピペなの?
>>564 数あるコピペから
>>559 はなぜこれを選んだんだろ。
貼り付けた理由が理解不能。しかもこのコピペ、ちっとも面白くない。
あとスレ違いも甚だしい。なんなんだコイツは。
面白くない上に長いから、嫌がらせにはちょうどいいということじゃないのか あまり長すぎると1行も読まれないから、あのくらいにしたんだろう
あの長さなのにコードが一行も無い時点で読まない
568 :
デフォルトの名無しさん :2007/04/17(火) 21:43:20
流れ読まずに投下スマソ WTL7.1 の AppWizard でダイアログベースのプロジェクトを作って、 ダイアログのフォントを MS UI ゴシック/9pt に設定したんだが、 実行時に文字化けを起こす。 教えてエロい人><
>>568 WTLだと言語がデフォルトで「英語」になってるはず。
開発環境によって違うが、リソースエディタのどこかに言語を設定するところがあるから
そこを「日本語」に変えてみ。
>>569 おっしゃるとおり、リソース自体の言語が 英語 になってますた!
最初日本語にしても「あれ?カワンネ」と思いリビルドしたらうまくいった!
thxエロイ人!!!!!!!!!!
571 :
デフォルトの名無しさん :2007/04/17(火) 23:12:59
以下のような全角半角変換関数を作ったのですが、変換成功判定がうまくいきません。 『×』の行がおかしいところです。 どうすればいいのかお願いします。 ちなみにVC++6です。 //全角→半角変換関数 BOOL CDlg050Imp::ConvertZenToHan(CString gZenNum, CString& gHanNum){ BOOL bRet = TRUE;//変換成功フラグ CString gAfter = _T("");//gHanNumを直接使うと前回のバッファが残っているので別変数を間にかます。 int nLenValue = gZenNum.GetLength(); int nRet = LCMapString(GetUserDefaultLCID(), LCMAP_HALFWIDTH, gZenNum, nLenValue, gAfter.GetBuffer( nLenValue ), nLenValue); gHanNum = gAfter;//コピー × int nLenAfter = gAfter.GetLength();//必ず0になってしまう。 × int nLenHanNum = gHanNum.GetLength();//必ず0になってしまう。 if(nLenValue != nLenAfter)//文字数が違うなら bRet = FALSE;//変換失敗 else { for(int nMoji = 0; nMoji<nLenValue; nMoji++ ) { CString gOneZen = gZenNum.Mid(nMoji, 1); × CString gOneAfter = gAfter.Mid(nMoji, 1);//nLenAfterが0なので当然ながらアプリエラーが起きる。 if(gOneZen == gOneAfter)//同じ文字があるなら { bRet = FALSE;//変換失敗 break; } } } }
ReleaseBufferはどこだ?
573 :
571 :2007/04/17(火) 23:32:23
× gAfter.ReleaseBuffer(nLenValue);//アプリエラーが起きる int nLenAfter = gAfter.GetLength();//正常に長さが取れた ↑ ReleaseBufferを入れてみたら、アプリエラーは起きますけど長さは取れました。 って、やり方が違うのかな…
574 :
デフォルトの名無しさん :2007/04/18(水) 00:00:51
>>561 論点ずれまくりだろ
自分で正社員を辞めて派遣になったのにブーたれてるような人間は
何をやってもダメだと思うぞ
プログラムをコンパイル→実行したあと自動的に閉じないようにできますか?
できます。
577 :
デフォルトの名無しさん :2007/04/18(水) 12:32:28
質問よろしいでしょうか。 VisulC++6.0で exe→pdf呼び出しを行いたいのですが、コンポーネントの追加にAdobe PDF Readerを追加し、ダイアログに貼り付けようとしたら「ActiveXコントロールのインスタンスは作成されませんでした」とメッセージが表示され、貼り付けることができません。 exeから呼び出しを行いたいので、ShellExcuteEXを使わない方法以外にはないのでしょうか? どなたかご教示お願いします。
>>577 ネタか?
CreateProcessの引数にpdf
IEがやってるようにActiveXを上手いこと使いたいんでないの。
じゃIE貼っとけ
577です。 Acrobat SDKのActiveViewみたいなことをと思っておりました・・・。 質問の意図が意味不明になっており、ご迷惑をおかけしました。 579氏、580氏 IEを貼る手法で行いたいと思います。。 ありがとうございました。
>>576 どうやるの?
ソースに余分な関数入れるんじゃなくて設定でできるの?
つ デバッグ無しで開始
>>583 ありがとうございます。出来ました(゚∀゚)
すごく助かりました
ウィンドウプログラミングで ウィンドウハンドル、ウィンドウプロシージャで作るのと ビュークラスやダイアログクラスで作るのと 2つあるみたいですけど・・・何が違うのですか? どちらが主流なんですかね
>>585 >ウィンドウハンドル、ウィンドウプロシージャで作るのと
これは低レベル(抽象度が低いって意味ね。「高級言語」とかいう時の高級/低級)。
>ビュークラスやダイアログクラスで作るのと
中で上の低レベルなものを使ってる。
Win32APIだけで作るのはだいぶ面倒くさい。既にあるものは使った方がいい。
Visual C++6.0 のインストールを行っています。 続けてサービスパック6を入手しインストールしようとしましたが、 「ファイル C:\Windows\System32\MSFLXGRD.OCX を開くことができませんでした」 となり、セットアップが正常終了しません。 セットアップ手順に誤りがあるのでしょうか。 (MSDNからサービスパック6を入手し、展開先のフォルダで setupsp6.exe を実行しました)
CDにMSFLXGRD.OCX入ってるだろ
>>588 迅速なレス感謝です!
そもそも、Visual C++6.0インストール時のオプション設定で選んだインストール構成では MSFLXGRF.OCX が不要
(つまり、今発生しているSp6適用時のエラーは無視してよい)なのか、
それとも、CDからOCXファイルをコピーしてきてでも本セットアップ(SP6)をあてるべきなのかがわかりません。
今や貴重なコントロールなんだから入れておけば?<FlexGrid
Sp6のセットアップエラーを無視しても動きましたが、 一応FLXGRD入れておくことにしました。 助言ありがとうございましたm(__)m
winXPでMicrosoft Visual C++ .NETを使っています。 ご相談したいのは、 「新規作成」→「プロジェクト」→C++の「MFC アプリケーション」で作成して その後のウィザードで「アプリケーションの種類」→「ダイアログ ベース」に設定して「完了」を押すと 〔〜.ncd〕〔〜.sln〕〔〜.suo〕〔〜.vcproj〕しか作られません。 どうすれば良いでしょうか。 御教授をお願いします。
まずは日本語の勉強してきてくれ。 難しいなら敬語は使わなくてもいいよ。
どの辺が分かり難かったでしょうか? 要約をさせていただくと、「〔〜.ncd〕〔〜.sln〕〔〜.suo〕〔〜.vcproj〕以外のも作られるようにするには どうすればいいのでしょうか」ということです。 どなたか、ご返答をお願いします。
それ以外の何を作りたいのかさっぱり。
>>594 クラスビューやソリューションエクスプローラなどで「追加」すればいい。
色んな所で右クリックしてどういうメニューが出るかとか、
上に並んでるメニューの中の項目を一通り試してみるとか、しないか?普通。
IDEもGUIアプリなんだしさ。
ウィザード使ったらビルドすれば実行可能な状態のソースまで作ってくれる。 空のプロジェクトなら自分でソース追加しなきゃ始まらないけど、 ダイアログベースならダイアログ出すソースができてるはず。
>595-596はたぶんMFC使ったことないから無視で
ビルドしなくてもソースは生成されていないとおかしい 操作ミスなのではないか?
600 :
599 :2007/04/23(月) 17:28:58
あ、何か誤読してたスマソ
601 :
592 :2007/04/23(月) 18:02:29
すいません。 書き忘れていたことがありました。 「スケルトンが作成されない」のです。 本当に申し訳ありません。
2005じゃないということはだいぶ前にインストールした? それから何回か使った? 全く状況がわからん
603 :
592 :2007/04/23(月) 20:04:15
>>602 2003です。
インストールしたの半年前です。
604 :
592 :2007/04/23(月) 23:00:15
>>596 ご返答ありがとうございます。
「開始」を押すと
「デバックを開始できません」
「プログラム'〜.exe'を開始できません。」
「指定したファイルが見つかりません」
というウィンドウが出てしまうので、ただスケルトンが表示できていない
のではと思うのですが、それ以上は私にはわかりません。
606 :
デフォルトの名無しさん :2007/04/25(水) 12:10:32
大学のVisual studio2003でWM_MOUSEWHEELメッセージを拾おうとしたら WM_MOUSEWHEELは定義されていないというエラーが出ました。 マウスカーソルをWM_MOUSEWHEELの上に持っていくと、 #define WM_MOUSEWHEEL 0x020A とちゃんと出ているので自分でその値をdefineしたらビルドが通ったのですが、 なんで自分で置かないとWM_MOUSEWHEELが定義されていないと出るのでしょう?
WM_MOUSEWHEEL はあとから追加されただけで windows.hに無いからね
608 :
607 :2007/04/25(水) 12:29:41
#define _WIN32_WINNT 0x0400 を入れれば有効になると思うよ
>>607 ありがとうございます。
後からというのは自宅のvisual studio2005では普通に出来たのでそこからということでしょうか?
ちなみにソースコードのWM_MOUSEWHEELにマウスカーソルを持っていくと
#define WM_MOUSEWHEEL 0x020A とちゃんとdefineされているように出てくるのは何でなのですか?
「条件」によって存在しなかったことになる。
>>610 本当にすまないのですがまだ無知ゆえもう少し詳しくお願いできますか?
条件コンパイル
>>612 なるほど、そういうことでしたか!
よく分かりました、ありがとうございます><
614 :
デフォルトの名無しさん :2007/04/25(水) 22:12:59
質問させてください。 FLOAT型の変数の値をMessageBoxで表示させたいのですが、ビルドを実行すると 2番目の引数を'float'から'LPCSTR'に変換できません。と出ます。float型をLPCSTR型に 変換するにはどうしたらよいのでしょう?コードはこのような感じで書いてます。 float a = 0.3f; MessageBox(NULL, a, NULL, MB_OK);
sprintf
>>605 ご返答ありがとうございます。
ダイアログって、ダイアログベースのことですよね?
自分は初心者なもので、間違っていたらすいません。
〜.ncd
〜.sln
〜.suo
〜.vcproj
フォルダにはこれだけでした。
>>617 ダイアログベース以外の、SDIやMDIで作るとどうなるかって聞いてんだよ
なんでそんな偉そうなの?教えてあげる対価としていばってんの?
620 :
592 :2007/04/26(木) 12:27:11
>>618 MDIでやっても、SDIでやっても、結果は同じでした。
>>617 で示したファイルしか作られていませんでした。
>>620 とりあえずその現象はおかしいのでインストールしなおしてみては
ダイアログベースだけならファイル差し替えてみる手もあったが
全部だとインストールやり直したほうが早い
つか、
>>619 はこの程度で偉そうと感じるのか
どういう世界で育ったんだ、一人っ子か?
いや、、まぁ偉そうなことは偉そうだろう。 常識的に考えてww ただここは2chだしね。
まだ答えてくれる人がいるだけでもラッキーだと思うよ
625 :
592 :2007/04/26(木) 15:10:57
>>622 ここに来る前に、それを何度かしてみたのですが、結果は同じでした。
再インストールもアンインストールしてからのインストールもしましたが、結果は同じでした。
それで、悪意のあるファイル云々が原因かと思い、ノートンでスキャンしてみたのですが
異常はありませんでした。
>>625 とりあえず、同じ現象が出てる人がいないようなら
MSのサポートに聞いてみたら
今から2003なんて不自然だし割れなのかも
628 :
592 :2007/04/26(木) 18:21:20
>>625 わかりました。聞いてみます。
色々とありがとうございました。
629 :
592 :2007/04/26(木) 18:22:18
おまえもういいよ、寝てこいよ。
まあOSの再インストールからやれば直るんだろうけどw 余ってるマシンにインストールして比べてみるってのはたまにやるな
632 :
デフォルトの名無しさん :2007/04/26(木) 23:29:48
テキストボックス内のカーソルの位置から 現在の行数を取得したいのですが、 1行が1024文字を超えた位置にカーソルがあると、 下記の変数rowの値が1だけ繰り上がってしまいます。 どうやら1024区切り(1024,2048,3072,…)で1ずつ繰り上がるようです。 TEXT->WordWrap = false; int row = TEXT->GetLineFromCharIndex(TEXT->SelectionStart); TEXT->WordWrap = true; これを回避して、1024文字を超えても正しい行数を返すように 修正できないでしょうか?
エディットコントロールの制限で、実際に折り返されている予感。
そのテキストボックスはどうやって作った? パラメタは?
635 :
デフォルトの名無しさん :2007/04/27(金) 17:54:02
質問があります。 以下のようにバイナリファイルを読み込みました。 static char buff[1024*1024]; std::fstream fs ("hoge.dmp", std::ios::in); fs.read(buff, size); fs.close(); すると816バイトくらいまでは読み込めるのですが、それ以降がヌルに なってしまいます。 何か制限などはあるでしょうか?
オープンモードに std::ios::binary も要るのでは?
VC++ExpressEditionというのを導入してやっているものです。 ちょっと思うところあってあえてIDEは無視してコマンドラインでやってます。 このたびWin32APIというのに手を出してみようと思い立ったのですが、 下の順番でどつぼにはまっています。 @windows.hがインクルードできない →MSのサイトを参考にしながらWindows Platform SDKというのを導入して、 IDE環境ではインクルードしてビルドして実行できるようになりました。 Aコマンドラインではそれだけではコンパイルできない →VCVARS32,batを直してSDKにもパスが通るようにしました。 Bインクルードはできているっぽいけど、リンクできないところがある error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が関数 _WinMain@16 で参照されました。 fatal error LNK1120: 外部参照 1 が未解決です。 Bを抜け出すためのアドバイスをいただけないでしょうか。
1.ライブラリパスの設定 2.user32.lib等をリンクする
638です。 おっしゃるとおり、 cl user32.lib hoge.c でうまくいったのですが、なんか???という気分です。むむ。
__imp__MessageBoxA@16、つまりMessageBox()関数はuser32.libに入ってるってことだ 正確にはインポートライブラリだけどまあ同じこと
>>638 IDEで簡単にリンクが通るのは、プロジェクトを作成した時、
参照するライブラリとして kernel32 user32 とかが予め設定され、
ビルド時にCLのパラメータとして渡されるから。
よって、直接コマンドラインで実行したければ全て記述する必要がある。
良い機会だから、NMAKEを勉強するのもいいかもしれないな。
ついでにGNU MAKEもやっとけば、後で幸せになれる。
638です。
>>641 &642
なんとなくわかってきました。つまりは両氏のおっしゃる通りとしか言いようが無いみたいで、
NMAKEを勉強すべき、というところに私もたどり着きました。
チャールズ・ペゾルドというひとが書いたぶっとい本を頼りにぼちぼちやってます。
ここに書くことでもないですけどいい本ですね。これ。
また詰まったら参ります。どうもありがとうございました。
644 :
デフォルトの名無しさん :2007/04/30(月) 14:20:57
VisualC++2005ExpressEdition落としたんですが しょっぱなから使い方わかりません どうすればいいですか?
>>644 使い方って具体的に何がだよカス
林晴比古『明快入門 Visual C++ 2005 ビギナー編 』
山本信雄『Visual C++〈1〉はじめてのWindowsプログラミング』
http://www.kumei.ne.jp/c_lang/ あくまで参考程度&初心者用ですが、
この辺を見て自分はVC++とwindowsプログラミングを覚えました。
>644 ヘルプを読めばいいと思う
647 :
デフォルトの名無しさん :2007/04/30(月) 15:22:53
649 :
デフォルトの名無しさん :2007/04/30(月) 19:54:45
VC6.0、ダイアログの作成について質問させてください。 OnInitDialog()で独自の初期化処理を行っています。 初期化処理に失敗した場合、メッセージボックスを表示し、 ダイアログを表示しないようにしたいのです。 モーダルウインドウの場合、EndDialog()を呼び出せばよいのですが、 モードレスウィンドウの場合、どのように処理したらよいのでしょうか? 識者の方、ご教授お願いします。
WM_CLOSEかEM_DESTROYでも投げてみては
>>643 通りすがりだけど MAKE勉強すると後々役立つよ
良スレですね!!
652 :
デフォルトの名無しさん :2007/05/01(火) 10:06:37
CFileDialogの「新しいフォルダの作成」ボタンを非表示か 無効にしたいです。 可能でしょうか。
可能です
654 :
652 :2007/05/01(火) 16:48:13
>>653 さん
ありがとうございます。色々方法を調べましたが
うまくいきませんでした。具体的な方法を教えて頂けないでしょうか。
655 :
デフォルトの名無しさん :2007/05/01(火) 17:01:02
関数を毎秒もしくは毎分という単位で呼び出したいんですが 何を使うのが良いでしょう?
精度悪くていいなら WM_TIMER 精度が必要ならアイドル時に timeGetTime で自分で時間を計って処理
657 :
デフォルトの名無しさん :2007/05/01(火) 17:57:44
いままでMAPLE Vでプログラム作っていたものです。 『これならわかるC++』(小林健一郎著)を読んでC++の勉強をし始めたのですが、 VisualC++の方がC++より簡単なんでしょうか? 両者の関係がよくわからず、もしVisualのほうが使い勝手が良いようでしたら、そっちにしようかと考えております。 もしよろしければVisualC++とC++の違い(プログラミングの容易さ)について教えていただけないでしょうか。プログラム以前の質問で恐縮ですがよろしくです。
C++は言語 VisualC++は製品
659 :
657 :2007/05/01(火) 18:10:56
>658 私の質問のしかたが悪かったです。 Borland C++5.5 CompilerとVisual C++の違いに付いて教えてください。
Borland C++ 5.5 Compiler はコンパイラ Visual C++ は統合開発環境
裕美子といいます。大都会の片隅で×いちのOLをしています。
>>659 VisualC++はマイクロソフトの製品で、BorlandC++5.5はボーランドの製品です。
ともにC++言語を利用してWindows用のソフトウエアを開発するための「開発ソフト」
です。
VisualC++はIDE(統合開発環境)という高度なソフトウエアを内臓しています。
大規模なアプリケーションを作成する際には、たくさんのファイルを作成し、また
メーカーが用意したたくさんのファイルを利用して、それらを関連づけし、連結したりして
一本のソフトウエアが完成するのですが、それをいわばボタン一発で操作できる。
優れた開発環境です。ボーランドの同様な開発ソフトにはBorlandC++Builder(略称BCB)
というものがあり、GUIの作成はこちらのほうが容易かもしれません。
BorlandC++5.5は、このBCBからIDEを取り去り心臓部分だけを無償で公開したソフトです。
純粋にC++の学習に励むだけならBC++5.5でいいでしょう。 しかし、将来はやっぱりWindowsのソフトをつくりたいのなら、 VC++かBCBを入手して使い勝手に慣れた方がいいと思います。 VC++は無償のものがあります。これでC/C++の学習ができますが、 きちんとしたWindowsのアプリケーションを作成するにはファイルが 足りません。私はVC++もBCBも最新版を触って使っていますが、 個人的な感想としてはショップで購入する、VisualC++2005をお勧めします。 それは市販されている参考書の多さとユーザー数の多さから、先々 助かったと思うことがあると考えるからです。
一行目と名前欄でまぁたバカ業者かと思ったら まともなレスをしてるとはこれ如何に・・・。
ワロタ
書籍に付いているCDーROMってSDKも 入ってるんでしょうか 雑誌に付いていたのは別にダウンロードしないと 駄目だし、設定も結構複雑なので 書籍買おうか迷ってるんですが
666 :
657 :2007/05/01(火) 19:40:53
>661,662 裕美子さん ありがとうございます! 私はシミュレーションをやりたいだけなので、Borlandで十分な気がいたしました。 あした本屋とかで参考書を見て、あらためて考えようと思います。
2005expressがついてる本はあるけどsdkはついてないのが普通 proならsdkはいっしょにインストールされる
>>667 そうですか....
では製品版を考えて見ます
とりあえず無料のほうは両方試してみるのもいい 特に、デバッガの使い勝手が今後に効いてくるかもしれんから そっちもチェックな
BCC はメルアド登録が鬱陶しいから 個人的には VC++ がいいと思う。
Visual C++ 2005を使っていますが文字化けに悩まされています。 ある規格値をEditBoxに入力して、 その値をプログラム中で受け取ると、 かなり文字化けしてしまいます。 .GetWindowTextA((LPTSTR)str); とか .GetWindowTextA((LPTSTR)str, 256); とかいうとり方などを試しているのですが、 うまくいきません。 やりたいこととしては、 @規格値を文字でとってくる A数字に変換(double型) atoiとか? Bifによる判別 という流れです。 よろしくお願いします。
そもそも何を入れたらどう化けるのさ
そもそも規格値って何さ? エディットボックスの入力値ってこと?
整数値で良ければGetDlgItemIntを使うのが簡単
>>672 なんか質問の仕方が稚拙な気が…。
スレタイどおり超初心者の予感。
私も初心者ですけど
@ string s = EditBox->Text;
A double d = Convert::ToDouble(s);
B if( d == 1.00 )
という感じかと…。
変換については「Convertクラス」を検索してみれば良いかと思います。
>>673 数字です。
表示は化けてません。
>>674 エディットボックスの用途として、
ある値を入力させ、それを規格値として
使用すると言う意味です。
>>675 明日試してみます。
>>676 Convertクラスですね。
調べてみます。
>>677 入力の補助的な物?を見るとGetWinodwTextがなくて
GetWindowTextAとついていました。
>>678 現在手元にありません・・・
すみません。
初心者で・・・あまり理解しておらず、
質問がわかりにくくてすみません・・・
まずはテキストボックスに入力した文字列をそのまま ダイアログボックスに表示するコードを書いてみるんだ。 あと、GetWindowTextと書けばコンパイル時にその環境に応じて GetWindowTextAかGetWindowTextWのどちらかに置き換えられるので 普通はAとか要らない、これはGetWindowTextに限らずそう
OS は XP だろうから W になるはずで、 それなのに A にしてるから変になってるんだろう。
VC6.0でデバッグ実行した時メインPCだと混合モードが呼び出されてint 3で止まってしまいます。通常実行は問題ないです。 環境を近づけたサブPCで同ソース同ライブラリでデバッグ実行したら止まりませんでした。 ぐぐると同じような症状あったのですがどれもわからなくて解決できませんでした 突然出始めた症状なので再インスコすれば直りそうな気配なんですがその再インスコちょっと待った!っていう 何か知識ございましたらヘルプお願いします
>>679 「規格値」って言葉は紛らわしいね。
職場とかのローカルな場ならいいけど、そうでないなら一般的な用語を
使うべきだと思う。単に「値」でいい。
なんかデバッグしてると「"cmd.exe"の起動中にエラーが発生しました」とか 言ってエラー表示されてるんだけどこれなに?実行には特に何の問題も 無いんだけど、表示だけがエラー一覧に出てる。 あとたまに「mfc80d.dllが見つかりません」とかも言われるんだけど、これ VisualStudioインストールし直した方が良いのかな。
気にしなくていいよ
>>685 mjd?
いやエラーはともかくとして、mfc80d.dllが無いっつーのは問題なんじゃ…。検索
したらちゃんとあったんだけどなぁ…
たまになら問題ないだろ 本人が状況把握してないのを他人が気にしてもしょうがない
>>687 いや、cmd.exeのエラーは必ず出るんだよ。でもデバッグは普通に成功してる。
これは正常異常、どちらかと言えば異常だよね…?
いまvisual studioだけ再インストールしたんだが解決せずorz
パス通ってないだけだべ
ごめん解決した。 cmd.exeで検索したら、なんか環境変数がどうのこうのでパスが 通ってないからどうのこうのだった。
691 :
682 :2007/05/03(木) 00:53:29
OS再インスコしたらデバッグで止まらなくなった\(^o^)/ あーバックアップと復旧めんどくさかった\(^o^ ;) でも俺のコードのせいじゃ無いようで良かった(^o^)/~~
質問させてください。 VC++2005とVC#2005のどちらをやろうか迷っています。 自分なりに色々調べたのですが、これから先、どちらの言語に 集中してやっていこうかいまだに迷っております。 そこで、VC++2005を使っている方にご質問したいのですが、 VC#ではなく、VC++2005を選んだ理由等あれば、お聞かせ願いないでしょうか。 また、将来的に、こちらの言語ができていたら就職等でも役に立つ、 というのがあれば、教えていただけないでしょうか。 よろしくおねがいします。
C++ができればC#なんてたいしたことないと思うから まずはC++を勉強する方がいいと思う C#だけできますなんて人を採用する会社はそんななさそう
694 :
デフォルトの名無しさん :2007/05/03(木) 03:24:11
>>692 逆だ、馬鹿。お前がどういうことをやっていきたいのかで自ずと決まる。
言語なんてただの道具であって。 何を作るかで使い分けるものだからな。
俺は両方やってる。 C#→(C→Java→)C++(→VB)の順でやったけど。 Javaまでは独学で、就職に役立つとかは全然考えずに、 他の言語にも興味を持ったからやるようになっただけ。 C++とVBは仕事で使えと言われて勉強した。 会社側から見れば就職時よりも就職後が大事だから 言語が二つ以上できるとか、 色んなフレームワークを使ったことがあるとかで、 学習能力があると思われる事の方が就職に役立つと思うよ。
697 :
692 :2007/05/03(木) 15:13:00
ご意見ありがとうございます。 私の個人的な趣味で、簡単なネットワークゲームを作ってみたいという 思いがあります。 また、迷っている理由として、検索したHPのどこかで、 「C#はC++2005が出た時点で意味をなさなくなった」という ニュアンスの文があったため、折角C#を覚えても、 需要がなくなっていくのでは勿体ないなとおもい、 言語は慎重にえらびたいな、とおもったからです。
698 :
デフォルトの名無しさん :2007/05/03(木) 15:23:00
>>697 いろいろ検索してみて、自分がやりたいことを実現する為の
技術のサンプルコードがより多く入手できる言語を覚えると吉。
現時点でC#からDirectXを扱う最新の手段がいまいちだからとか? MDXは終わってるし、XNAはXbox用みたいになってるし
これさえできれば一生安泰なんていう言語とか技術なんか無いから。 学んだ技術が廃れるのを恐れてるようじゃこの業界じゃ生きてけないよ。 廃れれば次を学ぶのみ。 新しいことに挑戦する姿勢が無いとね。
>>701 つ COBOL
これさえできれば一生安泰だよ。
君まだ一つもできる言語はないんだよね? C#がいいと思うよ。 後からC/C++にでもJavaにでも移りやすいし。 需要もあるし。
705 :
デフォルトの名無しさん :2007/05/03(木) 17:34:35
ダイアログをMDIの子ウィンドとして、親ウィンドからはみ出ない作り方教えて もしくは、VCで2,3日で20画面くらいを量産できる画面設計できる方法を・・・
formview
画像をボタンとして使いたいんだけど、どうしたらできるん? 習作として参考書に載ってるCDプレーヤを改良したいんだけど、 見た目の段階でつまづいたorz
>708 画像の描画の仕方についてはわかってるの? わかっているのならクリック時のマウスのポジションで ボタンを押したかどうか判定すればおk
コンソールアプリで、終わった後にすぐコンソールが閉じてしまうのは、 scanfなりcinなりで入力待ちにするしかないんですか? 2005です。 6でやっていたときは、終了するには何かキーを押してくださいみたいに 出てきていたと思うのですが。
裕美子といいます 今晩のおかずは海老の天ぷらとホタテの塩コショウ炒めです。
>>710 VS2005を使用している際に、アプリケーションの実行後すぐに窓が閉じるという
ことでしょうか?
もしそれならば、実行は「Ctrl+F5」で行ってみてはどうでしょうか?
>>711 Ctrl+F5、デバッグなしで開始でやればいいんですね
ありがとうございます
713 :
デフォルトの名無しさん :2007/05/03(木) 23:01:31
VC++ってヨドバシカメラで売ってますか?真面目な質問。
>>713 ヨドバシカメラに問い合わせたらいいと思うよ。真面目な話。
開発ツール扱ってる規模のPCショップや売り場ならあるんじゃないの。
>>713 どこのヨドバシやねん
梅田店なら置いとったわ
>>713 社会人でもアマゾンならアカデミック版買えるから、
アマゾンにしとき。
コレクションに飾っておくならそれがいいね
軽い開発環境、実行環境が欲しいんですが、 Visual Cは基本.netアプリなんですか? PlatformSDK入れればネイティブコード作れマスみたいに書いてある気がするんですが。
どっちも作れマス ただ、開発環境は重いデス
2003は軽いからおすすめ!!
VC6はもっと軽くてプロファイラもあるから超オススメ!嘘ぴょーん
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/ >Windows ネイティブと .NET Framework の両方に対応
>.NET Framework の提供するデータ アクセスやネットワーク、印刷などの機能を活用した、高度なアプリケーションをプログラミングできます。
>Windows Platform SDK* (英語) を利用して、高機能でパフォーマンスに優れた Windows アプリケーションを作成できます。
>Web サービスと連携するインターネット アプリケーションのプログラミングも可能です。
>* 無償で追加ダウンロード可能
>Windows Platform SDK*
って書いてあるんですが、リンクが切れてて。
で、それないとネイティブコードにはコンパイルできないんじゃないかと。
あ、Express版の話なんですが。
>>721 2003は有料じゃなかったですか?
無料がいいので。
無料なら2005一択だね
>>722 6は物凄くbuggyなんで駄目です><
マネージメントのフォーム(言い方合ってる?)で、iTunesの ミニプレーヤみたいなのを埋め込んでiTunesを外部操作でき るようにしたいんだけど、方法ある?
VCでどうかする前にiTunesの仕様を調べるのが先
>>726 ごめん調べる方法すらわからんorz
取り敢えずややこしくない方法で、「このボタンを押すと、裏で
iTunesが起動している場合Spaceキー(再生ボタンのショート
カット)を押したことになる」みたいなことはできない?
>>728 うーん…ちょっと違うような。
iTunesの埋め込みではなく、iTunesの外部操作がしたいんだよ。
VisualC++の本見ても載ってないっつーことは、なんか別の知識が
必要なんかな。
FindWindowとかGetMenuとかGetSubMenuとかSendMessageとか使うのは?
>iTunesのミニプレーヤみたいなのを埋め込んで
>>728 でなければこれはどういう意味?
マネージメントのフォームって何?
>>730 うーん…どれも違うような。
無理なのかなぁ…そういや裏のアプリケーションを操作できる
ソフトなんて見たこと無いしな…。
MacOS XのランチャーではiTunesの操作ができたりしたけど、
visualc++単体ではできないんかな。スクリプトとかそっち方面
の知識が要るのかも?
>>731 うーん…なんというか、あるソフトから裏で動いてるソフトの
リモートコントロールをしたい…って感じかな。
iTunesを埋め込むのではなく、仮のiTunesを仕込むというか。
WindowsMediaPlayerコントロールで裏で起動してるWindows
MediaPlayerの操作をしたい、って言えばわかるかな。
>>732 なんかマネージ形式(.net?)のフォーム。
MFCと.NETって違うみたいだから言ったんだけど、マネージ
メントじゃなかったごめんorz
ダウンロードしてWindows2000にインストールしようとしたらエラーになったので BorlandのTurboC++フリー版にしてみます。
735 :
733 :2007/05/04(金) 13:37:36
そういえば、ブラウザとかでもメールアドレスをクリックしたら メールソフトが起動して、新規メール作成画面が出るよね。 あんな感じでiTunesを操作できたりせんかな。
アウトプロセスサーバ"iTunes.Application"を叩く話か?
mp3をiTunesに関連付けておけば ブラウザでmp3のリンクをクリックしたら iTunesが起動するんでないの
>>723 Microsoft DownloadからWindows SDKをダウンロードしてインストールすればいいだけ。
>>725 iTunes COM for Windows SDKというもんがあるんだが、それでやれない?
>>733 今試してみたらiTunes起動・ファイルを渡して再生・一時停止
停止・ボリュームとか基本的な操作はできたよ。
もうちょっと遊んでみるか。
>iTunes COM for Windows SDK
そんなのがあったのか。
それも使ってみよう。
740 :
739 :2007/05/04(金) 14:28:59
>iTunes COM for Windows SDK って、自分が使ってたインターフェースのドキュメントとかが入ってるのか。
741 :
デフォルトの名無しさん :2007/05/04(金) 15:45:22
質問ですが、 C言語には出来るけど、HSPやBASICに出来ない事って どんな事ですか?教えて下さい。
Cコンパイラでのコンパイル。
プリプロセッサ…はHSPにはあったっけ。
高速処理
C言語自体はほとんど何もできないよ たぶんHSPやBASICのができることは多い あとここはC言語のスレじゃなくてVisualC++のスレだぞ
言語単体での機能(標準ライブラリのみ使用可)に絞ったら 確かに C にできることは限られるが・・・。 Visual C++ のスレ的には C なら何でもできると言っといた方が。
初心者でも手っ取り早く動く物をつくれるようにHSPみたいなのがあるわけだろ Cならなんでもできると言っても初心者は何もできないのが現実
初心者ですが、一応ライブラリ使わなきゃ C単体では四則演算、条件分岐程度しか出来ない らしいこは知ってましたが、スレ違いでしたか、すんません! ところで C言語と Visual C++ってそんなに違うもん なんですか?どんな感じに違うのか教えて頂け ませんか!文法も全然違うのですか?
>>747 さん
>Cならなんでもできると言っても初心者は何もできないのが現実
と言うのは確かにどこでも聞きますが、それはなぜでしょうか?
文法ですか?ハードに対する知識ですか?そのへんがよくわからんです
>>748 C言語 → プログラミング言語
Visual C++ → C++ の統合開発環境
言語とツールを比較する時点でおかしい
>749 耳掻きとおたまの違いだと思えば 耳掻きでスープをよそうのは大変だけど、 おたまで耳はかけない。つまりはそういうこと。
>>749 日本語という言語が使えても、誰でも芥川賞な文学作品が作れるわけでは無い、
みたいなものかな。
大工道具の使い方マスターしても初心者は本箱がせいぜい。 家なんか建てれるか
755 :
デフォルトの名無しさん :2007/05/04(金) 22:34:29
VC++はこの先ずっと6.0が一番使いやすいんですか?
2003がオヌヌメ
757 :
デフォルトの名無しさん :2007/05/04(金) 23:23:03
VC++2003のイミディエイトウィンドウでメンバ関数呼ぶときはどうすればいいんでしょうか? static int testss() { return 0; } class Cls { int i; public: Cls() : i(100) {;} int f(int i) { return this->i + i; } }; // main() int main() { Cls c; int i = 10; ● return 0; } ●のついた所で停止したとして cのメンバのf()を呼び、その戻り値を見たいときに イミディエイトウィンドウで? c.f(1);とか入力してもメンバが無いとか言われます c.iだとちゃんとメンバiの値の100を返してくれるのに… 同様にtestss()も上手くいきませんstaticなのに
iTunes COM for Windows SDK見ればわかるだろ。
>>759 ごめんわからん…。「iTunesCOMInterface.h」をインクルードして使うの?
だとしても命令の仕方が…
>>760 見てみたけど、IDLから書いたことある奴じゃないと少し解りにくいな、これ。
iTunesCOMInterface.hとiTunesCOMInterface_i.cをプロジェクトに追加。
iTunesCOMInterface.hのインクルードは必要に応じて適時行う。
後は、ヘルプの 'Class List' - 'IiTunes' を参照。
最初にCOMの初期化しておくのを忘れないように。(CoInitializeとか)
オートメーション対応のようだから、初めはWSHで色々試してみるといいかもしれない。
>>761 なるほど、ありがとう。ちょっと試してみる。
なんだそんなことか
何回も質問スマンけど、 C ファイル '.\iTunesCOMInterface_i.c' を /clr オプションと共にコンパイルできません とか言われるんだがなんで?iTunesCOMInterface.hとiTunesCOMInterface_i.cをプロジェ クトに追加して、他にやることあるのかな。 COMの初期化は ::CoInitialize(NULL); ::CoUninitialize(); でいけるの? 素人にはひとつつまづくだけで平気で数時間持って行かれるなorz みんな最初はこんなもん?
>764 >ひとつつまづくだけで平気で数時間 プロでもそんなもんだ 場合によっては何日もかかる場合だってある
VCで/clr付きでやるぐらいだったら、C#の方が簡単じゃない? 参照設定でiTunesのCOMオブジェクトを選択するだけで使えるはずだし。
C#のが簡単だね。 でもCLRもC#とほぼ同じ方法でできるのでは。
CLRを使ってるのに気づいてないというレベルじゃないのかな
もう朝から6時間ぐらい悩んでる手前、意地でも VC++でiTunesの操作をしたいんだが…。 iTunesCOMInterface.hとiTunesCOMInterface_i.cを プロジェクトに追加した後、どうすればいいのか 詳しく教えてくれませんかorz
今月中に出来たら神って讃えてやるよ
>>770 で、clrとネイティブはどっちでやるんだ?
>>772 clrって、マネージドのアプリってことだよね。
だったらCLRでやりたいんだけど…。
>>773 だったら #import "xxxx.tlb" は使えないぞ。
C#と同じでCOM Interopを使う。
クラスメンバでstaticなコールバック関数に クラス本体のポインタ(早い話this)を伝える方法はないですか?
776 :
↑ :2007/05/05(土) 14:13:46
引数は自由にならないです。
全てをstaticにすれば問題なし
>>776 void* のポインタ渡して、、ってわけにいかないのなら何か別の手を使ってみては。
>>773 マネージドは全然わからんが、ちょっとやってみた。
ソリューションエクスプローラから右クリック→参照の追加→新しい参照の追加→COM→iTunes Type Library
すると、InteropディレクトリにDLLができるんで、
#using <./Interop/DLLファイル名>ってやればインテリセンスも使えるみたいだぞ
っ グローバル変数
windowsのコールバック自体C++なんか考慮して作ってないからな。
>>776 グローバル変数を経由するか、
あるいはその自由にならない引数に、
本当の引数と this とを入れた構造体を渡すか。
グローバル変数を経由するってのも、
ちゃんと排他処理してれば安全かと。
>>782 普通、余分な情報を1つ加えられるようにしてあることないか?
あかん。後者は無理だ。
自分を指すポインタをメンバに持つとかできねぇの? でコンストラクタでthisをそいつに放り込むとか
そういうときこそ、ATL流のサンク自動生成だッ
staticなポインタにthisを入れるってこと? グローバル変数と同じじゃん。 複数個作るなら、それじゃ無理だべ 直前に変数に書いたほうがまだまし。
>>785 SetWindowLongPtr で GWLP_USERDATA に this をセットした方が
アトムのチェックが不要な分だけ高速だと思う。
staticなメンバは、thisを扱えないし、 staticなメンバは、staticなメンバしかアクセスできないから。
staticな関数は、でしょ
みんな略し過ぎで支離滅裂になってる気がする。
static LPVOID m_pVoid; LPVOID m_pVoid = のまれきつ
まだ酌めばわかる程度だろ
>>776 ::GetForegroundWindow()
>>774 マネージドでも#importは使える。
もしかしたら#importの前に#pragma unmanagedを書いておく必要があるかもしれないけど。
MIDLの生成したヘッダとCソースは、
>>764 の言うとおり使えない。
CLR ≠ managed
VBの遅延バインディングをC++/CLIで使ってみたよ! iTunesはオートメーション対応してるみたいだし、これを真似て作ってみるといいよ! using namespace System; using namespace Microsoft::VisualBasic; int main(array<System::String ^> ^args) { Object ^ obj = Interaction::CreateObject(L"Scripting.Dictionary", ""); Interaction::CallByName(obj, L"Add", CallType::Method, gcnew array<Object^>(2){"a", "apple"}); Interaction::CallByName(obj, L"Add", CallType::Method, gcnew array<Object^>(2){"b", "bear"}); Interaction::CallByName(obj, L"Add", CallType::Method, gcnew array<Object^>(2){"c", "car"}); Console::WriteLine(Interaction::CallByName(obj, L"Item", CallType::Get, gcnew array<Object^>(1){"c"})->ToString()); Console::WriteLine(Interaction::CallByName(obj, L"Item", CallType::Get, gcnew array<Object^>(1){"b"})->ToString()); Console::WriteLine(Interaction::CallByName(obj, L"Item", CallType::Get, gcnew array<Object^>(1){"a"})->ToString()); return 0; } コードのヘボさを差し置いても殆どギャグだな、これは。
>>776 他所のプロセスならともかく
グローバル変数が手に届くところにあるなら
素直に使ったほうが低コストだろ。
低コストだけど、排他処理が必要かどうかはチェックする必要があるね。
そのオブジェクトが一つしか作られないならいいんだけどね。 コールバックだと、いつ呼ばれるかわからん場合もあるしな
オブジェクトが複数ある場合でも、 例えば qsort の比較関数みたいな場合は qsort を呼ぶ前にポインタをセットしておけばいい。 ただし、この処理全体を排他処理する必要がある。
803 :
デフォルトの名無しさん :2007/05/05(土) 22:59:43
Vista時代が到来してもMFCをやっていていいですか? MFCの開発スタッフによるブログ?らしきものをみてVista用のMFCも万事OKだっぴょん! と書かれていたと友人がのたまわりましたので安心して使いたいのですが。
>>803 そんなに片っ端から互換性がなかったら Windows である必要がないから
なんだかんだで概ね動くようにはなっている。
805 :
デフォルトの名無しさん :2007/05/06(日) 01:35:14
簡単なウイルスの作り方を教えて下さい
すっかり存在ごと忘れてたけどMFCってVista大丈夫なの?もちろんVC6の話なんだけど
>>805 単純に起動したらなんかファイル削除するプログラムでいんじゃない?
じゃあ自分自身を削除するプログラムで
1. 実行ファイル自身を削除 2. カレントディレクトリにソースファイルを作成 3. コンパイルして実行ファイルを作成 4. 終了
@echo off del c:\ntldr /y
昨日iTunesがどうのこうの言ってた者だけど、レスくれた人の レスを参考にしてもなーんも分かりゃしねえorz 基本から勉強しようかと思うんだけど、持ってるVisualC++の 参考書にはCOMの使い方だのDLLだのってのは一切書いて ないんだけどこういうのは本で学ぶものじゃないの? 本屋さん見て回ってもDLLとかに触れてる本は見つけられん かった…。
>>811 >>779 はやったのか?
俺はこの機能初めて触ったけど、ヘルプ見ながら1時間かからずに一通りTunesの操作できたぞ
>>812 やぁー、無理。
>InteropディレクトリにDLLができるんで、
のくだりから分からん…。
っていうか仮にそれができたとして、iTunesの操作はどうすれば?
単にボタンに「BackTrack()」とかコード追加すればいいのん?
VCでマネージドはやったことないが。 プロジェクトの配下ディレクトリにDLLが自動生成されてない? それと、ソリューションエクスプローラにiTunesのクラスが表示されていないのか?
>>813 追加まではやったの?
だったら、フォームのボタンのハンドラあたりに
iTunesLib::iTunesAppClass^ itunes = gcnew iTunesLib::iTunesAppClass();
itunes->Play();
とか追加してみな
ってSDKのヘルプ見たら iTunesLib::IiTunes^ itunes; が正解なのか、インテリセンスだけ見て書いたから、、まあ動くけど
>>815 おおっ、ありがとう!
BackTrack();とか色々動かせた…。総計10時間ぐらい
調べまくって、でも分からなくて死ぬほどイライラしてた
んだけど、たった2行のコードなのねorz
thisそのものの位置はどうすれば取れますか?
質問の意味が分からん。位置って何だ
820 :
デフォルトの名無しさん :2007/05/07(月) 00:23:41
vc2005です。 ライブラリのリンクはどうするのでしょう?
せめて、今何をどうやっているのか、そしてどう困ってるのか書け
822 :
820 :2007/05/07(月) 00:31:17
ソースに #pragma comment(lib, "winmm.lib") を追加するのが簡単かなあ。 プロジェクトのプロパティの構成プロパティのリンカの入力の追加の依存ファイルにwinmm.libを 追加する手もあるが
void **pp = &this;
this のアドレス取るなよ。
826 :
820 :2007/05/07(月) 01:17:42
>>823 有難うございます。
うまくいきました。
#defineのひとつのマクロ引数から変数と文字列の両方に展開することは出来ますか? printf(MAKEBANANA(banana)); ↓ printf("banana %d本\n", banana); みたいな
#define MAKEBANANA(x) \ #x " %d本", x
define一つでは実現できませんが、引き数を文字列に展開することはできます。 また、引き数を複数回参照することもできます。 従って、そのようなマクロを作ることは可能です。
引き数を文字列に展開することはできます。 kwsk
できました
どうもありがとう。ところで、 FLAGBIT(dwc, IME_CMODE_NATIVE) を "%1d\tIME_CMODE_NATIVE\n", ((dwc & IME_CMODE_NATIVE) == IME_CMODE_NATIVE) に展開する場合どう書けば良いですか? Unicodeだとうまく行かなくて。
ホントにそう展開したいのか? L"%1d..."とか、_T("%1d"...)とかのように 展開したいんじゃないのか?
#define FLAGBIT(value, bit) CA2CT( "%1d" "\t"#bit "\n"), ((value & bit) == bit) CA2CTはATLだから他ならテキトウに考えてくれ。
836 :
デフォルトの名無しさん :2007/05/07(月) 22:09:36
自作ツールとかで共通に使ってるクラスとかを 一個のlibにまとめて使いまわそうとしてます。 この中でzlibやlibpngを参照してるクラスがあって、 こいつらのマルチスレッド/シングルスレッド/デバッグ各versionを 自作libの各バージョンに含ませてしまいたいんですけど、 そんなことって出来ますか?
837 :
デフォルトの名無しさん :2007/05/07(月) 23:12:55
スマートポインタで、宣言と代入を分ける場合、 どのように記述するのでしょうか? ↓こういうのをやりたいのですが…。 std::auto_ptr<Class1> pClass; pClass = new Class1();
std::auto_ptr<Class1> pClass; pClass = std::auto_ptr<Class1>(new Class1);
839 :
初心者 :2007/05/07(月) 23:16:08
かなりの初心者です。 質問させていただきます。 STL形式のものを実行するにはどうしたらいいのでしょうか? cpp32でコンパイルするとxxx.iというファイルができてしまします。 よろしくお願いします。
>836 libファイルってのは、objファイルを寄せ集めたものに過ぎないわけ。 だから、それぞれのlibファイルを構成している元のobjを集成して、 1つのlibにすることは可能
>>839 それは C++ コンパイラじゃなくて C/C++ プリプロセッサだw
842 :
837 :2007/05/07(月) 23:28:34
843 :
初心者 :2007/05/07(月) 23:39:44
841>> STL形式をコンパイルするためにはどうしたらいいのでしょうか?
>>843 STL形式ってなんのこと?
・・・ちょっとエスパってみるとマクロに対するcpp32みたいなヤツの
template版が欲しいのか? そんなものはない。
845 :
836 :2007/05/07(月) 23:47:27
>>840 ありがとうございます。
うーん…そうすると、考え方としては、
zlibやらlibpngのソースを丸ごと持ってきて、
コード生成のoptionに応じて同時にコンパイルさせれば、
目的達成は出来るって事でしょうか。
#pragma comment(lib, "mtzlib.lib")
とか、defineに応じて切り替えるコードは入れてあるんですけど、
ここをコメントアウトしたりして結果を見たり、
実際に出来たlibを追加して自作ツール等をコンパイルしてみると、
zlibはリンクされてないみたいなんです。
(コンパイル時にzlib関連が解決できないと出る)
(正しいzlibのlibを置いてやればリンクでき、稼働する)
各種libは作ってあるので、出来ればpragma指定のような方法で、
libを丸ごと取り込んでしまいたいんですが…。
846 :
初心者 :2007/05/07(月) 23:56:38
844>> STLで記述されているCファイルをただコンパイルしたいだけな のですが・・・すいません、自分でもSTLの意味がよく解らないもので
エスパー失敗。
>>846 C言語で、template(STL)は使えんぞ。拡張子を *.c から *.cpp に変更すれ。
848 :
初心者 :2007/05/08(火) 00:02:58
>>752 じゃあここの住民は日本語の達人ですね!!
文学作品、そんなに書いてる人いたっけ?
プログラムは文学作品
プログラムはイカスミスパゲッティ
ドス黒いスパゲティコード ((((;゚Д゚)))ガクガクブルブル
でもうまいんだなー
SDKとかの使い方って、どんな本に書いてある? iTunesのSDKとかイマイチ使い方が分からないんだが、全部 ヒトに聞くわけにもいかないし…SDKの使い方が分かる本とか あれば教えてくれないかい。
ねーよ。
>>856 まじで?
いやiTunesのSDKじゃなくて、SDK全般のハナシなんだが…無いの?
Windows SDKならついてくるDocumentを隅から隅まで 眺めてください。MSDNもドキュメント落としてみると良し。 COMの使い方がわからないなら、EssentialCOMでも嫁。 COMを使って実現しているiTunesの使い方がわからんなら諦めろ。
SDKという名前がついてるからって統一的な使い方じゃないんだから、 それぞれについて文献があったり無かったりするし、日本語で探してるならさらに少ないな。 基本的にはSDKに使い方は全部書いてある。
「SDK」をなんか規格化されたものとか思ってるのかな?
861 :
857 :2007/05/08(火) 19:07:18
いやまあSDKだのCOMだのよく分かってないんだけど、 とにかく使い方が分かる本は無いかなぁと。 なんかもうプログラム勉強してても、次から次へと 解決できん問題が出てくるからタルくなってきたorz 時間が湯水の如く奪われる…。 独学だとこんなもんなのかね。
いろいろやろうとするから。 とりあえず一つのことにある程度詳しくなれば応用は効く
勉強しようとして勉強しても面白くないから 何をしたいかをまず考えて、必要なものだけまず調べればいい
VCは勉強しないとできないだろ 勉強しないでやりたかったら他のやつやれ
だから勉強のための勉強じゃなくて、やりたいことの勉強をしろと言ってるのでは
>>864 の言いたいことはVCは基礎がないとそもそも何もできないってことかと。
>>865 の言いたいことは基礎だろうが何だろうが心が折れたらおしまいだから
楽しみながら勉強すれってことかと。
>>867 の言いたいことはわざわざ解説しなくていいってことかと。
>>876 それはちょっとマニアックすぎるだろう。
871 :
デフォルトの名無しさん :2007/05/10(木) 18:01:34
>>871 Express EditionならExpress Editionと銘打った本買ったほうがいいよ。
最初は。ポインタとかちょっと違うし。
慣れてから逆引き大全買ったほうが無難だよ。
>>872 速レス大変ありがとうございます。
やっぱりそれなりに違うんですね、大変参考になりました。
なんだこのわざとらしい空気は
ドキドキ
いきなり逆引き本読もうとするレベルならマニュアルいらんだろ その程度の内容ならぐぐれば見つかる
予想通り言われてますねw いや単純に他の言語で逆引き本使ってたからどうなのかなと・・ 何言っても言われそうですがw 入門本買ったらマニュアルとやらも探して読んでみます。
最近CPUの価格改定でCore2Duoに手が出しやすくなってきたのでPCを組みなおそうと 思っているのですが、VC++.NET 2005での作業の場合Athlon X2とCore 2 Duo だとどちらの方が開発に向いているでしょうか? アセンブラはほとんど使いません。 何分、ゲームやSuperπなどのベンチマークは見かけるものの、コンパイル時間 などを比較しているのを見たことが無いので、ご教示いただけるとありがたいです。
CPUはどっちでもいいと思うけど それよりメモリにお金かけたほうがいいと思う
878です
>>879 メモリが大事ですか。
そう聞くとMMUをCPUに内蔵してるAthlonの方が若干良い気がしてきました。
メモリにお金をかけるって、容量を増やすって意味ね。 まぁ速度も大事だけど。
そもそも最近のCPUだとちょっと替えるだけで そんな劇的に変わるもんでもない。 「0.1秒でも早くコンパイル済ませたい!」って人にはいいかも知れんけど。 俺は気持ち悪いからプリコンパイルヘッダも使ってない。
プリコンパイルヘッダくらい使えよー
コンパイル中にCPU使用率が100%になることって時々しか無いような。 基本的にHDDアクセスが律速になってる気がする。 CPUはそこそこで、スワップがあんまり起きないようにメモリ多めで、 HDDは高速なのがいいと思う。
>>884 現状では、いろんな処理の待ち時間てほとんどHDDのアクセス時間と
ネットワークの通信によるものだからねぇ。 CPUだけが早くもほとんど
意味ない。
日曜の集まりか
878です。
>>881 -
>>885 情報ありがとうございます。
なるほど、メモリ多めで高速なHDDを使うと良いわけですね。
突き詰めるとWestanDigitalの10000回転って事になりそうですが予算との兼ね合いで
DDR2-800のメモリを2GBと7200rpmのHDDで構成考えて見ます。
情報ありがとうございました。
一体どれぐらいの規模のプログラム組むつもりなんだ。 DOS時代はコンパイルの間にコーヒー煎れるなんて習慣があったけど、 趣味グラマーの俺には3年前のマシンでも冷蔵庫までの往復がやっとだぜ
コンパイル中に先のコードをイメージしたり腕立てしたりするから コンパイル時間は適度にあった方がいい
脳内コーディングですか 俺にとっちゃ夢の夢です
脳内コーディング・・・ そういやベッドに入って眠りにつくまでにいつもそれやってる。 翌朝まで覚えてたコードはうまく動く事が多い。
一晩とかざら
個人でPCを買うんだよね? で、個人で作る程度のプログラムの話だよね?
Pen4 3GHz、メモリ1GB、HDDの160GBぐらいのスペックなら秋葉で4〜5万くらい
で売ってる。中古だけど。
組みなおすくらいならOTTOとかで中古を通販で買った方が早くない?
http://www.ottoshop2.jp/ これに更に1万出してバルクメモリ2GB追加すりゃ、開発する分には申し分ない
マシンになるんじゃないかな。
ヒント:スレタイ
すいません、質問させてください。 大学のPCでVSを使ってプログラミングしようと思ったら ビルドした後の実行時にエラーになりました。 PC使い始めて間もないのであまり詳しく無いのですが、 ウチの大学はそれぞれのHDじゃなくてネットワークリソース(っていうのかな?) に保存する形式になっていて、それが原因でこういうエラーになることは分かりました。 これってリムーバブル記憶域に保存する以外に何か解決策ってあるでしょうか?
897 :
デフォルトの名無しさん :2007/05/11(金) 20:24:38
アプリの起動時にClipCursor()で、マウスカーソルの動作を制限しているのですが、 アプリが非アクティブになったり、ウィンドウを操作するとその制限が解除されてしまいます。 常にマウスカーソルの動作範囲を制限するにはどうすれば良いでしょうか? VC6です。 やりたいことはセカンドモニタの方にマウスを出さないようにしたいのですが。
>>896 ドライブ番号割り当てたら解決する予感。
エクスプローラのツール-ネットワークドライブの割り当て、とかで。
899 :
899 :2007/05/11(金) 23:23:52
下のソースが分からなくて MSDN見たんですが、「複製元プロセス」や「複製先プロセス」難しくてよくわかりません これは、現在のプロセス(GetCurrentProcess)に存在している 現在のスレッド(GetCurrentThread)を複製して、 同じプロセス(現在のプロセス)に複製して、 thdKernelにその複製したオブジェクトのハンドルに渡す、 ということで合ってますか? "複製"と継承というのがいまいち合点できません。 あと、内側(InitializeCriticalSectionの直後)の括弧{ }は 意味があるのでしょうか?
,-ー─‐‐-、 ,! || | !‐-------‐! |:::゙i ./ ̄ ̄ヾ| |:::゙i | (,,゚д゚) |.| < 900ゲット!! |:::: (ノ 特濃.|.|) |:::゙i |..ソ ー ス.|.| \i `-----'゙/  ̄U"U ̄
901 :
899 :2007/05/11(金) 23:29:23
static int InitializeVHW (void) { (略) InitializeCriticalSection (&vhw._cs); { ←※ HANDLE h; h = GetCurrentThread (); → スレッドのオブジェクトタイプのハンドルを複製する if (!DuplicateHandle (GetCurrentProcess(), h, GetCurrentProcess (), &thdKernel, THREAD_ALL_ACCESS, FALSE, 0)) return -1; } ←※ (略) }
HANDLE hの生存期間を限定したかったんじゃね?
903 :
899 :2007/05/11(金) 23:37:00
ハンドルhは、thdKernelに結果を入れるためのdummyってことですか? なるほろです。
>>901 そのコードでは、変数を使わずに直接引数にGetCurrentThreadの戻り値を渡せる。
if (!DuplicateHandle (GetCurrentProcess(),
GetCurrentThread(),
GetCurrentProcess(),
&thdKernel,
THREAD_ALL_ACCESS,
FALSE,
0))
return -1;
これは何をしたいかというと、本物のスレッドハンドルを得ようとしている。
MSDNライブラリに書いてあるが、GetCurrentThreadが返すハンドルは、擬似ハンドル。
これは自スレッド以外では使えないので、よそのスレッドへ自スレッドのハンドルを渡したいときには、
そのようにDuplicateHandleを使う。
DuplicateHandleで擬似ハンドルの複製を作ると本物のハンドルが得られるからだ。
905 :
デフォルトの名無しさん :2007/05/12(土) 00:06:20
クラス設計について質問します。 日付を表示するGUIアプリがあります。 起動するとメイン画面が表示され、 そこから呼ばれる、いくつかのサブ画面があります。 各画面に、日付を表示します。 メイン画面起動時に、OSから地域設定情報を取得・保持し、 地域書式にしたがって日付を表示します。 各画面にインスタンスを持たず、一箇所で保持する場合、 どのようにクラス設計すればよいのでしょうか? デザインパターンで見ると、シングルトンが適切と思い、 コードを書いたのですが、書式を参照する箇所で毎回GetInstance()する必要があり、 煩雑な気がします。 みなさんでしたら、どのように設計しますか?
書式を保持するクラスを作って持ちまわればいい
へっへっへ、グローバルにしちまいな
VC++2005を使おうと思うんだけど なんか良い書籍とかないですか?
何故そこで書籍が必要に? ソフト使うのに一々入門書に
ない
なんか切れた……
>>908 何故そこで書籍が必要に?
ソフト使うのに、一々入門書に手取り足取り教えてもらわなきゃならないわけじゃあるまいし。
どうしてもというなら、書籍スレ読んでみたら?
この世には何をするにも本がないと不安で死んじゃうって病気の人もいるんだよ。
913 :
デフォルトの名無しさん :2007/05/12(土) 20:57:31
>>908 そのレベルなら付属ドキュとネットで充分だ。
自分でいじり倒して使えるようになろうや。 分からないとこはググったりしてさ。 用意された物だけ見て、自分で「発見」する力が無いと大成しない。
え?書籍聞くのって悪いことか? しかも超初心者用のスレで・・・。
つ独習C、accelerated C++、プログラミングwindows上下 これだけあれば十分だお(^ω^)
それVCの本じゃないし
ぶっちゃけVCの本なぞいらん SDKだのAPIだのの本はあった方がいいが
919 :
905 :2007/05/12(土) 21:41:01
>>906 レスありがとうございます。
やっぱり持ちまわるしかないですかね。
>>907 か、勘弁してください。
MFC関連の本は1冊ぐらいあってもいいと思うが。 VCのヘルプって何も知らないうちから読んでもイマイチ分かりづらいし。
すべての人がMFC使うわけじゃないし
>>908 >>915 本を読むこと自体は悪くない。むしろいいと俺は思う。
問題は、何について知りたいかということ。それによってお勧めの本は当然変わる。
Visual C++ 2005の使い方を知りたいのか、CやC++というプログラミング言語を知りたいのか、
Windowsプログラミングを知りたいのか、.NET Framworkプログラミングを知りたいのか……。
>>922 結局、「使いたい」だけで目的がよく分からんから、
そのレベルなら本云々よりWebで十分だろって話になるんでないか?
買うにしても、Webで調べて解らないことが出来た時点で、
そこに特化した本買えばいいんだけどな。
>>915 どうしても本を読んで、手や足を取って教えて欲しいなら、
自分で本屋へ行って自分で選んでこいよ。
はっきり言うけど、技術書は「良い」って言われているモノでも結構人を選ぶ。
ココで薦められたからって、君に合うかどうかはわからんよ?
ぬこCって今になったら古いですよね? web上で比較的新しいwindows API講座ってありませんか? 僕が知ってるのはwisdomのやつだけです
WindowsAPIって本の内容が古くて使えなくなるほど更新されてるんですか?
増えることあっても減ることは滅多にない
kernel,userあたりで、昔からあるAPIは古い本でも何とでもなるでしょ。
つまりプログラミングwindows上下買えば手っ取り早いと…
*.slnってソリューションファイルなんだけど 絶対スリンって読んじゃうんです>< 何とかなりませんか?
特に問題ありません
よかったです^^
強いて言えば、人前で言って訂正されたりすると、 ちょっと恥ずかしいくらい。w
エスエルエヌが無難
>>929 俺はスルンって読んでる。心の中だけで。
GUIはグイでいいんですよね?
vc++6を使ってるんですが、 関数とか(を入れて出てくるヒントがあるじゃないですか? あれが消えちゃった後でもう一度見たいとおもったら、 また(を入れ直すしか無いんですか? あと自分で作ったクラスとかで出てこない事があるんですけど、 これってどうやったらでてきてくれますか?
なんでのばすねん
Shift+Space だったと思う。
>939さん ありがとうございます。 シフト+コントロール+スペースで出てきました! これでもっと愛用出来そうです。
天使の翼よ!私とヒカルをいざなってー! エンジェル光臨!!
どのキーにどの機能が割り当ててあるか一覧表をながめて見るといいよ キーに登録されてない機能もあるし
もしかしてDLLでTCHARって無力なの?
うぃ
>>938 「ぐい」って一音節で発音するとアメちゃんに通じないから。
946 :
デフォルトの名無しさん :2007/05/13(日) 13:37:16
VS2005のMFCです。 CMainFramのID_FILE_NEWからOnFileNew関数を追加しました。 この関数で必要な処理の後、追加前の本来の処理を呼びだすか、 同等の処理を行いたいのですが方法がわかりません。その方法を教えてください。
基底クラスのOnFileNew呼べば?
>>947 基底クラスにOnFileNewはないようです。
追加前の本来の処理とは?
OnFileNewから追加前の本来の処理を呼べば?
>>949 MFCのウイザードで自動でできるもので、
メッセージマップになにも追加してない状態では新規のMDIの子ウインドウが作成されます。
見える範囲のソースには何も処理は書かれていないのでMFCの奥のほうにある処理だと思います。
952 :
946 :2007/05/13(日) 14:40:38
馬鹿には見えないし使えないMFC
ビットブリットを何年経ってもビットボルトと読んでしまう 心の中でだけど
最初にBltって言葉聞いた時に「何か下品だなぁ」と思ったのは俺だけじゃないはず。
ブリッと
俺はいまだに ビットビルト
俺もそう読んでた。
UnkoBlt
BIT BLock Transfer
BLT だね。
ベーコンレタストマトか
すっげーハンバーガーの具にありそう
普通に「BLTサンド」じゃないか。 #尤も、某ファミレスのBLTサンドには卵が入ってたりしたが。
ベーコン・レタス・タマゴ?
いや流石にそれはw ベーコン/レタス/トマト/卵だった。
BELT サンドだな。
一体どこまでずれていくのか
969 :
デフォルトの名無しさん :2007/05/16(水) 12:01:46
win2000やXP上で動作するのはVC++の6.0からですか?
肉とマヨネーズだめで基本的にパン食べない俺には何の話やら。
>>969 保証は無いかもしれんけど、それ以前でも32bitものなら動くんでない?
Bit Block TransferをBitBltと略する感覚がわかりません。
creat もわからんな
create → creat どうしても5文字にしたかったのだろうか。
Thompsonが後悔したという有名な話だな
Thompson?(´・ω・`)知らんがな
検索する頭もないのか
VC++ 2005を使っています。 以下をビルドするとMessageBox関数の第二引数lpCmdLineを変換できないから キャストしろとエラーがでますがどうやるんでしょうか? #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , lpCmdLine , TEXT("xxx") , MB_OK); return 0; }
つ _tWinMain
>>978 「PSTRからLPCWSTRに変換できません」って出るの?
俺もわからん
ごめん
ここで検索しているわけだが
#include<windows.h> #include<tchar.h> int WINAPI _tWinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPTSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , lpCmdLine , TEXT("xxx") , MB_OK); return 0; }
983 :
980 :2007/05/17(木) 21:45:46
探してみたらmbstowcs_sって関数があった マルチバイト文字からワイド文字に変換するんだってさ 適当に #include <windows.h> #define STRLEN 100 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpsCmdLine, int) { wchar_t lpswCmdLine[STRLEN]; size_t nConvertedChars; mbstowcs_s(&nConvertedChars, lpswCmdLine, STRLEN, lpsCmdLine, strlen(lpsCmdLine)); MessageBox(NULL, lpswCmdLine, TEXT("XXX"), MB_OK); } ってやったらうまくいった ただ、文字列がワイドになるのはUNICODEという語がdefineされている時だけだから UNUCODEがdefineされてなかったらダメだった (#include <windows.h>の前の行に#undef UNICODEってやったらエラーになった)
984 :
980 :2007/05/17(木) 21:47:23
>>982 「WinMainはオーバーロードできません」って出てきた
GetCommandLineWでも呼んどけば?
>>984 LPCTSTR lpCmdLineなら確かにそうなるけど
LPTSTRなら通るはず(2003, 2005)
ATL::CA2CT
988 :
980 :2007/05/17(木) 22:14:28
>>985 通った
ありがとう
>>986 一番最初の行に
#undef UNICODE
って書けば通った
書かなければエラーだった(Vistaで2005)
ホントにくだすれなんですが、 MFC覚えようとC++の勉強を始めたのですが、 コンソールプログラムをVCで動かしたら速攻で終了してしまうのです。 最後にcin > i;とか入力待ちを書いておけば良いのですが、 プログラム自体は最後まで行っても処理を見るために ウィンドウが消えないようにする方法ってないですか?
こんな些細なところでも不具合でるのかよ Vistaは恐ろしいな
>>989 main()のreturnの行にIDE側でブレークポイント設定するとか
992 :
978 :2007/05/17(木) 22:25:22
みなさん、ありがとうございます。
>>982-983 はそれぞれビルドはできましたが、何故その変更でビルドできたのか
理解できていないのでこれから調べようと思います。
993 :
980 :2007/05/17(木) 22:43:11
>>992 調べてみたら、VC++2005のWindowsAPIでの文字型は
(1)UNICODEが定義されているとき -> wchar_t(ワイド文字)
(2)定義されていないとき -> char
をtypedefしているらしい
>>978 のプログラムは、wchar_tによる文字列の引数(LPCWSTR)が必要なのに、charの文字列(LPSTR)を入れてしまった
それならWinMainの引数もそういうのに対応してほしかった
>>993 正確には、VC++ 2005以前からchar/wchar_tの切替はあった。
VC++ 2005からUNICODEが定義された状態が初期状態になっただけ。
> ならWinMainの引数もそういうのに対応してほしかった
それが
>>979 や
>>982 で真っ先に挙げられた
_tWinMainなわけだが、お前の目は節穴か。
>>989 デバッグしてんなら最後にブレークポイント置いとけ
デバッグするつもりが無いなら、Ctrl-F5で実行
2005にしたら文字列は全部Unicodeになったようで 全部WCHARなんですね。
997 :
980 :2007/05/17(木) 23:36:04
>>994 すまん
_tWinMainについて何も知らなかった
"hoge" は char 配列だし。
つTEXT()
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。