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


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

★初心者にVisual C++を教えるスレ★ Part23
751 名前:デフォルトの名無しさん :2006/08/04(金) 18:03:01
Visual Studio Professinal Editionです。
VC++を学ぼうと思い、猫でもわかるプログラミングからやろう考え一番最初のをコピペしたところ
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm ←このコードです。

hWnd = CreateWindow(szClassNme,
"猫でもわかるプログラミング",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

この部分の一番したのNULLにエラーがでます。
error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

どうすればいいでしょうか?.NET2003ではこんなエラーでなかったので困ってます・・・お願いしますm(_ _)m

752 名前:デフォルトの名無しさん :2006/08/04(金) 18:04:16
>>751
すいません、事故解決しました。
UNICODEからSJISをデフォルトにすればいいんですね、なんか2005色々めんどくさくなってますね・・・

753 名前:デフォルトの名無しさん :2006/08/04(金) 18:25:52
_T("猫でもわかるプログラミング")

754 名前:デフォルトの名無しさん :2006/08/04(金) 20:30:05
_T()入れずに使いたいんだけどどうすればいいの?
なんかマクロ定義しればいい?

755 名前:デフォルトの名無しさん :2006/08/04(金) 20:35:04
だって、そのマクロが_T()じゃないか

756 名前:デフォルトの名無しさん :2006/08/04(金) 20:45:19
>>754
一切UNICODEでコンパイルすることが無ければ付けなければ良いだけの話し

757 名前:756 :2006/08/04(金) 20:47:16
ってUNICODEでやりたいときの話かな?ごめん知らない。

758 名前:デフォルトの名無しさん :2006/08/04(金) 21:11:34
いや、UNICODEなんか使いたくないんだけどchar*渡すと怒られるから何だかなーと
LPCSTRが、みんなLPCTSTRになっちゃってるんだよね
使いにくいったらありゃしない

759 名前:デフォルトの名無しさん :2006/08/04(金) 21:18:38
>>758
それならUNICODEでコンパイルしなければいいだけ。それなら>>752が正解


760 名前:デフォルトの名無しさん :2006/08/04(金) 21:40:38
BCC DeveloperとVC2005ExpressじゃVCの方がいいのかな?

761 名前:デフォルトの名無しさん :2006/08/04(金) 22:03:28
>>760
VCスレでそれを聞くのはいかがかとw

762 名前:デフォルトの名無しさん :2006/08/05(土) 02:28:38
Microsoft Visual C++ 2005 Express Edition 使ってます。

fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
と出てしまいます。
Microsoft Platform SDKも入っていてその中にwindows.hも入っています。

Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
このサイトの通りにやってもだめでした。

どなたか分かる人いたらお願いします。

763 名前:デフォルトの名無しさん :2006/08/05(土) 02:38:35
stdio.hがsdtio.hになってたとかいうオチ?

764 名前:762 :2006/08/05(土) 03:03:45
>>763
#include <stdio.h>
#include <windows.h>

main(){
}

これでコンパイルかけてもダメです。

765 名前:デフォルトの名無しさん :2006/08/05(土) 03:05:10
亀田の八百長の件を初めて知った人に改めて教授(色んなところにコピペしてね)

<亀田のカラクリ>

1戦目 デンナロン・シスソバ(タイ) 戦績 0勝2敗         ○ 1回44秒KO
2戦目 プラカルン・ツインズジム(タイ) 戦績 0勝3敗       ○ 1回1分12秒KO
 ※日本ボクシングコミッション2005年度招聘禁止選手(八百長疑惑)

3戦目 サミン・ツインズジム(タイ)  戦績 0勝4敗         ○ 1回1分48秒KO
4戦目 ダオチャイ・KTジム(タイ) 戦績 0勝5敗          ○ 10回判定
 ※日本ボクシングコミッション2006年度招聘禁止選手(八百長疑惑)

5戦目 ノパデッチレック・チュワタナ(タイ) 戦績 0勝0敗     ○ 2回59秒KO
6戦目 ヨードゲン・シンワンチャー(タイ)  戦績 0勝4敗      ○ 1回2分10秒KO
7戦目 サマン・ソー・チャトロン(タイ) 戦績 46勝7敗1分     ○ 1回2分59秒KO
 ※チャトロンは35歳、3年前に1度引退。復帰後3連敗

8戦目 ワンミーチョック・シンワンチャー(タイ) 戦績 12勝2敗  ○ 3回50秒TKO
 ※亀田は防衛戦を一度もせずに王座返上。一部のライターや元プロからワンミーチョックの手数が明らかに少なかったと指摘される。

9戦目 ノエル・アランブラッド(ベネズエラ)戦績 21勝4敗1分1無効試合 ○ 7回TKO
 ※アランブラッドは元WBAミニマム級チャンピオンで亀田(フライ級)とは2階級差

10戦目 カルロス・ボウチャン(メキシコ)戦績 16勝12KO5敗 ○ 6回2分20秒KO
 ※ローブロー疑惑。試合終了後亀田親父がとんでもない剣幕で相手陣営に怒鳴り込む(ブック破りで切れた?)

11戦目 カルロス・ファハルド(ニカラグア)戦績 15勝10KO6敗1引 ○2回1分28秒TKO
 ※ファハルドの最終戦は2005年6月17日(1年近くのブランク有り)で、もともとミニマム〜Lフライ級の選手

昨日亀田が1階級下げて(ライトフライ)タイトルマッチを争ったランダエダは元々最軽量のミニマムの選手で
亀田とは実質2階級差。本来は去年の12月で引退予定だった選手。


766 名前:デフォルトの名無しさん :2006/08/05(土) 03:15:40
>>765
こんなところで妄想八百長おつかれさま。

767 名前:デフォルトの名無しさん :2006/08/05(土) 03:27:44
>>764
http://freepg.fc2web.com/cpp/topic_vce_001.html
このページの通り試してみる

768 名前:764 :2006/08/05(土) 04:05:45
>>767
できました!ありがとうございます。

corewin_express.vspropsファイルの修正のところでミスしてました。
どうもありがとうございmasita。

769 名前:デフォルトの名無しさん :2006/08/05(土) 06:19:44
>>759
返事遅くなったけどアリガトン!
昨日は久々に早く寝ちゃって今起きた。

770 名前:デフォルトの名無しさん :2006/08/05(土) 22:08:23
質問させてください。
VC++に興味を持ち、VCEEをインストールしました。
そんで、いざやるぞ!って思ったんですが、インターネット上で
VCEEに関する勉強HPが見当たりません。
VC6.0に関するHPはいくつも見つけたのですが、
これは流用ってできませんよね?(ポインタの表記の仕方とかが違うみたいです)

どこか、よいHPはありませんでしょうか。

771 名前:デフォルトの名無しさん :2006/08/05(土) 22:14:14
>>770
ただのC/C++コンパイラとして使うのであれば(C++/CLIを使うつもりで無ければ)、
普通のCやC++の入門のWebサイトは使えるぞ。

772 名前:770 :2006/08/05(土) 22:40:42
// RO.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"
#include "Form1.h"

using namespace RO;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}


773 名前:770 :2006/08/05(土) 22:44:44
申し訳ありません、途中送信してしまいました。
今、猫さんのHPをみながら、

*****
#include <stdio.h>

int main(void)
{
printf("私の名は粂井です\n");
return 0;
}
****

というコードを記述してみようと思いました。
ところが、VCEEにて新規プロジェクトを作成し、いざやってみようと
思ったら、メインソースファイルが>>772のような形になっており、
はてさて、int main{なんたら}のなんたら部分を消してしまってもよいものか
困っています。このような理由で、先ほどのような質問をさせていただいた次第です。

774 名前:デフォルトの名無しさん :2006/08/05(土) 22:46:56
>>772
それはC++/CLIのプログラム。はっきり言うとC++/CLIには
まだ入門向けのWebサイトも本もないし、当分できないであろう。
だって素のC++の上に、更にC++/CLIと.NET Frameworkの知識を積み重ねで要求されるから。

普通のC/C++使ったプログラムを作る気なら、
Win32 コンソールアプリケーション・Win32 アプリケーションでプロジェクト作れよ。

775 名前:770 :2006/08/05(土) 23:14:38
私が作ろうとしていたコードがまさにC++/CLIだったわけですね_/ ̄|○
ご指摘ありがとうございました。
ここはひとつ、おっしゃるようにWin32 コンソールアプリケーション・Win32 アプリケーションで
プロジェクトをつくり、C/C++に慣れてみようと思います。

ちなみに、Win32 コンソールアプリケーション・Win32 アプリケーションで作成した
プロジェクトは、操作はやっぱりコマンドプロンプトのみで、
フォームを作成したりとかはできないですよね?


776 名前:デフォルトの名無しさん :2006/08/05(土) 23:22:06
>>775
C言語編を中盤までマスターし、Platform SDKを使えるようにした上で、
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
Windows SDK編へ突入しろ。

777 名前:770 :2006/08/05(土) 23:30:09
了解です、大佐


778 名前:770 :2006/08/05(土) 23:31:24
また、途中送信してしまいました。

いろいろありがとうございました。
猫さんのHPを見て頑張ってみます。

779 名前:デフォルトの名無しさん :2006/08/06(日) 20:36:09
マルチメディアキー付きキーボードのMultimedia Keyの発するWM_ってなんですか?

780 名前:デフォルトの名無しさん :2006/08/06(日) 21:53:36
Spy++で調べてみれば?

781 名前:sage :2006/08/07(月) 07:31:40
Visual C++.NET の CFormViewで画面とクラスを複数用意し、
画面上にある複数のボタンを押すことにより画面とクラスを切り替え、それぞれ違う処理をしようと思っていますが、
CFormViewのクラスの追加はできましたが、画面とクラスの切り替えがうまくできません。
最初の画面の、ボタンを押されたときの処理にいろいろ打ち込んでいるのですが‥
どなたか参考になるご意見をお願いいたします

782 名前:デフォルトの名無しさん :2006/08/07(月) 14:41:02
追加したクラスの実体をどこか(最初の画面とか)で作ってやって
そいつの表示用メソッドを呼んでやればいいよ。
たとえばこんな感じ。

CMyFormView* pMyFormView;

pMyFormView = new CMyFormView(this);
pMyFormView->ShowWindow(SW_SHOW);

クラスを追加するというのは雛型を作っただけ見たいな状態なので、
実際にはどっかのクラスのメンバ変数として用意してやるとか、
ポインタ変数をメンバに定義してnewしてやるとかして実体を作って
やんないと何も処理が出来ない。

783 名前:デフォルトの名無しさん :2006/08/07(月) 18:23:56
テキストファイルから内容を読み込み、それを配列に格納する関数を作ろうと思っているのですが、どうも上手くいきません。
#include <iostream.h>
#include <fstream.h>
#include <conio.h>

void FileRead(char *FileName,char *File)
{
char c;
char *file_name = *FileName;
int i=0;
ifstream MyFile(file_name);
while(MyFile.get(c))
{
i++;
cout << c;
*(File+i) = c;
}
}
int main(void)
{
char File[255];
char *FileName = "test.txt";
FileRead(*FileName,*File);
cout << File[0] << endl;
getch();
return 0;
}

どうすればよろしいのでしょうか。ご提示お願いいたします。

784 名前:デフォルトの名無しさん :2006/08/07(月) 18:28:22
>>783
素直に入門書辺りを読み直した方がいいと思うよ。
突っ込みどころだらけで説明する気にもなれないよ。

785 名前:デフォルトの名無しさん :2006/08/07(月) 18:28:52
>>783
C++使えるようになりたいんなら
C言語のポインタの勉強を基本からやりなおせ・・・

786 名前:デフォルトの名無しさん :2006/08/07(月) 18:50:53
C++スレ行った方がいいだろ

787 名前:デフォルトの名無しさん :2006/08/07(月) 20:47:46
>>784-785
わかりました。もっと勉強してきます。
>>786
またどうしてもわからなくなったらC++スレで訊いてこようと思います。

788 名前:781 :2006/08/07(月) 21:37:32
>>782さま
ありがとうございます

名前をsageにしている‥僕何やっているんだろ

789 名前:デフォルトの名無しさん :2006/08/09(水) 00:53:26
visual studio 2005で、CとWIN32APIで書いてます。
タイトルバー無しのダイアログを表示させたいのですが、背景が灰色ではなく、透明になってしまいます。
ダイアログにあるボタン、テキスト、エディットボックス部分は、背景は透明ではなく、ちゃんと灰色に表示されます。
以下が、ソースコードの一部です。何がおかしいのでしょうか?
リソーススクリプト
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
IDD_HISCORE DIALOGEX 0, 25, 119, 86
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
PUSHBUTTON "OK",IDOK,37,69,42,15
CTEXT "あいうえお",IDC_STATIC,24,3,70,8
CTEXT "かきくけこ。",IDC_STATIC,24,12,72,8
EDITTEXT IDC_EDIT1,14,40,91,12
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

ダイアログの表示する関数
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DialogBox(
(HINSTANCE)GetWindowLong(hWnd , GWL_HINSTANCE) ,
MAKEINTRESOURCE(IDD_HISCORE),
hWnd , DialogProcHiscore
);
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

790 名前:デフォルトの名無しさん :2006/08/09(水) 01:42:05
質問
float a = 1.0f;
float b = 0.1f;
while(1){
a = a / b;
}
とループさせながらウォッチでaの値を見ていると
1.000e-038#DENとでてくるのですが
#DENの意味は何ののですか?

791 名前:デフォルトの名無しさん :2006/08/09(水) 01:53:52
deny

792 名前:デフォルトの名無しさん :2006/08/09(水) 09:14:18
DENMARK

793 名前:デフォルトの名無しさん :2006/08/09(水) 10:07:41
DENDENMUSI

794 名前:デフォルトの名無しさん :2006/08/09(水) 11:21:19
>>790
aの値は増えていくんじゃないのか?
んで、1e308を越えて演算オーバーフローが起きたんじゃないか?

795 名前:デフォルトの名無しさん :2006/08/09(水) 12:40:33
Visual Studio 2005 Express Edition は、
Windows Me で動くのでしょうか。

796 名前:デフォルトの名無しさん :2006/08/09(水) 12:40:58
>>795
動かない。2000/XP以上が必要。

797 名前:795 :2006/08/09(水) 12:47:47
>>796

そうですか。
ありがとうございます。


798 名前:790 :2006/08/11(金) 00:48:10
>>794
a = a / b; じゃなくて
a = a * b; でした

floatの範囲を越えてたみたいですね
と思ったら、ループを続けたら以下の数値が
出てきたのですが

1e-038#DEN
1e-039#DEN
1.00001e-040#DEN
9.99967e-042#DEN
1.00053e-042#DEN
9.94922e-044#DEN
9.80909e-045#DEN
1.4013e-045#DEN
0

floatの範囲外は>>791でのDENYで
正しくないということなのかな

799 名前:デフォルトの名無しさん :2006/08/11(金) 12:15:52
denormalized numberやろ。
値が小さすぎて正規化数では表せませんってこと。

800 名前:790 :2006/08/13(日) 17:26:58
>>799
denormalized numberでググッたらわかりました
ありがと

801 名前:デフォルトの名無しさん :2006/08/16(水) 14:26:30
ttp://www31.ocn.ne.jp/~yoshio2/vcmemo17-1.html
ここのタスクトレイ常駐アプリサンプルをコンパイルしてみたのですが、
「初回の例外が発生しました : 0xC0000005: 場所 0xffffffff を読み込み中にアクセス違反が発生しました。」
というメッセージが終了後に出ます。

けれども出力欄には上記メッセージが出るのですが、
中止とか継続とかの例のダイアログは出ません。
Releaseで実行すると何事も無く終了します。

このアクセス違反メッセージは無視していいのでしょうか?
ちなみに

((CMainWnd*)m_pMainWnd)->Create();

の行をコメントアウトすると消えます。

何かヒントをいただければと思います。よろしくお願いいたします。

Athlon64の自作機
WindowsXP Professional SP2
Visual Studio .NET 2003 Professional

802 名前:デフォルトの名無しさん :2006/08/16(水) 14:44:50
>>801
m_pMainWndがNULLかどうか、デバッグで確認してみようか。

803 名前:デフォルトの名無しさん :2006/08/16(水) 14:58:44
>>802
レスありがとうございます

とりあえず、リークがあったのでCMainWnd::PostNcDestroy()の最後でdelete thisしています。

m_pMainWndがNULLかについては、CTrayIconApp::ExitInstance()を追加して
そこでブレークした限りではNULLでしたが…もっと前でしょうか?

804 名前:デフォルトの名無しさん :2006/08/16(水) 15:16:53
crt0dat.cのvoid __cdecl __crtExitProcess ()の最後の行、ExitProcess(status)の中で発生しているようです…

805 名前:デフォルトの名無しさん :2006/08/16(水) 15:17:01
>>803
>((CMainWnd*)m_pMainWnd)->Create();
の段階でNULLなら、そりゃぁアクセス違反も起きるわなぁ。
まさか、解放した後のポインタを見てないだろうね。

806 名前:801 :2006/08/16(水) 15:47:29
>>805
ぃぁそこでNULLだったら盛大にダイアログが出ますから…
それにそこは一つ上でnewしてる直後ですし

終了の最後の段階でアクセス違反が、デバッグ版では出ているのに、
そういうメッセージが出力欄に出るだけで素通りされ、何をどうやっても
止まってくれないんです
一応はアセンブラのウィンドウも覗きましたが、さすがに理解不能で

デバッガが止めてくれない例外というのは何者なのだろうか、と

807 名前:デフォルトの名無しさん :2006/08/16(水) 16:12:15
ぬるぽならともかく、0xffffffffてのがよく解らないな。
ちなみに、WinXPProSP2/VS2005Proだと、例外は発生しなかった。
デバッガが止めないという事は、内部でハンドリングされている訳だし、
気にするな、てことでいいんじゃね?

808 名前:801(やおい?) :2006/08/16(水) 16:17:43
>>807
なんですとー!?

まあ….NET2003はちょっと怪しいところがありますしねえ
だからって初代はもっと怪しいですが

とりあえずデバッガ公認ということでとりあえず気にしないことにします。
ありがとうございました

809 名前:デフォルトの名無しさん :2006/08/17(木) 01:27:36
VS2005です。
メニューからファイル→開く でファイルを参照させて画像ファイルを開いてそれをPictureboxに表示させたいんですが
どう書けばいいでしょう・・・メニュー自体は作れたのですが、それを押した時のイベントが初心者なので全然わかりません(TT)
参考になるHPとかでもいいんで教えてくださいー

810 名前:809 :2006/08/17(木) 01:28:29
ちなみにMFCのダイアログベースで作っております。

811 名前:デフォルトの名無しさん :2006/08/17(木) 02:31:35
やなこった

812 名前:デフォルトの名無しさん :2006/08/17(木) 13:26:40
パンナコッタは旨い

813 名前:デフォルトの名無しさん :2006/08/18(金) 18:41:43
デバッガの表示がおかしくなった。
int*がNULLのはずがfalseってなるし、
ポインタがNULLなのに、<未定義の値>ってなる。
前は、未定義の値なら、そのおかしな数値がそのまま表示されたのに。
やってられん(;´Д`)

814 名前:813 :2006/08/18(金) 19:13:36
自己解決しました。VCめ。

815 名前:デフォルトの名無しさん :2006/08/18(金) 20:50:17
代入演算子を下記のようにオーバーロードし、
自己代入を行うと、
オブジェクトは一つなのに
文字列を格納するための動的なメモリ領域が二つ分割り当てられると本にあるのですが、
sDatを一度deleteしてからnewしてるので、そんなことはないと思ってしまうのですが。
どう解釈したらよいのでしょうか……。
よろしくお願いします。

// MyStringクラスの定義
class MyString {
char *sDat;// メンバ変数
public:
MyString();// コンストラクタ
~MyString();// デストラクタ
void operator=(const MyString &mstr);// 代入演算子のオーバーロード
};

// 代入演算子のオーバーロード
void MyString::operator=(const MyString &mstr)
{
// 古い文字列を削除。(ここでsDatは消える?)
delete [] sDat;

// 新しい文字列を格納。
sDat = new char[lstrlen(mstr.sDat) + 1];
lstrcpy(sDat, mstr.sDat);


816 名前:デフォルトの名無しさん :2006/08/18(金) 20:51:15
}


int APIENTRY _tWinMain(HINSTANCE hInstance,
           HINSTANCE hPrevInstance,
           LPTSTR  lpCmdLine,
           int    nCmdShow)
{
 // オブジェクトを宣言
 MyString ms1;

 // 文字列を代入
 ms1 = "Hello";

 // 自己代入(これで文字列が二つに?)
 mc1 = mc1;
...
}

817 名前:デフォルトの名無しさん :2006/08/18(金) 21:49:57
領域が二つ分割り当てられるようには見えないが
deleteされた領域にアクセスすることになるな

818 名前:デフォルトの名無しさん :2006/08/18(金) 22:54:29
チラシ

VS2003 SP1
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=69D2219F-CE82-46A5-8AEC-072BD4BB955E&displaylang=ja

819 名前:デフォルトの名無しさん :2006/08/18(金) 23:00:56
>>818
GJ

820 名前:デフォルトの名無しさん :2006/08/19(土) 09:21:39
>>818
ちょ、なにサラっとGJしてんの?
ありがとう

821 名前:デフォルトの名無しさん :2006/08/19(土) 21:28:30
突然ですまない
時間が無いんだ

Visual C++ 2005 Express Edition
ってFramework不要のアプリって作れるのか?
作るときには何か別途でダウンロードとかあるのか?

822 名前:デフォルトの名無しさん :2006/08/19(土) 21:42:43
>>821
Visual Studio 2005 Express Editions: Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/


823 名前:デフォルトの名無しさん :2006/08/19(土) 21:50:51
>>822
ありがとう!!
今インストールしてる

824 名前:デフォルトの名無しさん :2006/08/19(土) 22:48:46
奇遇なのか俺はきのう同じようなことをしてた。
このサイトを見ながら
tp://www7a.biglobe.ne.jp/~lshen/EternalWindows/else/VC%202005.html

825 名前:デフォルトの名無しさん :2006/08/19(土) 22:55:52
そんなどこの誰が書いたのかも分からんページを参考にしないで、
素直にMSDN見ろよ。

826 名前:デフォルトの名無しさん :2006/08/19(土) 23:05:48
MSDNめんどくさい

827 名前:デフォルトの名無しさん :2006/08/19(土) 23:08:15
>>817
ありがとうございました。

828 名前:デフォルトの名無しさん :2006/08/19(土) 23:08:29
site:microsoft.com付けてググればいいだけのこと。

829 名前:デフォルトの名無しさん :2006/08/21(月) 01:39:55
すいません。過去に同じような質問があったのですが、
プログラムが上手く実行できなかったので質問します。

Win32アプリケーションを作ろうとして、
新規プロジェクトからWin32アプリケーション(コンソールではない。)を設定
test.cpp(Hello,Worldなど超簡単プログラム)を作って
コンパイル→実行→思惑通り起動!

とここまでは良かったのですが、Visual C++ 6.0を終了させて、
再起動の後、先ほどのtest.cppを開いて実行すると、以下のようなエラーで実行できません

LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です
Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

ちなみにコンパイルではエラーなしです。
初めにプロジェクトを作るときはどのプログラムでも実行できたのですが、
一度VisualC++を終了させてから再起動してプログラムを起動すると
二度と実行できなくなります。

どうすれば再起動後もプログラムを走らせることができますか?


830 名前:デフォルトの名無しさん :2006/08/21(月) 01:41:18
>>829
ソリューションファイルを開くんだ

831 名前:デフォルトの名無しさん :2006/08/21(月) 02:10:19
main と WinMain について調べてみよう。

832 名前:デフォルトの名無しさん :2006/08/21(月) 03:18:16
>>830
Visual Studio.Netではなく、Visual C++なので
ソリューションファイル(.sln)が作成されないのですが・・・

>>831
mainはC言語、WinmainはWindowsアプリケーションのエントリーポイントという
ことはわかったのですが、ウェブ上で発見したどのようなWinアプリも
>>829の症状がでて実行できなかったです。ちゃんとWinmain関数を使ってるのですが・・・

Visual Studio.Netを使わないとWinアプリは作れないということなのでしょうか・・・?

833 名前:デフォルトの名無しさん :2006/08/21(月) 03:21:35
(プロジェクト名).vcproj
というファイルは無いのか?
それを開けばよし

834 名前:デフォルトの名無しさん :2006/08/21(月) 06:38:35
>>832
VC++6.0までなら、dswかdspを開けばいい。
VC.NETからはdsw->sln、dsp->vcproj等になっている、はず。

ソースだけ渡されたので、とりあえずコンソールアプリとしてビルドされた、
でもmain見つからない、って所か?

835 名前:デフォルトの名無しさん :2006/08/21(月) 16:29:38
Microsoft Visual C++ 6.0 を使っているのですが、
エディットボックスをある条件下で「編集不可」にしたいのですが、どうすればできますか?

836 名前:デフォルトの名無しさん :2006/08/21(月) 16:37:03
>>835
EM_SETREADONLY

837 名前:デフォルトの名無しさん :2006/08/21(月) 16:38:29
SetReadOnly

838 名前:デフォルトの名無しさん :2006/08/21(月) 16:39:19
>>836さん
その定数を使う関数も教えて頂けますか?

839 名前:デフォルトの名無しさん :2006/08/21(月) 16:42:52
>>838
MSDNで調べろ

840 名前:デフォルトの名無しさん :2006/08/21(月) 23:28:10
>>838
"EM_SETREADONLY"でぐぐれば、使用例がある。ちょっとしたことはホント便利になった。

841 名前:デフォルトの名無しさん :2006/08/22(火) 00:18:33
visual studio 6.0 Enterprise Editionをインストールしています。
Disc2,Disc3って何に使うかご存知な方おりましたら、
ご教授願います。

842 名前:デフォルトの名無しさん :2006/08/22(火) 00:23:04
>>841
中身見てみれば?

843 名前:デフォルトの名無しさん :2006/08/22(火) 00:32:18
なんかファイルがいろいろ入ってるってことはわかるんですが・・・。
セットアップファイルのEXEも起動しないですし・・・。


844 名前:デフォルトの名無しさん :2006/08/22(火) 00:44:20
MSに訊け

845 名前:デフォルトの名無しさん :2006/08/23(水) 01:12:02
GDI+使うとき、リソースに入れたbitmapを読み込むのどうすればいいですか?

CPaintDC dc;
Graphics graphics(dc.m_hDC);
Bitmap* bmp = new Bitmap(IDB_BITMAP1); ←これどうにかしたい
graphics.DrawImage( bmp, 0, 0 );

846 名前:デフォルトの名無しさん :2006/08/23(水) 01:14:42
VC++.net2003を使用し、Windowsアプリケーションを作成しています。
OSは、WindowsXPです
ログインユーザーの違いによりエラーが出てこまっています。

1、管理者権限でログインした場合
・EXE実行(Releseで作成したもの)すると、正常に動作します。

・ソース実行(DEBUG)しても正常に動作します。

2、一般ユーザー(制限ユーザー)の場合、
・EXE(Releseで作成したもの)をクリックしたとたんに
"初期化に失敗しました。アプリケーションエラー (0xc0000022)"の
Windowsエラーが発生し、起動さえできません。

・ソース実行でも(DEBUG)、初期化に失敗しましたと出て、
落ちている個所さえ特定出来ません。そもそも、ソースが実行できていない感じです。

DLLの読み込み等で失敗しているのでしょうか?
ちなみにWindows2000でも同じ現象が発生しました。

普段開発は、管理者権限で行っていますが、
実際動作させるのは制限ユーザーです。
何が影響しているのか、わかりません。

管理者権限でうまく動作しているのでソース自体には問題がないと思われるのですが。。。
アクセス権限等関係あるのでしょうか?

どなたかご存知の方、解決方法を教えてください。


847 名前:デフォルトの名無しさん :2006/08/23(水) 02:04:17
>>845
インスタンスハンドルとリソース名(or ID)を指定するコンストラクタがある。
http://windowssdk.msdn.microsoft.com/en-us/library/ms536317.aspx

ところでBitmapをnewで動的に作る必要ある?

848 名前:デフォルトの名無しさん :2006/08/23(水) 02:48:10
>>847

実際のプログラムだとRenshuGDIPlusってクラスに

Bitmap* m_resourceBitmap;

ってメンバ用意してます。
コンストラクタでリソースからBitmapクラス作ろうとしてるので
さっきの例ではnewしてたのです。

実際RenshuGDIPlusコンストラクタで

HINSTANCE hInst = GetWindowLong( this->m_hWnd, GWL_HINSTANCE );
m_resourceBitmap = new Bitmap( hInst, IDB_BITMAP1 );

ってやったらコンパイラからお母さん許しませんって出ました。orz


849 名前:デフォルトの名無しさん :2006/08/23(水) 05:52:01
>>847
ありがとう、解決しました。

@
 m_resourceBitmap = new Bitmap( hInst, (WCHAR*)MAKEINTRESOURCE(IDB_BITMAP1) );
@'
 m_resourceBitmap = new Bitmap( hInst, (WCHAR*)IDB_BITMAP1 );

@と@'のどちらでもできました。

850 名前:デフォルトの名無しさん :2006/08/23(水) 08:24:51
>>848
どうせデストラクタでdeleteするのだろう。ならやはりポインタにする必要ない。
普通にコンストラクタの初期化リストで初期化すればいいだけではないか。

>>849
MAKEINTRESOURCEW使えばキャスト不要。

851 名前:デフォルトの名無しさん :2006/08/23(水) 09:24:16
はじめまして
学校でVCを使用する事になったのですが、


852 名前:デフォルトの名無しさん :2006/08/23(水) 09:42:41
>>851
そうですか。
それで何か質問でもおありで?

853 名前:デフォルトの名無しさん :2006/08/23(水) 22:35:12
*(アスタリスク)っていうのはポインタを表す時に使われるみたいですが、
変数に対して左に書くような、本にありました。
例えば、変数aに対して、ポインタは*a。(aの左に書いてる)

勉強していて、この*が変数の右に来ることがあるみたいですが、
どういう意味なのかわかりません。

void RenderObject(void *p_void)
{
  struct Object *p=(struct Object *)p_void;

などと本にあって、         ↑この*の
使い方ってどういう意味なのでしょうか?

質の低い質問で申し訳ないですが、よろしくお願いします。


854 名前:デフォルトの名無しさん :2006/08/23(水) 22:55:34


855 名前:デフォルトの名無しさん :2006/08/23(水) 23:12:54
>>853
キャスト

856 名前:デフォルトの名無しさん :2006/08/24(木) 00:02:33
855さん、即レスありがとうございます。
ぐぐって調べます。m(_ _)m

857 名前:デフォルトの名無しさん :2006/08/24(木) 00:56:27
どう見ても"変数"の右には来ていない。

858 名前:855 :2006/08/24(木) 01:03:21
見直したらレスの内容がずれてたかも

int *p;
とした時、pの型は int * で
この*は型がポインタであることを表している

んで
(struct Object *)p_void
はp_voidの型をObjectのポインタにキャスト(型変換)してる

859 名前:デフォルトの名無しさん :2006/08/24(木) 01:06:10
vcと関係ないw

860 名前:デフォルトの名無しさん :2006/08/24(木) 06:38:14
俺の人生もキャストしたいんですが何か?

861 名前:デフォルトの名無しさん :2006/08/24(木) 07:13:17
別に、何も

862 名前:デフォルトの名無しさん :2006/08/24(木) 08:14:44
>>860
アクセス違反

863 名前:デフォルトの名無しさん :2006/08/24(木) 10:15:25
>>860
static_castしようとしたら面接で落とされ
dynamic_castしたら警察に通報され
やけくそになってreinterpret_castしたら殺された

そんな人生。

864 名前:デフォルトの名無しさん :2006/08/26(土) 03:06:12
SDIのCMainFrameにOnCreateClientをオーバーライドして、
スプリッタウインドウ作り左右にFormViewを配置しました。
左のViewにはボタンコントロールが2つ。

 ───────────────────────────
│                          ×│
 ───────────────────────────
│       │                   │
│       │                   │
│ ボタン1  │                   │
│       │                   │
│ ボタン2  │                   │
│       │                   │
│       |                   │
│       |                   │
│       |                   │
│       |                   │
 ───────────────────────────

ボタンコントロールで右のViewを切り替えたい場合は
どうやればいいのでしょうか?
スプリッタ使う場合の右のViewを複数作る時点から壁にぶつかってしまいました。


865 名前:864 :2006/08/26(土) 03:07:10
AAは次からやめとこう・・・

866 名前:デフォルトの名無しさん :2006/08/29(火) 09:10:42
VC++なら、練習の叩き台がありそうだ。

http://www.bosuke.mine.nu/blog/archives/2005/07/post_214.php
外道ソフト 「アマゾン殺し」
(VC++によるソースもあるようで。自己責任にてドーゾ)

867 名前:デフォルトの名無しさん :2006/08/29(火) 11:57:43
質問です。
今日インターンシップの事前研修にいったら「開発はVisualC++を使ってる(結構うろ覚え)」といわれました。
だけどボクのパソコンはmac…本格的なインターンシップは来週からなんですが独学でVisualC++を勉強したいんです。
macでのVisualC++を勉強する環境は無いでしょうか?

868 名前:デフォルトの名無しさん :2006/08/29(火) 12:03:33
macで仮にVC++が動いたとしても
exeを実行できないから意味が無い。

869 名前:デフォルトの名無しさん :2006/08/29(火) 12:05:14
VCじゃないと駄目なら何らかの方法でWindowsを動かすしかないわな。

870 名前:デフォルトの名無しさん :2006/08/29(火) 12:08:55
今更始めても遅い、とか酷いことを言ってみる。
macで何かしらプログラム組んでたなら、大丈夫じゃね?

871 名前:デフォルトの名無しさん :2006/08/29(火) 12:10:49
MacならEclipseでjavaとかやっとけば良いような

872 名前:デフォルトの名無しさん :2006/08/29(火) 12:27:22
Winマシンなんて3万もあれば中古でそれなりのがあるじゃん

873 名前:デフォルトの名無しさん :2006/08/29(火) 13:04:17
我が社では一万円以下の中古NotePCを取り扱っております。

874 名前:デフォルトの名無しさん :2006/08/29(火) 14:17:22
マジか!動作確認の為に3万でWin2000マシンかったのにx

875 名前:873 :2006/08/29(火) 14:38:27
正直、素人にはお勧めできない。
#知っている人は知っている、車の名前みたいな店名だw

876 名前:デフォルトの名無しさん :2006/08/29(火) 19:19:26
メニューバーを作ろうとすると、リソースヘッダの部分で、
\resource.h() : fatal error RC1004: unexpected end of file found
というエラーが出るんですがどうしてでしょうか・・・。

877 名前:デフォルトの名無しさん :2006/08/29(火) 20:36:30
>>876
RC1004 でググろうとか思わないのかい?

878 名前:デフォルトの名無しさん :2006/08/29(火) 21:24:21
プログラムでマウスの座標を変化させるにはどうすればよろしいでしょうか。

879 名前:デフォルトの名無しさん :2006/08/29(火) 21:45:09
SetCursorPos

880 名前:デフォルトの名無しさん :2006/08/29(火) 23:29:20
SDKは少し分かるのですが、MFCは全くの初心者です。
試しにボタンを押すとメッセージボックスが出るようにしようと
思ってMessageBox()を使ってみたら、エラーが出てコンパイル
出来ません。

少し分かる人に聞いたところ、CWnd::MessageBox が呼び出されている
ためとのことですが、SDKの(?)のMessageBox() を呼び出すには
どの様に記述すれば良いのでしょうか?

881 名前:デフォルトの名無しさん :2006/08/29(火) 23:33:18
::MessageBox()

882 名前:デフォルトの名無しさん :2006/08/29(火) 23:35:05
>>881
それでいけるんですか。
ありがとうございます。

afxMessageBox()は知っていたのですが、引数が違うし
しっくりこないなと思っていたんです。


883 名前:デフォルトの名無しさん :2006/08/29(火) 23:38:48
MFCやる前にC++勉強した方がいいよ

884 名前:デフォルトの名無しさん :2006/08/29(火) 23:56:00
んーまあMFCやりながらC;;勉強してもいいし

885 名前:デフォルトの名無しさん :2006/08/30(水) 01:13:27
void Draw(void)
{
//フレームレートを60にする
static DWORD NowTime,PrevTime;
NowTime = timeGetTime();
if( (NowTime - PrevTime)<1000/60 )return;
PrevTime = NowTime;

//以下いろんな処理
}

int WINAPI WinMain()
{
//いろんな処理
while(1){
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg,NULL,0,0))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
Draw();
}
}

//いろんな処理

}

886 名前:デフォルトの名無しさん :2006/08/30(水) 01:14:16
885の続き

と、ある書籍にサンプルコードがあったんですが、
PrevTime という変数は初期化もされずに使われています。
また、PrevTime = NowTime としてるんですが、
PrevTime も NowTime もDrawのローカル変数なので、
ループでDrawを呼び出す毎に変数PrevTimeとNowTimeは破棄されるから、
なんの意味もないような感じに見えるのですが・・・

この書き方じゃ、秒間60フレームにするって動作は満たせませんよね?
グローバルで宣言しないと期待の動作はしませんよね?  

887 名前:デフォルトの名無しさん :2006/08/30(水) 01:24:37
staticについて勉強してくるのがよろしいかと。

888 名前:デフォルトの名無しさん :2006/08/30(水) 01:25:24
static

889 名前:デフォルトの名無しさん :2006/08/30(水) 21:20:42
>887 888
的確なご回答ありがとうございました。

890 名前:デフォルトの名無しさん :2006/08/30(水) 21:57:02
C++/CLI入門
具具ってもなさそう

891 名前:デフォルトの名無しさん :2006/08/30(水) 22:25:27
MFCのリストビューを使っています。
リストビューのアイテムをクリックして編集しようとしています。
CListCtrl::EditLabel で編集出来るのは分かっているのですが、
一列目しか編集出来ません。

二列目以降を編集したい場合、エディットボックスを手動で
貼り付けるしかないのでしょうか?
その場合、エディットボックスに与えるべきサイズと位置は
どのようにして取得すればよいのでしょうか?

892 名前:デフォルトの名無しさん :2006/08/31(木) 00:01:10
>>891
そういうことをやった例がCodeGuruにいくつかある。
但し、高機能すぎて何をやっているのかよく判らない例と低機能で見栄えが悪い例に大別される。
まぁ、丹念に探せばそれなりのが見つかると思う。

893 名前:デフォルトの名無しさん :2006/09/02(土) 09:41:22
VC++で、ATMの画面見たくタッチパネル方式で、全画面表示&画面遷移する
アプリケーションを作りたいのですが簡単な方法はないでしょうか?

894 名前:デフォルトの名無しさん :2006/09/02(土) 09:45:13
>>893
高速道のSAや駅などにある情報端末の多くが極普通にVC++で作られている。
#只のCGIなのも多いけど。
それらは大抵、マウスの代わりにタッチスクリーンを使っているだけだ。

結論:
作るだけなら普通のアプリを作るのと変わらない。

895 名前:デフォルトの名無しさん :2006/09/02(土) 09:51:55
>>894
ありがとうございます。
タッチパネル方式というのは比喩でして、要は画面遷移をさせたいのです。
今までダイアログベースのアプリケーションしか作ったことなくて
この辺の知見がないのです。イメージとしてはSDIのクライアント領域に
コントロールが並んでいて「進む」ボタンを押すごとに画面がどんどん
切り替わっていくみたいなイメージです。。。

896 名前:デフォルトの名無しさん :2006/09/02(土) 09:54:15
>>895
つ[flash]
つ[dhtml]

897 名前:デフォルトの名無しさん :2006/09/02(土) 10:29:12
プロパティシートでウィザードにする
MFCならCPropertySheet

898 名前:デフォルトの名無しさん :2006/09/02(土) 11:07:16
同じソースから静的ライブラリ (libxxx-static.lib)と
DLL(libxxx.dll とそのインポートライブラリ libxxx.lib)
を生成するとき、それぞれのプロジェクトに同じように
ソースファイルを追加しますよね?

あるオープンソースのライブラリのソースツリーを
眺めていたら、*.cpp と *.h は静的ライブラリの方にだけ
加えれていて、動的ライブラリは依存関係で静的ライブラリ
に依存するように設定してあとはモジュール定義ファイル
libxxx.def が一つだけ追加されていたのですが、
このような方法で DLL を生成することができるのでしょうか?


899 名前:デフォルトの名無しさん :2006/09/02(土) 11:08:45
>>896
>>897
ありがとうございます。
勉強してみます。

900 名前:デフォルトの名無しさん :2006/09/02(土) 12:47:56
>>898
できる。所詮静的ライブラリはオブジェクトファイルを固めただけのようなもの。
OBJが全く無く、LIBだけでもEXE/DLLは作れる。

901 名前:デフォルトの名無しさん :2006/09/02(土) 14:08:09
>>900 マジスカ。
つーことは特に最適化とかを変えるわけじゃなければ、
まず静的なライブラリを作って、それを DLL に
変換できるってことっすか??

マジカヨとおもって >>898 で言及したライブラリを
ビルドしてみたら、DLL 用のプロジェクト
(これ自体にはモジュール定義ファイル libxxx.def
しか含まれてないけど、静的なライブラリのプロジェクト
に依存してる)からはなんにも生成されませんでした orz


902 名前:デフォルトの名無しさん :2006/09/02(土) 14:28:54
>>895
ShowWindow(SW_HIDE);
ShowWindow(SW_SHOW);

903 名前:デフォルトの名無しさん :2006/09/02(土) 18:18:27
.NET2003と2005で、一体ナニが変わったんですか?

904 名前:デフォルトの名無しさん :2006/09/02(土) 18:23:43
もっさり

905 名前:デフォルトの名無しさん :2006/09/02(土) 19:54:40
>>904 同じソースを同じ最適化オプションでコンパイルしても
できたアプリを実行すると 2005 の方が遅くなってるのは、
やっぱりマルチスレッド用のランタイムしか提供されて
いないからですか?

906 名前:デフォルトの名無しさん :2006/09/02(土) 19:58:07
以前のでシングルスレッド、マルチスレッド用のランタイム使って調べろ!

907 名前:デフォルトの名無しさん :2006/09/02(土) 20:00:49
>>905
一番モッサリしたのはIDEだがな。

908 名前:デフォルトの名無しさん :2006/09/02(土) 22:35:00
C:\Documents and Settings\Administrator\デスクトップ\test.txt

C:\\Documents and Settings\\Administrator\\デスクトップ\\test.txt
のように変換するAPIみたいなのってありますか?

GetSaveFileName関数などで取得したファイルパス名で
fopenしたいのですが

909 名前:デフォルトの名無しさん :2006/09/02(土) 22:37:18
>>908
君は何か勘違いしてる

910 名前:デフォルトの名無しさん :2006/09/02(土) 22:39:19
ソースに記述するときは、\は\で表せないから\\と記述するだけだから、
配列に入ってるものを変換してやる必要はない。

911 名前:デフォルトの名無しさん :2006/09/02(土) 22:42:53
>>908
つ エスケープシーケンス

912 名前:911 :2006/09/02(土) 22:44:18
勢いで書いた、今はヌコと遊んでいる

913 名前:908 :2006/09/02(土) 23:07:49
ああ、俺の勘違いでしたorz
ということは、GetSaveFileNameで取得したファイル名で
fopenが失敗するのは、別の原因があるってことでしょうか・・
俺の脳みそでは他に原因が思いつかないorz

914 名前:デフォルトの名無しさん :2006/09/02(土) 23:14:11
ソース

915 名前:デフォルトの名無しさん :2006/09/02(土) 23:17:31
fopenじゃなくてapi使えば無問題

916 名前:908 :2006/09/02(土) 23:19:43
ソースの一部です
OPENFILENAME ofn;
HANDLE hFile;
DWORD dwAccBytes;
char buf[MAX_BUF_SIZE];
char szFileName[255]="kakikomi.txt";
char szFile[255]="test";
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = "text(*.txt)\0*.txt\0All files(*.*)\0*.*\0\0";
ofn.lpstrFile = szFileName;
ofn.lpstrFileTitle = szFile;
ofn.nFilterIndex = 1;
ofn.nMaxFile = sizeof(szFileName);
ofn.nMaxFileTitle = sizeof(szFile);
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
ofn.lpstrDefExt = "txt";
ofn.lpstrTitle = "名前を付けて保存";

if(GetSaveFileName(&ofn) == 0)
return -1;
hFile = CreateFile(szFileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
strcpy(buf,szFileName);
FILE *fp;
fp=fopen(buf,"wb");
if(fp==NULL){
MessageBox(NULL,"ファイル作成失敗",buf,MB_OK);
return -1;
}

917 名前:908 :2006/09/02(土) 23:24:13
>>915
apiというと、WriteFileとかでしょうか
シリアライズで保存したかったのですが
fwriteを利用する方法しか知らないもので・・

918 名前:デフォルトの名無しさん :2006/09/02(土) 23:32:24
なんでCreateFileしてからfopenしてるわけ?
先にCreateFileすると、CloseHandleするまでは、そのファイルを
ロックするわけで、後からきたfopenで開けないのは当然の話。

919 名前:908 :2006/09/02(土) 23:35:20
>>918
それには気づきませんでした
早速CreateFileをコメントアウトしたら動きました
ありがとうございました!


920 名前:デフォルトの名無しさん :2006/09/02(土) 23:36:09
ネット上のRSSのXMLってInternetReadFileで普通に読めますか?

921 名前:デフォルトの名無しさん :2006/09/02(土) 23:36:50
関係ないけどstrcpyも無駄で気持ち悪い

922 名前:908 :2006/09/02(土) 23:43:35
>>921
どうもっす、削除しました

923 名前:デフォルトの名無しさん :2006/09/03(日) 04:17:38
日付の差を求めるような関数を書こうと思っているんですが
そういった機能が実装されているクラスとかって標準でありますか?

無ければSYSTEMTIME構造体のメンバを比べて
作ろうと思ってます

924 名前:923 :2006/09/03(日) 06:33:00
http://hp.vector.co.jp/authors/VA016117/date.html
このページを参考に自作して解決しました




925 名前:デフォルトの名無しさん :2006/09/03(日) 10:39:05
>>923
CTimeは?

926 名前:デフォルトの名無しさん :2006/09/03(日) 11:22:34
CDiffTimeだかCTimeDiffだか、CTimeの差分用のクラスもあった希ガス。

927 名前:デフォルトの名無しさん :2006/09/03(日) 11:32:15
CTimeSpan

928 名前:デフォルトの名無しさん :2006/09/03(日) 20:01:11
    _, ,_  スパーン
  ( ‘д‘)
   ⊂彡☆ CTime ===========================)) Span

929 名前:デフォルトの名無しさん :2006/09/04(月) 14:20:07
boost って書くと
boost 厨っていわれるからやめとくよ

930 名前:926 :2006/09/04(月) 14:39:08
>>928
秀逸な駄洒落THX。
これでもう、忘れないよ。

931 名前:デフォルトの名無しさん :2006/09/04(月) 23:51:22
上級者の皆さん
MFCの最小プログラムを書いて見たんですがもっと小さく出来るでしょうか?

#include <afxwin.h>
#define p public
class M:p CFrameWnd{p:M(){Create(0,"");}DECLARE_MESSAGE_MAP()};class A:p CWinApp{p:BOOL InitInstance(){M*w=new M;w->ShowWindow(m_nCmdShow);m_pMainWnd=w;return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;

932 名前:デフォルトの名無しさん :2006/09/05(火) 00:22:14
BOOLをintにすれば1文字減る。

933 名前:デフォルトの名無しさん :2006/09/05(火) 00:27:19
>>932
素晴らしい
それは盲点でした


934 名前:デフォルトの名無しさん :2006/09/05(火) 00:40:04
afxwin.hをa.hにリネームする又はコピーする。

935 名前:デフォルトの名無しさん :2006/09/05(火) 00:41:12
aだけでも良かったか。

936 名前:デフォルトの名無しさん :2006/09/05(火) 00:42:29
InitInstanceの中身はこういう風にできると思う。
(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);

937 名前:デフォルトの名無しさん :2006/09/05(火) 00:44:35
classをstructにすればpublicはいらなくなるね。

938 名前:デフォルトの名無しさん :2006/09/05(火) 00:50:32
>>934
リネームですか〜ちょっと反則ぎみな気もしますが一応適応
>>936
それはいけてますね

今のところ241バイト
改行コードを0dのみにするのもアリかもしれませんね

#include <a>
#define p public
class M:p CFrameWnd{p:M(){Create(0,"");}DECLARE_MESSAGE_MAP()};class A:p CWinApp{p:int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;

939 名前:デフォルトの名無しさん :2006/09/05(火) 00:53:48
>>937
!!!素晴らしい 217バイト

#include <a>
struct M:CFrameWnd{M(){Create(0,"");}DECLARE_MESSAGE_MAP()};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};BEGIN_MESSAGE_MAP(M,CFrameWnd)END_MESSAGE_MAP();A a;

940 名前:デフォルトの名無しさん :2006/09/05(火) 00:56:02
個人的にはCR ('\x0d', '\r')よりはLFの方がいいな。

ところでこういうことはできるか?
#define m(p) p##_MESSAGE_MAP
struct M:CFrameWnd{M(){Create(0,"");}m(DECLARE)};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};s(BEGIN)(M,CFrameWnd)s(END)();A a;


941 名前:デフォルトの名無しさん :2006/09/05(火) 01:01:54
CFrameWndから派生させる必要はあるのかな?
CFrameWndを直接newするのは?

942 名前:デフォルトの名無しさん :2006/09/05(火) 01:06:14
>940
発想は素晴らしいし、コンパイルも通りますが残念ながらサイズは増えてしまいました 222バイト
#include <a.h>
#define d(x) x##_MESSAGE_MAP
struct M:CFrameWnd{M(){Create(0,"");}d(DECLARE)()};struct A:CWinApp{int InitInstance(){(m_pMainWnd=new M)->ShowWindow(m_nCmdShow);return 1;}};d(BEGIN)(M,CFrameWnd)d(END)();A a;

943 名前:デフォルトの名無しさん :2006/09/05(火) 01:25:49
派生をやめてメッセージマップを削除しました158バイト

#include <a.h>
struct A:CWinApp{int InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,"");m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a;

944 名前:デフォルトの名無しさん :2006/09/05(火) 01:29:52
警告レベルの設定でC++でも暗黙のintを使えるようにするコンパイラオプションがあった気がする。

945 名前:デフォルトの名無しさん :2006/09/05(火) 01:36:29
>>944
頂きました /W4に変更することで154バイト

#include <a.h>
struct A:CWinApp{InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,"");m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a;

946 名前:デフォルトの名無しさん :2006/09/05(火) 01:39:01
ちょっと修正 153バイト

#include <a.h>
struct A:CWinApp{InitInstance(){((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0);m_pMainWnd->ShowWindow(m_nCmdShow);return 1;}};A a;

すいません、そろそろ仕事に戻ります
スレ汚しスイマセンデシタ

947 名前:デフォルトの名無しさん :2006/09/05(火) 01:39:51
CFrameWnd*へのキャストは消せないのか?

948 名前:デフォルトの名無しさん :2006/09/05(火) 01:43:25
>>947
CWndのCreateに、引数2個が無いため無理です

ああ、明日締め切りなのに遊んでしまったww

949 名前:デフォルトの名無しさん :2006/09/05(火) 01:56:01
{((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0);return!m_pMainWnd->ShowWindow(m_nCmdShow);}

あとはm_nCmdShowを諦めて、直接5 (SW_SHOW)か何かを指定するくらいしか思いつかない。

950 名前:デフォルトの名無しさん :2006/09/05(火) 02:02:31
これを思いついたが、できるかどうかはわからない。
{return((CFrameWnd*)(m_pMainWnd=new CFrameWnd))->Create(0,0,0x10CF0000);}
0x10CF0000はWS_OVERLAPPEDWINDOW | WS_VISIBLE。

951 名前:デフォルトの名無しさん :2006/09/05(火) 02:06:23
struct A:CWinApp{InitInstance(){return((CFrameWnd*)(m_pMainWnd=new CFrameWnd))

->Create(0,0,0x10CF0000);}}a;
aの部分、エラーはおろか/W4でも警告にならなかった。

952 名前:デフォルトの名無しさん :2006/09/05(火) 02:29:22
>>951
まだやってましたか!大分小さくなりましたね
struct {} a;はC言語の基礎中の基礎ですね
WindowStyleにWS_OVERLAPPEDWINDOW|WS_VISIZBLEもSDKだと基本ですね
showwindowに戻り値があることもすっかり忘れてました
いい勉強になりました

953 名前:デフォルトの名無しさん :2006/09/05(火) 16:41:04
それがC++では、型の宣言と同時に変数や関数の宣言ができなくなっていたような気がしたんだ。

954 名前:デフォルトの名無しさん :2006/09/05(火) 20:02:46
Visual Studio C++ 2005 Express EditionでC/C++の勉強をするとしたら、
お勧めの書籍はありますか?Visual Studioを使うのはこれが初めてです。

955 名前:デフォルトの名無しさん :2006/09/05(火) 20:15:13
本当にC/C++の勉強?
MFCとかDirectXとか.NETとかのC++以外の部分じゃなくて?
本当にC++なら「プログラミング言語C++ 第三版」で鉄板。

956 名前:デフォルトの名無しさん :2006/09/05(火) 20:25:52
>>955
レスありがとうございます。
C++の言語部分はおっしゃる書籍を使おうと思っているのですが、
Visual Studio自体の使い方(デバッカなど)で分かりやすい
お勧めがあればなぁ、と。

957 名前:デフォルトの名無しさん :2006/09/05(火) 21:47:57
そこまで初心者なら本じゃなくて学習ソフトでも使ったら?

958 名前:デフォルトの名無しさん :2006/09/05(火) 22:17:18
なるほど学習ソフトですか。調べてみます。Thx。

959 名前:デフォルトの名無しさん :2006/09/06(水) 14:31:45
for の初期化部分で二つ以上の変数を宣言 & 初期化したいのですが。
for 中でしか必要のない変数を for 文のスコープ外で見せたくないので。
for 文の外で宣言してさらにそれをブロックで囲めとかですか?普通。

960 名前:デフォルトの名無しさん :2006/09/06(水) 14:50:13
カンマ

961 名前:デフォルトの名無しさん :2006/09/06(水) 14:53:47
>>960 二つ以上の変数の型が違うのです。
for の中で unsigned 一つと char 一つ使いたいので。

962 名前:デフォルトの名無しさん :2006/09/06(水) 15:23:39
教えてやるんじゃなかった
Cスレで聞け

963 名前:デフォルトの名無しさん :2006/09/06(水) 15:26:13
> 普通
適切な変数名をつければ(そしてコードが長ければ適切に関数に分けていけば)
for の外で宣言しても混乱なくコードが書けると思いますぜ。
== 外で宣言しても気にしない。

まぁ 「普通」 なんて人によって違ってくるから1つの意見として。

964 名前:デフォルトの名無しさん :2006/09/06(水) 22:15:34
ブロック作ればいいじゃん

965 名前:デフォルトの名無しさん :2006/09/07(木) 01:15:16
GDI+ と、libpngで、PNGファイルを作成しましたが、
圧縮後のファイルサイズを比較したところ、
libpngの方がかなり小さくなります。

libpng は、圧縮レベルを設定できるのですが、
GDI+では、該当するパラメータを見つけられません。

本当は、GDI+で楽をしたいので、
GDI+での圧縮レベルの設定法を教えてください。

ちなみに、テストに使用しているのは、デスクトップを
キャプチャした画像です。


966 名前:デフォルトの名無しさん :2006/09/07(木) 05:25:57
>>965
pngの圧縮レベルはサイズに余り影響しないと思うのだけどね。
もしや、GDI+は32ビットカラー、libpngは8ビットカラーなんてことはない?

967 名前:デフォルトの名無しさん :2006/09/07(木) 06:25:59
メタデータが含まれてたりとかな

968 名前:965 :2006/09/07(木) 07:45:04
>>966
出来上がったファイルを右クリックしてプロパティで
確認した限りでは、両方とも8ビットカラーと表示されてます。

圧縮後のサイズは1割程度の差がつくようです。
GDI+使用時 45k
libpng使用時 39k

>>967
メタデータは意識していませんでした。
確認してみます。


969 名前:デフォルトの名無しさん :2006/09/07(木) 17:23:56
ダイアログベースのソフトを作っています.
ボタンやコンボ,picture boxを配置しています.

いま,矢印キーを押すと,pictureに表示している内容を変えたいと思っています.
OnKeyDown(nChar ,...)で
if(nChar == 0x025) hogehoge();
としていますが,これではhogehogeが呼び出されません.
ボタンへのフォーカスが動くだけです.
どうしたら,hogehogeを呼び出すことができるのでしょうか?

970 名前:デフォルトの名無しさん :2006/09/07(木) 18:15:35
>>969
PreTranslateMessage()で拾ってみたら?

971 名前:969 :2006/09/07(木) 18:41:23
できました! ありがとうございました

972 名前:デフォルトの名無しさん :2006/09/08(金) 18:39:58
質問させてください
Escapeキー→プログラムを終了
Tabキー→ボタンのフォーカス移動
の両立がしたいのですが、うまくいきません

現在、ウィンドウクラスをwc.cbWndExtra = DLGWINDOWEXTRAにして
CreateWindowで作ったトップウィンドウにボタンを2個配置しています

メッセージループで
while (GetMessage(&msg, NULL, 0, 0)) {
 if(!IsDialogMessage(hWnd,&msg)){
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}
このように記述するとフォーカス移動はできますがESCAPEはうまく動かず
逆にisDialogMessageの記述をなくすとESCAPEはOKですが
フォーカス移動がダメという状態です

メッセージループの書き方が悪いような気がするのですが
そもそも作り方自体が変なのでしょうか

973 名前:デフォルトの名無しさん :2006/09/08(金) 18:53:52
猫にでも行ってメッセージループについてが上のほうに書いてあるよ

974 名前:デフォルトの名無しさん :2006/09/08(金) 18:59:16
自分でmsgの中味みりゃいい

975 名前:972 :2006/09/08(金) 19:38:26
>>973,974
回答ありがとうございます
一応、各関数については調べました

msgの中身の見方というのは良くわからないのですが
while (GetMessage(&msg, NULL, 0, 0)) {
if(msg.message==WM_KEYDOWN){
if(msg.wParam==VK_ESCAPE)
MessageBox(NULL,"vkescape","",MB_OK);
}
if(!IsDialogMessage(hWnd,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

こういったプログラムを実行してみたところ
VK_ESCAPEの入力自体はあるようです

ちょっと、質問の仕方が下手だったので整理して
もう一度質問質問させてもらいます

976 名前:972 :2006/09/08(金) 19:52:58
972のプログラムのhWndは、
猫でもわかるプログラミングののSDK編のイントロダクションのサンプルで
wc.cbWndExtraの値を0からDLGWINDOWEXTRAにだけ変更して作成したウィンドウの
ウィンドウハンドルです
そして
CreateWindow(
TEXT("BUTTON") , TEXT("ボタン1") ,
WS_CHILD | WS_VISIBLE | WS_BORDER| WS_TABSTOP|BS_PUSHBUTTON ,
0 , 0 , 0 , 0 ,hWnd , (HMENU)100 , hInstance , NULL);
こういう感じでボタンを2つ配置しているのですが

メインのhWndをダイアログかつ、通常のウィンドウとして
扱うのは変だろうかというのが疑問点です

つまり、プログラムとしては
リソーススクリプトを作ってそこにボタンを配置して
CreateDialogでhWndを親とするダイアログをつくり

while (GetMessage(&msg, NULL, 0, 0)) {
 if(!IsDialogMessage(hWndDialog,&msg)) //←hWndからhWndDialogに
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}
こういうループにしたほうが良いでしょうか

977 名前:972 :2006/09/08(金) 20:19:44
すみません、解決しました^^;
メッセージ処理はメッセージループの中でしなければだめと
思い込んでいました

while (GetMessage(&msg, NULL, 0, 0)) {
 if(msg.message==WM_KEYDOWN){
  if(msg.wParam==VK_ESCAPE){
   PostQuitMessage(0);
  }
 }
 if(!IsDialogMessage(hWnd,&msg)){
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}

978 名前:デフォルトの名無しさん :2006/09/08(金) 23:50:51
MFCで同じようなダイアログを複数作ろうと思っています。
共通の処理は一つにまとめたいので、CDialogを継承した
自前のクラスを作り(CMyDialogとします)、このCMyDialogを
継承してそれぞれのダイアログに対応したクラスを作りたいと
考えています。

しかし、クラスウィザードでダイアログに対応したクラスを作ろうと
すると、”MFCクラス”しか選べず、自前のクラスは選べません。

この様にCDialogをそのまま使わずに継承してから使いたい
場合はどうすればいいのでしょうか?

979 名前:デフォルトの名無しさん :2006/09/09(土) 00:20:10
どうでもいいけどそのメッセージループやめれ。推奨されてない。

980 名前:デフォルトの名無しさん :2006/09/09(土) 00:38:11
>>978
クラスウィザードで作った後、自前で変えることは可能だが。

981 名前:デフォルトの名無しさん :2006/09/09(土) 00:56:47
>>980
そうなんですか?
クラスウィザードでとりあえずCDialogベースに作っておいて、その後に
手動編集で自前のクラスを継承させてもそのまま使えるのでしょうか?

その場合、編集するのは
Class MyClass : public CDialog

のCDialogを書き換えるだけで良いのでしょうか?
また、その後にクラスウィザードでメッセージ対応させた関数を作っても
そのまま使えるのでしょうか?

982 名前:972 :2006/09/09(土) 02:30:55
>>979
どの部分が推奨されてないのでしょうか
GetMessageの直後?
後はフックでもできそうだということはわかったんですが
フックは一歩間違うと致命的らしいので怖いです

ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200303/03030095.txt
ダイアログを表示するDLLでキー入力

983 名前:デフォルトの名無しさん :2006/09/09(土) 09:25:17
>>981
他にもいくつか書き換える場所あるよ。メッセージマップとか。

984 名前:デフォルトの名無しさん :2006/09/09(土) 11:48:01
>>981
>while (GetMessage(&msg, NULL, 0, 0)) {
ここじゃね?
エラー発生時に-1を返すとかだっけ?
GetMessageをMSDNで調べてみな。

985 名前:972 :2006/09/09(土) 15:46:28
>>984
多分私へのレスですよね?
MSDNにはGetMessageはWM_QUITのときのみ0
エラーが出たときは-1を返すと書いてありました
WEBにあるメッセージループはほとんどwhile(GetMessage)の形式なので
全く気づきませんでした!とても参考になりました

こんな感じに書き直してみました

int getmessage_return_value;
while(TRUE){
Getmessage_return_value=GetMessage(&msg,NULL,0,0);
if(getmessage_return_value!=0 && getmessage_return_value!=-1){
if(msg.message==WM_KEYDOWN&&msg.wParam==VK_ESCAPE)
PostQuitMessage(0);
if(!IsDialogMessage(hWnd,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else{
break;
}
}

986 名前:デフォルトの名無しさん :2006/09/09(土) 23:30:34
プログラムって英語とか数学とか分かってないときついですか?
誰か教えてください

987 名前:デフォルトの名無しさん :2006/09/09(土) 23:38:13
英語
マニュアルを読む際に日本語のものが無いまたは役に立たない場合など
英語のソースにあたることが多いので英語力は無いよりはあった方が有利

数学
基本的には論理的思考が出来れば良い
開発にかかわるプログラムの内容によっては数学の知識や物理の知識が必要


988 名前:デフォルトの名無しさん :2006/09/09(土) 23:38:56
>>986
数学は分野によるのでは?
英語は分かるにこした事はないけど、普通に書く分には簡単な単語が分かれば十分でしょ。
あとプログラム書いてて思ったのは、文章の構成能力というか、
文章を纏めるのが上手い人が書いたプログラムってのは凄く読みやすいと思ったよ。

989 名前:デフォルトの名無しさん :2006/09/09(土) 23:54:58
ネタ抜きで俺九九とか割り算までしか出来ないんですけど
プログラム組めますか?

990 名前:デフォルトの名無しさん :2006/09/10(日) 00:02:52
計算はCPUがやってくれるから

991 名前:デフォルトの名無しさん :2006/09/10(日) 00:04:58
>>989 == >>986 かな?
英語や数学うんぬん言う前に
ひとの意見に耳を傾ける能力も必要だよ

992 名前:デフォルトの名無しさん :2006/09/10(日) 00:05:56
>>989
マジレスすると、計算が苦手でも式さえ考える力があれば
計算系のプログラムもある程度は書けると思うよ。
計算するのはコンピュータだからね。
まぁ要は君の頑張り次第じゃないのかな?
まだ若いのなら今から色々本見るなり、ネットで調べるなりして頑張って勉強するといいよ。

993 名前:デフォルトの名無しさん :2006/09/10(日) 00:06:44
次スレいらないよね?

994 名前:デフォルトの名無しさん :2006/09/10(日) 00:12:57
というより、「プログラミングがやりたい!」って思って
本当に好きなら、誰がなんと言おうが頭が悪かろうがその気持ちを抑えられないでしょ、普通。
おれなんかは、決して頭も良くないし、プログラムもあまり上手くないと思うけど
凄く好きだから今だにやってるし、初めてコンソールで「Hello World!」って出した時なんか
言葉では言い表せない様な衝撃が身体に走ったけどな。好きならそんなもんでしょ?

995 名前:デフォルトの名無しさん :2006/09/10(日) 00:26:18
>>988

そうですかー学校でCの学習がはじまるんで
どうなんだろうと思いました。ありがとうございます。
とりあえず、英語は単語程度ならある程度分かるので頑張ってみます

>>991
自分>>986です。>>989は別の方ですね

996 名前:デフォルトの名無しさん :2006/09/10(日) 00:26:54
ここでいう若いんだったらって何歳くらいのことなの?20歳くらい?

997 名前:デフォルトの名無しさん :2006/09/10(日) 00:28:51
>>994
釣りにマジレス

998 名前:デフォルトの名無しさん :2006/09/10(日) 00:31:17
始めるのに年齢は関係ないよ
やる気の問題
ただ年取ってくると日常の雑務に煩わされて
だんだん遊んでる時間なくなってくるけどね

999 名前:デフォルトの名無しさん :2006/09/10(日) 00:33:27
プログラムが書けるというのは「○○語がしゃべれるようになる」
「○○語が書けるようになる」「筆が使えるようになる」
というのと同じようなもので、何を書くか、ということとは別問題。

1000 名前:デフォルトの名無しさん :2006/09/10(日) 00:36:47
1000ならチンコ切断


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