■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part20
751 名前:749 :2005/08/06(土) 00:19:49
そうかしまった関心してしまった。でもマスク作成技術として覚えておこう…

752 名前:748 :2005/08/06(土) 00:33:11
>>750
そうか。これはまさに、ビットマップを透過する時に
マスク画像の生成に使っていた方法。

だと、その白黒にするというのはどういう事?
例えば、色が指定より明るいか暗いかで変化させるとかかな。

753 名前:デフォルトの名無しさん :2005/08/06(土) 00:35:25
>色が指定より明るいか暗いかで変化させる
まぁそれだろうな。
パレットがあればそれを入れ替えるだけで済むんだが…

754 名前:デフォルトの名無しさん :2005/08/06(土) 00:53:37
白黒二値と書かれていない以上、グレイ諧調の可能性も……
というのはおいといて。

単純に明るさが閾値より高いか低いかだけでもいいが、
その場合でもRGBを等価に扱うのか真面目に3:6:1にするかが問題になる。
また、ディザ処理をするか、ディザ処理のパターンはどうするかなど、
考えるべき点は山ほどある。

755 名前:748 :2005/08/06(土) 08:38:27
>>753>>754
なるほど。サンクス。
マスク製作さえも覚えたてなので難しい。

方法としては、>>748の方法を使い、複数色を白する感じで、
>>753>>754の条件を満たした色でのマスク画像を複数作り、
それらを白の部分のみ何回も描画する感じかな。

756 名前:747 :2005/08/06(土) 10:53:29
みなさん、ありがとうございます。レス遅くてすいません。
白黒にするのは2値化でマスク画像作りたかったのでSetBKColorでやってみま。
(=゜ω゜)ノそれでは、ありがとですた

757 名前:デフォルトの名無しさん :2005/08/06(土) 15:26:13
>>755
> 条件を満たした色でのマスク画像を複数作り、
> それらを白の部分のみ何回も描画する感じかな。

>>747
> 今まではGetDIBitでDIB形式に変換してピクセルデータをいじっていたんですが、
> 処理スピードの関係でそのやり方は没に・・・

755>> のほうが遅い予感

758 名前:デフォルトの名無しさん :2005/08/06(土) 15:28:41
初心者スレでヲタ話は遠慮してほしいものだ

759 名前:デフォルトの名無しさん :2005/08/07(日) 17:17:29
質問です。環境は WindowsXP です。

Visual C++ .NET Version 2003 を購入しました。
メッセージハンドラの追加が分からず・・・。
コードを書くのは可能なのですが、簡易な方法はないでしょうか。

例えば MFC を用いているのですが、
クラスビューの CChildView (クラス名)を右クリックすると、
6.0 のときは「メッセージハンドラの追加」という項目があったのですが、
.NET だと「関数の追加」「変数の追加」しか見当たりませんでした。

よろしくお願いします。

760 名前:デフォルトの名無しさん :2005/08/07(日) 17:31:55
クラスビューの下にプロパティのペインが無いかな?
無かったらクラスを右クリックでプロパティを選べば出る。
そこのタブ(?)の右から2番目がメッセージ一覧になってるから、
追加したいメッセージを探して、その項目の横のリストから
<追加> OnActive
みたいなのを選べば追加できる。

761 名前:759 :2005/08/07(日) 17:38:24
>>760
こんなところに・・・ありがとうございました!

762 名前:デフォルトの名無しさん :2005/08/07(日) 17:56:23
6.0の時はスプラッシュスクリーンとか追加出来たのに
.NETではそういうコンポーネントを追加出来無くなったんですか?
自分で全部実装しろと?


763 名前:759 :2005/08/07(日) 18:55:35
もう1つ質問です。

.NET において、MFC のアプリケーションを、ドキュメント・ビューアーキテクチャをはずして構築しました。
クラスビューに C○○○App がなく、手動で C○○○App の InitInstance() を探すと、
6.0 のころにあった 「ここに重要な初期化処理を書きます」 といったコメントがありませんでした。

srand(time(NULL)); や、ImmDisableIME(-1); などはどこで書くのが普通なのでしょうか。

764 名前:デフォルトの名無しさん :2005/08/07(日) 19:05:48
>クラスビューに C○○○App がなく
あるはずだが。

>手動で
どこでどうやって探したんだ?

>コメントがありませんでした。
まさかCWinAppのInitInstance()見つけたんじゃあるまいな。

あとsageろ。MFC専門はこっち
ttp://pc8.2ch.net/test/read.cgi/tech/1121200124/l50

765 名前:デフォルト名無しさん :2005/08/08(月) 07:49:42
少々質問させてください。
API板に記載しようか迷ったのですが、処理的にC++だったのでこちらで質問させていただきます。
プログラム作成の過程で_beginthreadを使うことになったのですが、以下のエラーメッセージが表示されます。

error C2664: '_beginthread' : 1 番目の引数を 'void (unsigned long)' から 'void (__cdecl *)(void *)' に変換できません。 (新しい機能 ; ヘルプを参照)
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません
調べた限りC++で作成している為Cでコンパイルされた関数を呼び出す為にC++で指示する必要がある、という事は理解できたのですが、いまいち修正の方法が判りません。

下記に関連部分ソースの一部と開発環境を記載します。
どなたかご教授の方よろしくお願いいたします。
開発環境:Visual C++6.0,WINAPIとしてcppファイルで作成中
プロジェクトの設定でランタイムライブラリはマルチスレッドに設定済み。
指定URLに接続するためのスレッドを作成したい
-------------------グローバル一部---------------
DWORD cthread=0; //グローバルで宣言している
addurl[1];
-----------問題の処理WndProc内部(メイン部)---------
addurl[0]=url; //編集したアドレスを貼り付け
cthread=_beginthread(OpenURL,0,0); //ここでエラー
-----------送る先(OpenURL)-------------
void __cdecl OpenURL(DWORD index)
{
BASS_StreamFree(chan); // close old stream
SendMessage(Edit,WM_SETTEXT,0,"connecting...");
if (!(chan=BASS_StreamCreateURL(addurl[index],0,BASS_STREAM_META|BASS_STREAM_STATUS,StatusProc,0))) {
SendMessage(Edit,WM_SETTEXT,0,"not playing");
Error("Can't play the stream");
--------------以下省略---------------
宣言順番はOpenURLのあとにWndProc
base.dllのnetradioのソースを流用して製作しているので、OpenURLをそのまま使える構造にしたいです。
どなたかご教授お願いします・・・

766 名前:デフォルトの名無しさん :2005/08/08(月) 08:09:41
>>765
OpenURLを、明示的にcastすればいい。
関数型は複雑だから、typedefすれば簡単だろう。
typedef void (__cdecl * ThreadFunc_t)(void *);
_beginthread((ThreadFunc_t) OpenURL, ...

767 名前:765 :2005/08/08(月) 08:22:00
>>766

通過できました、ありがとうございます!!

768 名前:765 :2005/08/08(月) 09:43:46
765です。
上記のやりかたでOpenURLへの処理へ送ることはできましたが、想定してた動きとまったく異なってしまいました・・・。

以下に作成過程のデータとサンプルとして使っていたbass.dllに付属してたサンプルを置いておきます

本プログラム
ttp://astria.ddo.jp/data/testpg.zip
参考に使ってたサンプル
ttp://astria.ddo.jp/data/sample.zip

望む動作は以下の通りです・・。

サンプルを参考にし
本プログラム部分のmain.cppの243行目で取得したURLデータを
OpenURLに引っ張り、対象サーバーに接続する。
main.cppの133行目の処理がサンプルプログラムの方と同じ動作で接続処理を行ってくれればなんとかなりそうなのですが・・。
うまくいってくれるのかな・・と思っていますが・・・サンプルがCで記述されているため、格差で頭の中身がぐっちゃになってしまいました・・。

bass.dllを利用したストリーミングプログラムで、サンプルを参照しても良いと課題出されましたが・・・ここまで訳のわからないものになるとは・・・
あつかましい行為だというのは自覚していますが、どなたか助け舟をお願いいたします・・・

769 名前:デフォルトの名無しさん :2005/08/08(月) 10:16:54
ソースを解読してクラス間の関係を図示してくれる
フリーソフトを知りませんか?


770 名前:デフォルトの名無しさん :2005/08/08(月) 10:57:04
doxygen

771 名前:デフォルトの名無しさん :2005/08/08(月) 13:34:55
メモリリークをデバッグするときに
効果的な方法はありますか?


772 名前:デフォルトの名無しさん :2005/08/08(月) 14:01:04
タスクマネージャ

773 名前:デフォルトの名無しさん :2005/08/08(月) 14:16:15
int memchk(void *min, void *foo, void max)
{
char ss[3][9];
int ret = 0;
sprintf(ss[0], "%p", min);
sprintf(ss[1], "%p", foo);
sprintf(ss[2], "%p", max);
ret = ((strcmp(ss[0], ss[1]) <=0) && (strcmp(ss[1], ss[2]) < 0));
return ret;
}

これを随所に埋め込んでみる位しか知らん

774 名前:初心 :2005/08/08(月) 15:05:55
TCP/IPのバイナリ形式でクライアント側のなんかサンプルがほしいんですけど、
なんかありませんか?win2000,CV++6.0
よろしくお願いします。

775 名前:初心 :2005/08/08(月) 15:08:42
誤り CV++
正しい VC++
でした。ごめんなさい・

776 名前:デフォルトの名無しさん :2005/08/08(月) 15:11:20
>>771
_CrtSetAllocHookでMSDN見てみ

777 名前:デフォルトの名無しさん :2005/08/09(火) 02:55:44
>>774
CV++6.0とは何ぞや?

778 名前:デフォルトの名無しさん :2005/08/09(火) 04:57:29
visual C++.netってコンパイル、いやビルドか・・するとき、どっかに通信してない?
コンパイル情報を送ってるぽいけど。どなたか詳細ご存知ありませんか?
何のデータ送ってるのか気になる。

779 名前:デフォルトの名無しさん :2005/08/09(火) 05:16:03
>>778
あー、ウイルスに犯されちゃってますね
クラックものはだいたいそうかもね

780 名前:デフォルトの名無しさん :2005/08/09(火) 05:22:07
>>779
正規版だよ。アカデミックだけど。
なんでもウィルスにすんなよ。素人臭い。

781 名前:デフォルトの名無しさん :2005/08/09(火) 07:12:40
そう思うんならいちいち反応すんなよ

782 名前:デフォルトの名無しさん :2005/08/09(火) 07:16:06
アカデミックも高かった労に
the spokeで具具ってみなはれ

783 名前:デフォルトの名無しさん :2005/08/09(火) 09:26:32
Visual C++ .NET 2003 を使っています。
エディタ上で http:// から始まる文字列を入力すると
勝手に下線が付いてしまうんですが、これを付けないようにするには
どうすればいいですか?

784 名前:デフォルトの名無しさん :2005/08/09(火) 11:01:41
>>783
ツール->オプションをよく探せ。

785 名前:デフォルトの名無しさん :2005/08/09(火) 11:33:08
>>782
すみません。。アカデミックではなくて、the spoke の方でした。。

で、>>778 に答えられる人いますか?

786 名前:デフォルトの名無しさん :2005/08/09(火) 11:57:11
ファイアウォール入れてみればわるだろうに

787 名前:783 :2005/08/09(火) 12:13:39
>>784
見つかりました!同じとこ何度も探したつもりだったんですが見落としてました。orz

788 名前:デフォルトの名無しさん :2005/08/09(火) 12:17:04
ttp://www.geocities.co.jp/SiliconValley-Oakland/5924/win2000/ethereal/index.html
これなんかどうぞ

789 名前:デフォルトの名無しさん :2005/08/09(火) 20:09:33
>>778
なんでそう思うの?

790 名前:デフォルトの名無しさん :2005/08/09(火) 20:11:32
どなたか、教えてください

自分で作ったアプリケーションをノンアクティブ状態でジョイパッドを使用できる状態にしたいのですが、どうすれば
よろしいでしょうか?ダイレクトインプットを使えば簡単なのですが、どうも難しすぎて私の手には負えません。
それ以外で方法はないでしょうか?

もう一つ質問があるのですが、自分で作ったアプリケーション以外で新規に起動したアプリのウィンドウハンドルを
取得したいのですが、どうすればいいのですか?

一度に二つも質問してすみません

791 名前:デフォルトの名無しさん :2005/08/09(火) 20:27:16
APIスレの法外隠者ね?

792 名前:デフォルトの名無しさん :2005/08/09(火) 20:30:54
すみませんでした。APIスレに書き込みます

793 名前:デフォルトの名無しさん :2005/08/09(火) 21:11:57
法外隠者?

794 名前:デフォルトの名無しさん :2005/08/09(火) 23:01:53
>>789
ビルド中に何気なくハブみたら、通信ランプが点滅してて「あれ?」と思ったのがきっかけ。
で、ビルドするたびにルータとハブみてたら、通信してるから、どこの通信してるのかなーって。
気になって・・。
漏れと同じでvisual studio.net the spoke版なら、みんなもそういう風になってるのか気になったものだから。

795 名前:デフォルトの名無しさん :2005/08/09(火) 23:04:04
>>794
たぶん、おまえが裏で動かしているnyのせい。

796 名前:デフォルトの名無しさん :2005/08/09(火) 23:14:17
被害妄想

797 名前:デフォルトの名無しさん :2005/08/09(火) 23:43:50
Visual Studio .NET The Spok版なら論理的に構成されてない
ソースは全部コンパイルエラーにしてくれるぞ

798 名前:デフォルトの名無しさん :2005/08/09(火) 23:55:05
788のパケットキャプチャ使ってみたか?

799 名前:デフォルトの名無しさん :2005/08/10(水) 11:09:26
>>794
ビルド中以外、ってか、VS使ってる時以外にも通信ランプ見てみたか?

800 名前:デフォルトの名無しさん :2005/08/10(水) 12:13:31
>>794
中身はアカデミックと一緒なんだからそれはない
気になるならパケットでも取ればいい

と、使ってる俺が言ってみる

801 名前:デフォルトの名無しさん :2005/08/10(水) 18:44:10
質問です。
環境は、Visual C++ .NETです。

Unicode文字セットを使用しています。
テキストファイルに文字列を出力したいのですが、日本語文字のところで
止まってしまい全て出力できません。

CStdioFile file;
file;.Open( szFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText )

_TCHAR strText[256];
_tcscpy((_TCHAR*)strRow, _T("abcあいう"));

file.WriteString(strRow);

こんな感じなんですが。。。
どうも、WriteString中で2バイト文字が弾かれているみたいなのですが。。。
原因、回避方法があればご教授ください。


802 名前:デフォルトの名無しさん :2005/08/10(水) 19:02:49
細かいことだがUnicodeは2バイトじゃねぇぞ

803 名前:801 :2005/08/10(水) 19:32:00
>>802
2バイトっていうか、16bitフルに使い表現している文字で
弾かれるみたいなのです。
言い方悪かったですねすいません。

それと訂正です。
_TCHAR strText[256]; −> _TCHAR strRow[256];
でした。

804 名前:デフォルトの名無しさん :2005/08/10(水) 21:41:50
setlocale
が必要なんじゃね?

805 名前:デフォルトの名無しさん :2005/08/10(水) 21:49:49
CStdioFileでUnicode出力する場合はtypeTextではなくtypeBinaryを指定。

806 名前:デフォルトの名無しさん :2005/08/11(木) 03:22:14
VisualC++.net the spokeを使っているのですが作業用ディレクトリの指定はどこでやればいいのでしょうか?

807 名前:デフォルトの名無しさん :2005/08/11(木) 04:58:52
すいません質問なのですが。
新しいPCを買って開発環境を移したいのですが、
そちらにVisualC++.netをまたインストールすると違法になったりするのでしょうか?
前に家族での間でも共有はいけないとどこかで聞いた事がありひっかかってしかたありません・・・


808 名前:デフォルトの名無しさん :2005/08/11(木) 05:03:23
前のPCからアンインストールすれば問題ない

809 名前:デフォルトの名無しさん :2005/08/11(木) 05:06:30
>>808
即レスありがとうございます。
これで心置きなく新しいPCが買えます^^

810 名前:デフォルトの名無しさん :2005/08/11(木) 06:30:42
>>808
アクティベーションはどうするの?

811 名前:デフォルトの名無しさん :2005/08/11(木) 07:30:12
>>810
もう一度、アクティベーションをするだけだよ。
ライセンスどおりに使っているのだから恥じる必要は無い。
警告が表示されても、どうどうとMicrosoftにTELで「もっかいアクティベーションしたいんだけど」と言えばよい。

812 名前:デフォルトの名無しさん :2005/08/11(木) 08:46:59
一回アクティベーションしたらもうだめなんてありえんしな
再インストールもできんのですかと

813 名前:デフォルトの名無しさん :2005/08/11(木) 09:15:08
何度もアクティベーション出来るって事は、
複数のマシンにインスコされているかのチェックもされているのだろうか。

814 名前:801 :2005/08/11(木) 10:51:15
>>804-805
レスありがとうございます。
どちらを試しても動きました。
今回はUnicodeファイル形式にしようかと思ってましたので
typeBinaryでやることにしました。
ありがとうございました。

815 名前:デフォルトの名無しさん :2005/08/11(木) 11:22:24
VC++6.0でピクチャボックスへの線描画アプリを作ってたのですが、
ウィンドウからフォーカスから外れると、描画が消えてしまいます。
どうすれば消えずに済むのか、よろしければ教えて下さい。

具体的には下記のような感じです。

@線を描画させる

____
|   |
|   |
|___|


A他ウィンドウにフォーカスを移す。
____
|  _|_
|  |   |
|_|   |
   |__ |


B他ウィンドウを消してフォーカスを戻す。
(フォーカスが外れた時に見えなくなった描画部分だけ消えてる。)
____
|  _|
| |
|_|


816 名前:デフォルトの名無しさん :2005/08/11(木) 12:29:31
>>815
よし、全くの素人の俺が適当に答えてみる。
WM_PAINTでBeginPaint()とEndPaint()を使って無効領域を再描画すればいいんじゃね?

817 名前:デフォルトの名無しさん :2005/08/11(木) 13:52:12
>>816
無効領域を再描画というのは消えた部分だけ再描画ということでしょうか?
具体的にどうすればよいのでしょう?

ちなみに現在の線描画処理(MoveToやらLineTo)はOKボタン押下時にしているので、
WM_PAINT(::OnPaint() )の中のコードはプロジェクト生成時のままです。

818 名前:デフォルトの名無しさん :2005/08/11(木) 14:46:21
>>817
悪いことは言わん、初心者向けの本かサイトを捜して読んでこい。
#勿論、Windowsプログラミングの本ね。できればMFCで。

819 名前:816 :2005/08/11(木) 16:43:00
>>817
さっきも言ったけど俺のレスは信用するな。
ちょうど俺もそこらへんをMFC使わずにAPIの勉強をしている。
てかVC++持ってないからMFCの事はわからん。
で、どうやらそこそこ的を射てるようなので答えるが、プロジェクト生成時のままだったら何も書かれていないんじゃ?
線描画って事はGetDC()でWinMainの中に書いていないかい?
(MFCはWinMainすら隠蔽されてるんだっけ??)

素人考えだけど、オススメはMFCを扱わないWinプログラミングの本を読んだ方がいいと思う。
きっとメッセージループとかを理解していないっぽいから。

820 名前:デフォルトの名無しさん :2005/08/11(木) 17:14:06
まあ、面倒なのでOnPaint中に全体を再描画でいいんじゃない。

>>819
まあ、Windowsプログラムの入り口としてMFCからアプローチするのが近道なんじゃないか?
いきなり自力でWindowを作成するのは初心者にはやっぱり難しいよ。



821 名前:デフォルトの名無しさん :2005/08/11(木) 17:17:39
>>817
WM_PAINTが来たときに線を描画するようにすればいいだけ。
WM_PAINT内でBeginPaint()〜EndPaint()を使えば、それが無効領域の再描画になる。

>>820
MFCはその後がもっと難しいではないかと思う。

822 名前:815 :2005/08/11(木) 17:51:03
BeginPaint()〜EndPaint()
とやらを調べていたら、無効な領域だけを再描画するという方法が載ってるページを見つけました。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win16.html

これを参考にして出来るかやってみます。

823 名前:デフォルトの名無しさん :2005/08/11(木) 17:51:11
>>821
別にいいじゃん。そこまで>817がやるかどうかも判らんのだし。

824 名前:デフォルトの名無しさん :2005/08/12(金) 16:32:28
質問です。

exeプログラムの一部の関数をEXPORTする方法を教えてください。
別のプログラムから利用したいという要望が来まして……

それともdllを生成する別プロジェクトを作るしかないのでしょうか。

よろしくお願いします。

825 名前:デフォルトの名無しさん :2005/08/12(金) 16:44:55
素直に必要な分だけ別のプログラムのプロジェクトに参加させるのではダメ?

826 名前:デフォルトの名無しさん :2005/08/12(金) 17:05:38
exeプログラムでエクスポートしたい関数をdllからの
エクスポートと同じようにすればOKですよ。例えば、
__declspec(dllexport) void Func();として、exeのソースに書けば
void Func()がエクスポート出来ます。グローバル変数も同様です。

827 名前:デフォルトの名無しさん :2005/08/12(金) 17:10:29
もしかしたら静的リンクさせたかったり?

828 名前:824 :2005/08/12(金) 17:41:27
ありがとうございました。
何とか解決しました

829 名前:デフォルトの名無しさん :2005/08/12(金) 18:46:01
VC++でダイアログを幾つか使うようなアプリを作っています
作っていて気付いたのですがタブオーダーがどのダイアログでも効かないのですが

ダイアログはリソースエディタで作ったものでタブストップのプロパティを変えても
tabキーでコントロールの移動が出来ません
なんか変なとこ弄っちゃったのでしょうか?


830 名前:デフォルトの名無しさん :2005/08/12(金) 18:57:51
タブオーダーが効かないコントロールは何?
ボタン?

831 名前:829 :2005/08/12(金) 19:00:19
>>830
そうです。

832 名前:デフォルトの名無しさん :2005/08/12(金) 19:01:29
キャプションの文字列に何か入れなさい。
空はよくない。

833 名前:829 :2005/08/12(金) 19:02:39
お?出来ました!まさか、キャプションとはorz
ありがとうございました。

834 名前:デフォルトの名無しさん :2005/08/12(金) 21:18:20
.net 2003ってc99に対応しているのでしょうか?
可変長引数マクロでエラーになるのですが、
何か設定がいるのでしょうか?

835 名前:デフォルトの名無しさん :2005/08/12(金) 21:24:40
MSDN見たらVisual Studio.NETのVC++にはCランタイムライブラリの所に
>C99 のリリース時期により、このバージョンの Visual C++ はこの規格に準拠していません。
の記述あり。

836 名前:829 :2005/08/12(金) 21:46:36
>>831,833
困ったな、別な人が勝手に私の悩み解決してもらっても
私は解決して無いからな^-^;

>>830
ちなみにタブオーダーが効かないのは総てのコントロールです
ダイアログのテストとかではちゃんとタブオーダー効いているのですが
何故か普通に動かすと効かなくて困ってます


837 名前:デフォルトの名無しさん :2005/08/12(金) 23:07:28
キー入力がどっかに取られているとか。

838 名前:デフォルトの名無しさん :2005/08/13(土) 09:40:44
char error[3] ={0xEB,0xA7,0x00};
size_t size = ::MultiByteToWideChar(
CP_OEMCP
,MB_PRECOMPOSED | MB_ERR_INVALID_CHARS
,error
,-1
,0
,0);
MB_ERR_INVALID_CHARSを有効にするとGetLastErrorが1113を返されます。
(1113:Unicode 文字のマッピングがターゲットのマルチバイト コード ページにありません。)
SJISの漢字は(0x81〜0x9F || 0xE0〜0xFF)+(1BYTE)で大丈夫な気がするのですが、
何が起きているのでしょうか?


839 名前:デフォルトの名無しさん :2005/08/13(土) 16:35:04
>>838
そのコードの文字が何か分からんけど、Unicodeに対応する文字が無いんじゃないの?
SJISにあるかどうかなんてのは、関係ないだろ。

840 名前:838 :2005/08/13(土) 21:34:35
>>839
どうも、その通りでした。
(CP932の変換テーブルみてみたらなかった)

・mbstowcsは変換エラーを検出するので
MB_ERR_INVALID_CHARSがEnableですね。
・CStringWはMB_ERR_INVALID_CHARSはDisableでした。
標準関数は文字列の一部で変換エラーがあった場合、
どうするんだろう...



841 名前:デフォルトの名無しさん :2005/08/13(土) 23:22:19
ウィンドウ作成の初歩で躓いてます。
作成された実行ファイルのアイコンは変わってるんですが
ウィンドウ左上のアイコンが表示されず
黄色い三角形の!アイコンになってしまいます…。
派生した(?)ダイアログではアイコン表示されてるんです。
なんでかわかりませんか?



842 名前:デフォルトの名無しさん :2005/08/14(日) 00:37:23
エスパーさん出番ですよ。

843 名前:デフォルトの名無しさん :2005/08/14(日) 00:40:58
>>841
アイコンエディタの左上のテコンボボックスを標準(32x32)からスモール(16x16)に替えてえて見る。




844 名前:デフォルトの名無しさん :2005/08/14(日) 02:44:18
VC++.NET2003を買おうと思っているのですが、これって例えば、
ウィンドウプロシージャにメッセージ定数を書くときに、WM_って書いた時にリストが出てくれたりしますか?
それ以外にも、普通のエディタで書く時と比べて、
リストが出てくれて便利だったりしますか?

845 名前:デフォルトの名無しさん :2005/08/14(日) 03:43:42
>>844
オートコンプリートでってこと?ならでない。
でもClass PropertyでMessagesを選択するとリストアップしてくれる。
WM_...のとなりのプルダウンメニューからメッセージイベントハンドラを選ぶと、コードを挿入してくれる。

もうすぐVS2005がでるし、しばらくVisual Studio 2005 Team Suit β2版を使っていたら?
MSDN会員でないなら、".NET Expert"などの雑誌にCDがついているよ。


846 名前:デフォルトの名無しさん :2005/08/14(日) 04:20:53
>>845
そうです!オートコンプリートの事でした。
オートコンプリートではなくて、他の機能でリストアップ(コード挿入)してくれるのですね。
親切にどうもありがとうございます。

VS2005を待つことも考えたのですが、VC++を学習用に使いのですが、(学生ではありません)
2003と2005を価格的に比べても、VC++単品を買った方が安上がりかなと思ってる次第です。
2万円という絶妙な値段ですが、その後で慣れた後に上位バージョン(やstudio)にでも移行しようかなと考えています。

でもとりあえず、薦めていただいたVisual Studio 2005 Team Suit β2版もチェックしてみたいと思います。

847 名前:デフォルトの名無しさん :2005/08/14(日) 09:54:13
質問です
「猫でも〜」のSDK編の46章で、
case WM_DRAWITEM:
lpDI = (LPDRAWITEMSTRUCT)lParam;
if(lpDI->itemState == ODS_SELECTED)
で場合分けする、という部分があったのですがうまく働きません
プログラムは右クリックでメニュー(オーナードロー)を呼び出して
「選択状態になったら」(ここが効かない)その部分の色を変えて
ボタンを押されたら作業を実行、というものでした
if文が真になるタイミングでWM_DRAWITEMが出ていないようですが、
どうすればいいでしょうか?VC++6.0です

848 名前:デフォルトの名無しさん :2005/08/14(日) 12:48:14
質問です
自作プログラム中からTerminateThreadを使って他プロセスを終了
させるものをかいていたのですが上の関数を使うとexplorerの場合
勝手に再起動されてしまうのです。タスクマネージャのようにexplorer
を終了させたいのですがどうすればよろしいでしょうか?
環境:BC++

849 名前:デフォルトの名無しさん :2005/08/14(日) 14:43:05
ソース(またはプロジェクト)がCかC++かって設定必要ですか?
関数プロトタイプとかC++だと必要ないと思ってたのに、
書かなきゃ動かなかったりするんですけど…。

クラスとか作ったら勝手にC++のソースになるもんだと思ってるんだけど。。。

850 名前:デフォルトの名無しさん :2005/08/14(日) 15:57:22
>>847
lpDI->itemState & ODS_SELECTEDぽい。

>>848
TerminateProcess()とかExitWindowsEx()とかじゃ?

>>849
hoge.cpp C++
hoge.c C
じゃない。

851 名前:デフォルトの名無しさん :2005/08/14(日) 15:59:42
>>847
if(lpDI->itemAction & ODA_SELECT)



if(lpDI->itemState & ODS_SELECTED) 

どっちかでいければいいな


852 名前:デフォルトの名無しさん :2005/08/14(日) 16:31:35
http://pc8.2ch.net/test/read.cgi/tech/1120190961/
このスレの890-894がVC6++でコンパイルが通りません。
どこに問題があるでしょうか。7では通るようですが、
6でも通るように書き換えるとしたらどのようにしたらよいでしょうか。

853 名前:デフォルトの名無しさん :2005/08/14(日) 18:07:56
すみません、TerminateThreadではなくTerminateProcess()でした。
あと、ExitWindowsEx()はWindowsの終了などを操作するものですよね。
私はexplorerのプロセスを操作したいのです。

854 名前:847 :2005/08/14(日) 18:44:39
>850,851
&に変えたらいけました どうもサンクス

855 名前:デフォルトの名無しさん :2005/08/15(月) 13:10:41
エラーが出た時にすぐにコンパイルを終了する方法を教えて下さい。

856 名前:デフォルトの名無しさん :2005/08/15(月) 13:17:52
エラーが出たときにすぐにコンパイルが停止するように設定する。

857 名前:デフォルトの名無しさん :2005/08/15(月) 21:46:10
out lookの予定表の様な物を作ることになったのですが、助けてください。


858 名前:デフォルトの名無しさん :2005/08/15(月) 22:07:58
WndProcを扱っています。
文字が入力されはじめたことを監視して、適宜の処理をしたいと思っています。

その際に、WndProcとWM_IME_STARTCOMPOSITIONを利用しようと考えています。

859 名前:858 :2005/08/15(月) 22:11:49
しかしながら、
Console.Writelieでm.Msgを監視しても、
一向に、0x010Dが出力されません。
http://www.pinvoke.net/ ←WM_IME_STARTCOMPOSITIONの定義

参考にしたサイト様
http://www.ne.jp/asahi/oh/landd/prog_html/prog64.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/327notitlebardlg/notitlebardlg.html
http://www.microsoft.com/japan/msdn/net/winforms/bettercombobox.asp
http://dobon.net/vb/bbs/log3-11/6224.html

宜しくお願い申し上げます。

860 名前:858 :2005/08/15(月) 22:12:49
private const UInt32 WM_IME_STARTCOMPOSITION = 0x010D;
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_IME_STARTCOMPOSITION)
{
MessageBox.Show("やたー");
return;
}

Console.WriteLine(String.Format("{0,5:X}",m.Msg));
base.WndProc(ref m);
}

861 名前:デフォルトの名無しさん :2005/08/16(火) 00:20:09
Winsockで通信するプログラム作ろうと思ってるんですが、
Winsock2で最初やろうと思ってて
#include <winsock2.h>
をしたら再定義等のエラーが沢山出てきました。
winsock.hが先にインクルードされているからなんだな。
と、なんとなくわかり、
検索もしてwindows.hに含まれている事がわかりました。

自分はwinsock2の機能を使うわけじゃない(というかどう違うのかさえ知らない)ので、
winsock2のインクルードやめたらコンパイル-実行できて。ホッとしたんですが、
この先winsock2の機能を勉強して、使いたくなった時どうすれば良いですか?

windows.hで
#include <winsock.h>→#include <winsock2.h>
にするくらいしか対策は無いんでしょうか?

862 名前:デフォルトの名無しさん :2005/08/16(火) 00:25:05
VCとWindowsってUNICODE完全対応ですか?
もしそうでないとした場合に自分でUNICODE完全対応にしてソフトを配布するってこと可能ですか?

863 名前:デフォルトの名無しさん :2005/08/16(火) 00:40:30
>>861
#include <winsock2.h>
#include <windows.h>

とMSDNのサンプルに書いてあったような希ガス。

864 名前:デフォルトの名無しさん :2005/08/16(火) 10:42:11
すいません、教えて下さい。
iostreamをincludeしても、
cout が「定義されていない識別子です。」になってしまうのですが
どうしたら直せますでしょうか?

include自体は成功していますし、
cout自体のヘルプに乗っているコードをそのまま使っても
駄目なので、手の打ちようがなく困っています。

865 名前:デフォルトの名無しさん :2005/08/16(火) 10:54:00
std::cout

866 名前:デフォルトの名無しさん :2005/08/16(火) 12:29:44
Windows 9xはUNICODE非対応だったかな。NT系はUNICODE対応。
というか、内部ではアスキー文字もUNICODEに変換しているので
UNICODEとしてプログラムを作る方が効率がいい、というような
ことがAdvanced Windowsに書いてあった。
VC++のUNICODE対応というのが、UNICODEを扱えるバイナリを
作れるかということなら、作れる。MSDNでUNICODEを検索汁。
もちろん、自分で全部コーディングするならUNICODE対応でも何でも
お好きなやうに。

867 名前:デフォルトの名無しさん :2005/08/16(火) 12:55:25
>>864
C++を利用するのならnamespaceを勉強しなさい


868 名前:デフォルトの名無しさん :2005/08/16(火) 13:13:43
C++相談室から誘導されてきました(内容は同じ)

ウインドウ内で画像を移動させたいのですが何度やっても上手くいきません。
色々調べてみましたが結局詰まってしまったのでご助言をお願いします。

以下描画部分(メッセージ処理の一部)を書きますが、それ以外で必要な部分があれば言ってください。
case WM_CREATE:
 SetLayeredWindowAttributes(hWnd, RGB(255, 0, 255), 0, LWA_COLORKEY);          //紫を透明に
 SetTimer(hWnd,1,100,NULL);
 break;

case WM_PAINT:
 hdc = BeginPaint(hWnd, &ps);
 ExtFloodFill(hdc, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE);
 hbmp = (HBITMAP)LoadImage(hInst, "BITMAP1",IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
 hdc_mem = CreateCompatibleDC(hdc);
 SelectObject(hdc_mem, hbmp);
StretchBlt(hdc, POSX, 0, 100, 100, hdc_mem, 0, 0, 100, 100, SRCCOPY);             //POSXは変動
 EndPaint(hWnd, &ps);
 break;

--続く


869 名前:デフォルトの名無しさん :2005/08/16(火) 13:14:47
続き--

case WM_TIMER:
 hdc = BeginPaint(hWnd, &ps);
 ExtFloodFill(hdc, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE);
 hbmp = (HBITMAP)LoadImage(hInst, "BITMAP1",IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
 hdc_mem = CreateCompatibleDC(hdc);
 SelectObject(hdc_mem, hbmp);
StretchBlt(hdc, POSX, 0, 100, 100, hdc_mem, 0, 0, 100, 100, SRCCOPY);             //POSXは変動
 EndPaint(hWnd, &ps);
 break;

紫を透明色にし、ウインドウのメニュー・枠線を消して画像だけを表示させることをしようとしています。
WM_TIMERは何度も通っているのを確認、POSXの値は変わっています。
一度WM_PAINTで描画するとどうやってもウインドウ内の位置は変わらないようです。
環境はWindowsXP VC++.NETです。

870 名前:デフォルトの名無しさん :2005/08/16(火) 13:24:42
>>868
WM_PAINT時に移動すんじゃね

871 名前:868-869 :2005/08/16(火) 13:55:49
ありがとうございます
WM_TIMER(というかWM_PAINT以外)では描画されないのですね。

872 名前:デフォルトの名無しさん :2005/08/16(火) 14:01:24
描画されないというか、WM_PAINT以外でBeginPaint, EndPaintを呼んでは駄目だ。
WM_PAINT以外で描画するんならGetDC使え。

873 名前:デフォルトの名無しさん :2005/08/16(火) 14:26:28
コンパイルされたアセンブリファイル(*.s)を見るにはどうしたらいいんでしょうか?

874 名前:デフォルトの名無しさん :2005/08/16(火) 15:34:26
バイナリエディタで開いてください

875 名前:864 :2005/08/16(火) 15:56:21
すいません。自己解決しました。

876 名前:デフォルトの名無しさん :2005/08/16(火) 15:58:17
>>865 >>867さん
ありがとうございます。
Cと違って標準ライブラリのスコープがはっきり存在するのを
初めて知りました。


877 名前:873 :2005/08/16(火) 16:10:13
ニモニックで見たいのですが・・・。

878 名前:デフォルトの名無しさん :2005/08/16(火) 16:16:49
CListCtrlについて質問です。
スクロールバーを使わずに、別にボタンを用意して、
ボタンを押すごとに下に1行ずつスクロールさせるようにしたいのですが、
可能でしょうか?
もし可能であれば方法など教えてください。
いろいろサイト検索したのですが、なかなかみつかりませんでした…orz


879 名前:デフォルトの名無しさん :2005/08/16(火) 16:28:06
また質問です。
VC++.NETで作っていますがMicrosoft .NET Frameworkを使用しないexeファイルを作ることは可能なのでしょうか?


880 名前:デフォルトの名無しさん :2005/08/16(火) 16:31:25
Unmanagedで作りゃいいんじゃなかったっけ?

881 名前:デフォルトの名無しさん :2005/08/16(火) 16:58:05
レスありがとうございます。
>アプリケーションの開発に Visual C++ を使用している場合は、
>Visual StudioR .NET の下でも Visual C++ でアンマネージド アプリケーションを生成することができます
と言うところまでたどり着いているのですが、そこから先がどう調べても出てきませんでした。
現在の.NET Frameworkが必要な(マネージド)環境からアンマネージドに変えるにはどういう設定をすればいいのでしょうか。

882 名前:デフォルトの名無しさん :2005/08/16(火) 17:26:36
>> 873
コマンドラインでよければ。

hoge.cpp のアセンブル結果を見るには

cl /c /Fahoge.s hoge.cpp

とすれば、hoge.s が作れますよ。



883 名前:882 :2005/08/16(火) 17:44:22
アセンブル結果

ではなくて、アセンブリリストファイルです。

アセンブル結果じゃバイナリだ…

884 名前:879 :2005/08/16(火) 18:18:18
やはり.NET Frameworkを使わないexeファイルの作り方がわかりません。
881にも書きましたがUnmanagedでの作り方が調べても分からず、
そもそも何をしたら.NET Frameworkが使用される(使用しなくなる)のかも不明・・・。
何方か詳しい方はいませんでしょうか。


885 名前:デフォルトの名無しさん :2005/08/16(火) 18:31:33
.NETプロジェクトを選べばmanaged

886 名前:デフォルトの名無しさん :2005/08/16(火) 20:08:35
ありがとうございます。多分できました。
もう1つ追加質問、.NET Frameworkを使っているかどうかを既にインストールしている人が調べるには、
一度アンインストールし、exeを開くときにエラー等が出るかで無いかで判断するしかないのでしょうか。



887 名前:デフォルトの名無しさん :2005/08/16(火) 20:23:01
内部構造が違うはずだが

888 名前:デフォルトの名無しさん :2005/08/16(火) 21:34:56
ん?.NETは中間コードしか吐けないんじゃなかったか?
コンソールアプリで.NETを使わないでプログラムした場合は直接実行できると認識していたんだが

違ってたらスマソ

889 名前:デフォルトの名無しさん :2005/08/16(火) 22:34:08
>886
あるEXEが.Netを使っているか、Nativeなのか、については、
dependsに食わせてみれば判る。

890 名前:デフォルトの名無しさん :2005/08/16(火) 22:54:30
>>889
おお、これは便利ですね。
ありがとうございます。

891 名前:デフォルトの名無しさん :2005/08/17(水) 23:37:02
質問なのですが、DevPartner Profilerについてもこのスレでいいのかな?
プログラムのプロファイルを取りたくて上記のものに行き着いたのですが、
プロファイル結果がどうしても表示されないよ。

nativeなプログラムだと思うので
ツール->DevPartner Profileのinstrument managerでnative用の設定をしてビルド、
更にツール->DevPartner Profile->enable profilingでデバッグ無しで開始をやると
「.xxxxxx」(xxxの内容は忘れてしまいました)というファイルはちゃんとできるんですが、
結果が表示されません。
いろいろと調べてみるとプロファイリングしたいプログラムが終了するとプロファイル結果が
ウィンドウに自動で表示されるらしいのですがその結果が出ないということです。
仕方なくソリューションエクスプローラのDevPartner Profilerの項目で
先程生成された.xxxxxxファイルをダブルクリックで開いて見ると中身は空のようでした。

いろいろ設定を変えてみてもどうもうまくいかないのでDevPartner Profilerを
使っている方がいましたらお知恵をお貸しください。

892 名前:デフォルトの名無しさん :2005/08/18(木) 01:21:49
質問、横入りスミマセン。
入力の際、スペースの変換の確定のVK_RETURNを取得しない
方法を探しています。

GetWindowLong(hEditBox,GWL_WNDPROC,(LONG)EditProc);
で、エディットボックスのキー操作をフックしています。

EditProc内では
if( wparam==VK_RETURN ) {}内で、文字列を取得しています。
(今のやり方)

初め if( msg==WM_KEYDOWN && wparam==VK_RETURN ) {}で取得を
試みましたが出来ず(WM_KEYDOWNを拾えない)、調べてみると
ダイアログなどでは不適切らしいので、修正しました。


893 名前:デフォルトの名無しさん :2005/08/18(木) 02:01:50
画面(そのプログラムが実行しているウインドウ)を一番手前に呼び出す関数はあるのでしょうか?

894 名前:デフォルトの名無しさん :2005/08/18(木) 02:21:56
>>893
SetWindowPos

895 名前:デフォルトの名無しさん :2005/08/18(木) 02:35:24
>>869
タイマイベント処理でデータ更新して、終わったら再描画イベント発生させせばいいんでない?
再描画はInvalidRect とかつかって。

896 名前:893 :2005/08/18(木) 02:35:31
>>894
ありがとうございます

897 名前:895 :2005/08/18(木) 02:36:11
う、更新し忘れて、えらい古いレスしちまった。

898 名前:デフォルトの名無しさん :2005/08/18(木) 22:47:18
質問があります。
メタセコイアで使用している色設定のコントロールのようなものを
自前で作成したいのですが、カーソル位置からRGBにどのようにして
変換しているのかわかりません。
あのような色空間はどのような基準で描画すればいいのでしょうか?
カーソル位置からRGBにどのようにして変換すればいいのでしょうか?

899 名前:デフォルトの名無しさん :2005/08/18(木) 23:23:30
質問させてくださいな。

uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned ( __stdcall *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);

この関数の引数stack_sizeの意味がよく分かりません。
stack_sizeというのはどんな代物なんでしょうか

たとえば、
unsigned __stdcall ThreadFunc(void *arg)
{
int i;
char ss[128];

//色々な処理

_endthreadex( 0 );
return 0;
}

こんな関数があるとすると、_beginthreadexでThreadFunc()を
スレッドとして呼び出したい場合、stack_sizeは(sizeof(int)+sizeof(char)*128)を
指定しないといけないと言うことでしょうか?

900 名前:デフォルトの名無しさん :2005/08/18(木) 23:29:21
>>899
MSDNを見よ。
>また、引数 stack_size に 0 を指定すると、オペレーティング システムはメイン スレッドに対して指定したスタックと同じ値を使用します。
こう書かれている。

901 名前:デフォルトの名無しさん :2005/08/18(木) 23:32:54
>>898
寡聞にしてメタセコイアが何かは知らぬが、
色相環からrgb値を得たいと言うことかな?
それなら戦略は二つ。
・クリックした座標の画素を拾ってrgb値を得る。
・クリックした座標値からrgb値を算出する。
#これ以上の情報が必要なら画像処理スレ向きかな。

902 名前:デフォルトの名無しさん :2005/08/18(木) 23:48:53
>>899
関数呼び出しでもスタックを消費するから、そのサイズだと足りない。
まあ0でも指定しとけ。

903 名前:デフォルトの名無しさん :2005/08/19(金) 08:52:01
こんにちは

_T(" ")とはどういう機能なのでしょうか。

よろしく願います。

904 名前:デフォルトの名無しさん :2005/08/19(金) 09:14:55
HINSTANCE hInstanceというのがありますが、
具体的にどのようなものなのでしょうか。

905 名前:デフォルトの名無しさん :2005/08/19(金) 09:30:57
>>904
HINSTANCEと言う型のhInstanceと言う変数の宣言。
詳細はF1を押してMSDNを見るか「宣言へ移動」を使ってインクルードファイルを見よ。

906 名前:デフォルトの名無しさん :2005/08/19(金) 09:44:53
>>905
ググルで探してみます。
意味を知りたかっただけです。

907 名前:デフォルトの名無しさん :2005/08/19(金) 10:14:55
>>903
Unicodeビルドか否かで L" " か " " になるマクロ。

908 名前:デフォルトの名無しさん :2005/08/19(金) 11:53:33
GetWindowRectだと、スクリーン座標でのウィンドウ位置が得られます、
GetClientRectだと、クライアント座標でのウィンドウ位置が得られますが、left,topは常に0です。

では、子ウィンドウを作成したとして、子ウィンドウが属する親ウィンドウを基準としたleft,topを得たいのですが、どのAPIを使えばいいのでしょうか。

909 名前:デフォルトの名無しさん :2005/08/19(金) 12:28:16
>>908
GetWindowRectしてScreenToClient

910 名前:デフォルトの名無しさん :2005/08/19(金) 14:38:44
指定日から、○日後や○ヶ月後の日付を知りたいのですが、
何かいい方法はありますか?

911 名前:デフォルトの名無しさん :2005/08/19(金) 15:33:32
>>910
CTimeクラス、tm構造体、mktime関数あたりを使えばいいと思う。

912 名前:910 :2005/08/19(金) 16:10:19
>>911
ありがとうございました
それで挑戦してみます

913 名前:デフォルトの名無しさん :2005/08/19(金) 21:29:29
>904
簡単にいうとインスタンスハンドルというハンドル、
もっと砕けていうと、mainが持っているハンドルだよ
非常に荒く言うと、WIN32アプリ(コンソールアプリではない)ではハンドルがないと関数が動かない、ハンドルがないと車動かせないのと一緒
だから、メインウィンドウの初期化であるWNDCLASS(EX)やメインウィンドウ作るCREATEWINDOWはmainからインスタンスハンドルを頂かないと動かない
また、WIN32アプリではHWNDというウィンドウハンドルというのもある(WNDCLASS(EX)でHINSTANCEからCALLBACK関数へ関連付けされる、それと、CREATEWINDOWの戻り値でHINSTANCEから関連付けされる)
これは、メインウィンドウとダイアログとか、2つ以上のウィンドウのハンドルを分けるために存在する
具体的に言うと、メインとダイアログがHWNDハンドル同じ時は、例えばダイアログが開いている間はハンドル奪われて、メインウィンドウは操作できない
逆に、メインとダイアログがHWNDハンドル違うときは、ダイアログが立ち上がっている時でもメインウィンドウを操作できる
MFCになると、これをMODEL(前者)、MODELESS(後者)と言う
MFCにはMODELが標準になっている、そして、MFCではハンドルという概念がほぼ消えている
どういうことかというと、ハンドル分けてってことができないから、MODELESSが難しくなってくる

914 名前:デフォルトの名無しさん :2005/08/19(金) 22:22:49
ファイルを選択するにはCFileDialogを使いますが、
フォルダを選択したい場合にはどうしたらよいのでしょうか?



915 名前:デフォルトの名無しさん :2005/08/19(金) 22:42:56
>>914
SHBrowseForFolder

916 名前:デフォルトの名無しさん :2005/08/19(金) 23:02:05
ハンドルとステアリングの区別がつかない香具師発見。

917 名前:デフォルトの名無しさん :2005/08/19(金) 23:33:38
>>915

できました。ありがとう。


918 名前:デフォルトの名無しさん :2005/08/20(土) 01:55:05
>>913
インスタンスハンドルはアプリケーションの、
ウィンドウハンドルはウィンドウの、
独特の数値?(IDみたいなもん?)って事かな?

919 名前:デフォルトの名無しさん :2005/08/20(土) 02:16:40
>>916 華麗にスルーされてる香具師発見

920 名前:デフォルトの名無しさん :2005/08/20(土) 16:29:09
>918
まぁそんなもんだが、>913はほぼ間違ってるので注意。

921 名前:デフォルトの名無しさん :2005/08/20(土) 22:50:54
基本的なことですいません。

VS.NET2003でMFCを使ったりしてウィザードから作成する際、インクルードの書式が'/'でなくて'\'になってしまいます。
'/'にする方法はありますか?

922 名前:デフォルトの名無しさん :2005/08/20(土) 22:53:12
ひょっとしてインスタンスハンドルってアプリの先頭アドレス?

923 名前:デフォルトの名無しさん :2005/08/20(土) 22:58:07
>>922
今はモジュールハンドルと同じ扱いだからそうだよ。

924 名前:デフォルトの名無しさん :2005/08/21(日) 03:50:59
コンソールアプリケーションのmainの引数には
インスタンスハンドルの項がないんだけど、
この実行プロセスがインスタンスハンドルを持ってないってことはないの?

925 名前:デフォルトの名無しさん :2005/08/21(日) 04:11:27
ない

926 名前:デフォルトの名無しさん :2005/08/21(日) 04:18:41
持ってる、という解釈でよろしいのか。

927 名前:デフォルトの名無しさん :2005/08/21(日) 07:20:32
>>921
英語フォントを選択する。

928 名前:デフォルトの名無しさん :2005/08/21(日) 09:09:43
>>926
うん

929 名前:デフォルトの名無しさん :2005/08/21(日) 10:21:32
>>924
欲しければGetModuleHandle(0)で手に入る。

930 名前:デフォルトの名無しさん :2005/08/22(月) 01:16:51
DOSプロンプトでUNICODEで表示ってできるんですか?

931 名前:デフォルトの名無しさん :2005/08/22(月) 09:12:17
>>930
表示にUNICODEもなにもないだろう。

932 名前:デフォルトの名無しさん :2005/08/22(月) 20:08:49
MFCでキー入力判断って出来ますか?

あとファイルから読み込んだ文字列を多次元(forで繰り返せる形)にするやり方教えてください

933 名前:デフォルトの名無しさん :2005/08/22(月) 20:13:29
>MFCで(略
できる

>あとファイル(略
元からChar配列だろ

934 名前:デフォルトの名無しさん :2005/08/22(月) 21:56:29
>>981
たぶんのUNICODE文字列をcoutとかprintfとかで表示できるか?
という質問じゃないか?
まあ、答えは無理なので、
UnicodeToAnsiとか使ってコンバートした文字列を表示させましょう。

935 名前:デフォルトの名無しさん :2005/08/22(月) 22:02:13
>>934
printfは%lc, %lsで表示できる。

936 名前:デフォルトの名無しさん :2005/08/22(月) 22:07:32
>>933
ダイアログベースでした説明不足すまそ

多次元はstrcpy使って出来ました。ありがとうございました。

937 名前:デフォルトの名無しさん :2005/08/22(月) 22:14:29
#pragma comment( lib, "test/hoge.lib" ) というように、
自作の static library 専用のフォルダを作って、相対パスで
pragma しても、うまく結合(?)されませんでした。仕方ないので、
絶対パスで指定していますが、そうする他どうしようもないのでしょうか?

938 名前:デフォルトの名無しさん :2005/08/22(月) 22:31:38
"../"は使えない理由があるの?

939 名前:デフォルトの名無しさん :2005/08/22(月) 22:34:52
>>937
VCのディレクトリ設定に親ディレクトリを追加しろ

940 名前:デフォルトの名無しさん :2005/08/22(月) 23:10:36
>>934
別にそんなことせずともwcoutとかwprintfがある。

941 名前:デフォルトの名無しさん :2005/08/22(月) 23:32:09
>>940
できるってだけの話だろw

942 名前:デフォルトの名無しさん :2005/08/22(月) 23:38:05
>UnicodeToAnsiとか使ってコンバートした文字列を表示させましょう。
こんなことしたらマッピングできない文字が表示できない。

943 名前:デフォルトの名無しさん :2005/08/22(月) 23:45:29
WriteConsoleW()はもちろんNT系限定。

944 名前:デフォルトの名無しさん :2005/08/23(火) 00:36:44
ミリ秒単位で待機する関数ってなにですか?
できれば、gccでも同じ機能の関数を教えてもらいたいです。

945 名前:デフォルトの名無しさん :2005/08/23(火) 00:45:56
>>944
標準にはないと思う。環境依存でWin32ならSleepとか。

946 名前:デフォルトの名無しさん :2005/08/23(火) 03:50:35
質問です。XP、Visual C++ .NET です。

デバッグモードでコードをビルドして実行する際、コマンドライン引数を与えるにはどうすればよいのでしょうか?
普段は F5 で開始しているので、引数を与えるタイミングがありません。
よろしくお願いします。

947 名前:デフォルトの名無しさん :2005/08/23(火) 03:58:43
>>946
プロジェクトのプロパティ。前スレ読め

948 名前:デフォルトの名無しさん :2005/08/23(火) 03:59:24
レスだった。それから詩ね

949 名前:デフォルトの名無しさん :2005/08/23(火) 04:31:41
前レスってなに?プ

950 名前:デフォルトの名無しさん :2005/08/23(火) 09:29:07
「MFC と静的にリンク」とはどういう意味なのでしょうか?

「共有DLL 内でMFC」を使う場合は理解できましたが。


#ifdef _AFXDLL
Enable3dControls();// 共有 DLL 内で MFC を使う場合はここをコールしてください。
#else
Enable3dControlsStatic();// MFC と静的にリンクする場合はここをコールしてください。
#endif

951 名前:デフォルトの名無しさん :2005/08/23(火) 09:33:17
>>950
EXE内にMFCのコードを一緒に入れること。
実行時にMFCのDLLが不要になる。

952 名前:デフォルトの名無しさん :2005/08/23(火) 10:51:59
LPCTSTR lpszNewItemと、VCでプログラムを組んでいるとよく見かけるものですが、

なぜ、const char*の引数名に「lpsz」となずけるのでしょうか?

ポインタなので、「P」をつけるのはわかりますが、
なぜ、「LP」と「L」がつくのでしょうか?

また、Stringなので「s」がつくのはわかりますが、
なぜ、「z」がつくのでしょうか?

953 名前:デフォルトの名無しさん :2005/08/23(火) 11:07:26
>>952
lpは多分ロングポインタ。nearとかfarがあった16bit時代の名残だと思。
szは"String terminated by Zero”の略かな。
ハンガリアン記法でググレ。

954 名前:デフォルトの名無しさん :2005/08/23(火) 13:00:54
>>952-953
ありがと、俺も知らなかった( ´ー`)

955 名前:デフォルトの名無しさん :2005/08/23(火) 15:11:34
質問です。XP、Visual C++ .NET です。

hoge.exe のリリース版を通常に実行した場合エラーは出ないのですが、
ファイルのドラッグ&ドロップでコマンドライン引数を与えて実行した場合、

if (file.Open(filename, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead, &pError) == 0){
 CString s;
 s.Format("%d", pError.m_cause);
 AfxGetApp()->m_pMainWnd->MessageBox(s);
 return 1;
}

の部分でファイルのオープンに失敗し、エラー番号 3、つまり CFileException::badPath が返されます。
開こうとしているファイルは、引数とは何の関係もない別のファイルです。

filename は相対パスで指定してあるので、hoge.exe と D&D したファイルでカレントディレクトリが違うのが原因かと思い、
この2つを同じフォルダに入れましたが、だめでした。(同様のエラーが出ました)

なぜ不正パスと言われるのかが見当がつきません。
よろしくお願いします。また、他に必要な情報があればお願いします。

956 名前:デフォルトの名無しさん :2005/08/23(火) 15:15:57
>>955
Drag&Dropではなく、普通にコマンドラインに引き数つけて起動したらどうなるの?

957 名前:955 :2005/08/23(火) 15:19:26
>>956
あ・・・正常に動きました。

ファイル名を指定して実行→
E:\〜\hoge.exe test.dat
エラーなく動きました。

958 名前:955 :2005/08/23(火) 15:36:09
うーん、分からない・・・
コマンドラインならOKで、D&Dだとだめ・・・

959 名前:950 952 :2005/08/23(火) 15:53:44
>>951
>>953

ご返答いただきましてありがとうございました。
よくわかりました。

960 名前:956 :2005/08/23(火) 16:50:29
>>958
コマンドライン引き数をそのままMessageBoxかなんかで表示して味噌。
Drag&Dropのときは二重引用符で括られて内科医?
そうだとしたら、剥がさないといけないってことになるわけだ。

961 名前:デフォルトの名無しさん :2005/08/23(火) 16:57:51
>>955
コマンドライン引数を同処理してるのか書いてみ?

962 名前:955 :2005/08/23(火) 16:58:16
>>960
・・・ついてました! うーん何事もなく見逃してた・・・
はずしてみます。ありがとうございます。

963 名前:デフォルトの名無しさん :2005/08/23(火) 17:07:26
同処理じゃなくて、「どう処理」だろう・・・

964 名前:955 :2005/08/23(火) 17:07:36
>>961
肝心なことを書き忘れていました・・・。
MFC を使っているので、WinMain は隠蔽されています。
コマンドライン引数の処理については、

char* cmdline = AfxGetApp()->m_lpCmdLine;
file.Open(cmdline, CFile::modeRead | CFile::typeBinary);

といった感じです。ただ、エラーが起きている部分(badPath)は、
引数とは何も関係のないファイルを開いたときに起きています。
上のコードが処理されるよりずっと前に起きています。

965 名前:デフォルトの名無しさん :2005/08/23(火) 18:09:29
exeにファイルをドラッグした場合って、
カレントディレクトリが、exeのある位置じゃなくて
ドラッグ元ファイルのディレクトリなったような気がしないでもない。(違うかも)

その辺りで問題が起きてるとか。

966 名前:デフォルトの名無しさん :2005/08/23(火) 18:18:51
>>955
GetCurrentDirectory()でアプリの実行ディレクトリを確認してみ

967 名前:955 :2005/08/23(火) 18:34:32
>>966
確認したところ・・・全然別のところに!!

E:\Documents and Settings\(ユーザ名)\デスクトップ\〜\
に、exe およびD&Dしたファイルがおいてありますが、
表示されたカレントディレクトリは
E:\Documents and Settings\(ユーザ名)\
でした。

ファイルがオープンできなかった理由は分かりました。ありがとうございます!
しかし、なぜカレントディレクトリがこのように・・・


968 名前:955 :2005/08/23(火) 18:35:13
全角文字があやしいんですかねもしかして

969 名前:955 :2005/08/23(火) 18:39:48
exe、D&Dのファイル、ともに C:\ 直下においたのに・・・
D&Dするとカレントディレクトリは E:\Documents and Settings\(ユーザ名)\ でした。

はて・・・

970 名前:デフォルトの名無しさん :2005/08/23(火) 18:51:55
>>969
Explororの怪しい仕様。

971 名前:デフォルトの名無しさん :2005/08/23(火) 19:01:21
カレントディレクトリに依存しない設計に汁

972 名前:デフォルトの名無しさん :2005/08/23(火) 19:02:35
GetModuleFileNameからexeのある場所を出して
絶対パスで開くしかないんじゃないか?

973 名前:デフォルトの名無しさん :2005/08/23(火) 19:05:51
Explolerの仕様はよくわからんので、回避策を。

InitInstance()あたりで以下の処理を行う。
1) GetModuleFileName()でアプリのフルパス(ファイル名含む)を取得
2) それからディレクトリパスを抽出 (末尾から'\\'を探す)
3) SetCurrentDirectory()でディレクトリパスを設定

・・・これでダメかな?

974 名前:955 :2005/08/23(火) 19:08:57
>>970-971
まじですか・・・

>>972-973
わざわざ詳しくありがとうございます。やってみます。
皆様、長時間ありがとうございました。

975 名前:デフォルトの名無しさん :2005/08/23(火) 20:35:32
すいません><
VC++.NET2003なんですが、右下のプロパティにドッキングしていた
ドキュメントなんたらってものがなくなってしまいました。
どうしたら表示されるのでしょうか。
また、表示を全てデフォルトに戻す方法はあるのでしょうか?

976 名前:デフォルトの名無しさん :2005/08/23(火) 20:37:37
あ、スタートページからマイプロフィールのレイアウト既定値にしたら直りました。
しかもダイナミックヘルプだったし^^;

これがデフォルトに戻すやつなんですね。
おさわがせしました。

977 名前:デフォルトの名無しさん :2005/08/23(火) 21:51:11
主に(未だに)VC++6 (Win2000) MFCでソフト作ってます。
現状で特に不便を感じてないですが、VC++ .NET 2003 は .NET非依存の
ネイティブコード(アンマネージドというのでしょうか)も吐けるそうじゃないですか。
.NET自身に手を出すつもりはまだ無いですが、
・IDEの使い勝手向上(コード編集、ヘルプ、デバッグなど)
・MFCの機能向上
などの恩恵があるなら導入したいなーと思いました。

経験豊富なお兄ちゃん方、こんな私に
「(非.NETの観点から)6 -> .NET 2003でココがイイ!あるいはゴルァ!」
について教えていただけないでしょうか?

978 名前:デフォルトの名無しさん :2005/08/23(火) 22:30:58
-- 良い点 --
・インテリセンスの頭が良くなった -> マクロにも対応する
・タブ式エディタ化した点
・boost::lambda が普通に使えるようになった点
・プログラム全体の最適化 /GL が追加された点

-- 悪い点 --
・重くなった
・慣れるまでムカついた

IDEの便利さを求めるのであれば 2005 がより良いんじゃないかと個人的には思う。

979 名前:デフォルトの名無しさん :2005/08/23(火) 22:31:56
コンパイラの標準準拠度が高くなったり、テンプレート周りがまともになったり。

980 名前:デフォルトの名無しさん :2005/08/23(火) 22:36:58
田クリックで展開
曰クリックで折りたたみ
ソースをコピーしてワードパッドに貼り付けると...。

981 名前:デフォルトの名無しさん :2005/08/23(火) 22:42:23
たしかに2003重杉。これのせいでPC買い換えた。
あとインストールも遅すぎ。なんでこんな時間かかるんだ?

982 名前:デフォルトの名無しさん :2005/08/23(火) 22:44:23
IDEの使い勝手:低下、ヘルプ糞重い。ダイアログエディタでグリッドなどの設定を
変更しても再起動すると戻ってしまうのは超使いにくい。
クラスウィザードが無くなったので、メンバー変数やメンバ関数を追加するたびに編集画面に
行ってしまうのは使いにくい。反面、6.0ではちゃんと入力補完が効かなかった構造体(TVITEMとか)の
メンバーもちゃんと出るようになったのはありがたい。コンパイラの性能が格段に向上した。スケルトンで
インクルードガードは使われなくなった。代わりに#pragma onceで代用するようになった。
MFC:機能向上したが少しややこしくなった。感動的なのはCStringでTrimLeft()とTrimRight()を一度で行うTrim()が加わったことだ。
MFCのバージョンが上がったわけだが、作ったアプリを再配布する時は、必ずMFCのdllを添付しないといけなくなった。
というのも、XPなどにはMFC70.dllとかはサービスパックにすら含まれていないからだ。つまり、VS.NET以降のMFCアプリは
これまでとは違ってそのまま手軽に再配布というわけにはいかない。古いMFC42.dllとかは元々OSに附いているからVS6.0で作った香具師は
そのまま配布でも何とかなるのにねぇ。


983 名前:デフォルトの名無しさん :2005/08/23(火) 22:48:27
6.0では出来たVisual C++コンポーネントの追加は出来なくなったので、
プロジェクトを作って後からスプラッシュスクリーンを追加するとかは
出来ない。必要なら全部自分で作成する必要あり。


984 名前:デフォルトの名無しさん :2005/08/23(火) 22:48:38
設定で行番号表示が可能になったな。

985 名前:デフォルトの名無しさん :2005/08/23(火) 22:49:45
でもテンプレート周りが良くなったのは嬉しかった。

986 名前:デフォルトの名無しさん :2005/08/23(火) 22:50:44
悪い点:というか、リリース時期のため、C99には対応していない。
良い点:VC++6.0では一部は手打ちだったコンパイラのオプションが
ちゃんとGUIから指定出来るようになったこと。

987 名前:デフォルトの名無しさん :2005/08/23(火) 22:51:53
C99なんかどうでもいいけど。

988 名前:デフォルトの名無しさん :2005/08/23(火) 22:52:36
>>987なんかはどうでもいいけど。

989 名前:デフォルトの名無しさん :2005/08/23(火) 22:59:04
AppWizardないのね。。
一から勉強しなおしだねVC6→VC7の場合は。

990 名前:デフォルトの名無しさん :2005/08/23(火) 23:03:13
何言ってんだ、ちゃんとあるだろ。

991 名前:デフォルトの名無しさん :2005/08/23(火) 23:04:11
Visual C++の本は、その本の解説したプログラムだけでは何の役にも立たないプログラム
が多いんですけど、どうしましょうか。
だから結局、C言語でMS-DOSプロンプトのプログラムを書いて、コマンドラインからコンパ
イルすることばかりになってしまうんやけど。

992 名前:デフォルトの名無しさん :2005/08/23(火) 23:04:42
勉強しなおしってほど違和感はないけど。
それよりeclipseにある機能を早くつけろ。

993 名前:デフォルトの名無しさん :2005/08/23(火) 23:09:53
>>992
お前はeclipse使ってろ。

994 名前:デフォルトの名無しさん :2005/08/23(火) 23:12:09
★初心者にVisual C++を教えるスレ★ Part21
http://pc8.2ch.net/test/read.cgi/tech/1124806288/l50

995 名前:デフォルトの名無しさん :2005/08/23(火) 23:27:52
V

996 名前:デフォルトの名無しさん :2005/08/23(火) 23:28:36
i

997 名前:デフォルトの名無しさん :2005/08/23(火) 23:29:08
s

998 名前:デフォルトの名無しさん :2005/08/23(火) 23:29:53
u

999 名前:デフォルトの名無しさん :2005/08/23(火) 23:29:59
1000

1000 名前:デフォルトの名無しさん :2005/08/23(火) 23:30:06
al


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.