Windows Programing for C/C++(Not MFC)
■ このスレッドは過去ログ倉庫に格納されています
00011
NGNGWindowsプログラムを作るにあたって、API以外の疑問や質問を
ぶつける為に作りました。
自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。
あ、自分の開発環境はVisualC++でMFCを使ってないので
C/C++でMFC無しの方向でお願いします。
0237デフォルトの名無しさん
NGNGexit_dialog()
{ if( modal ) EndDialog();
else DestroyWindow();}
みたいな仕掛けを作らないんだろう
)
0238デフォルトの名無しさん
NGNGmodalかどうかって、どうやって判定するのでしょう?
0239デフォルトの名無しさん
NGNG>modalかどうかって、どうやって判定するのでしょう?
modalってどうやって取得するのでしょう?
create時にフラグ立てる? 糞だろし。
0240デフォルトの名無しさん
NGNG> いつも気にしながら組むのが馬鹿らしいんで、どんな時でも
> DestroyWindow使い、戻り値返したい時だけWM_DESTROY処理時に
> EndDialog使おうかと思ったんだけど。
PostQuitMessageはどうしよう。
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNGEndDialogはいつ使うのだ?
0243デフォルトの名無しさん
NGNGWM_DESTROYの中でEndDialogって、そんなムチャな。
動いてるから問題ないって、プログラマの言うことじゃないよう……
そんなにモーダルとモードレスで分けるのがイヤだったら、
MFCみたいに全部モードレスの世界にしてしまえばいいナリよ。
見た目モーダルっぽくても実体はモードレス。これ。
0244デフォルトの名無しさん
NGNGしかし、Windows 2000やXPのモーダルダイアログを
開いている最中にオーナーウィンドウをクリックすると
ダイアログが点滅するというサービスが受けられなく
なるという諸刃の剣。
0245236
NGNGプログラマの言うことじゃないけど、実際動いてるんだもの・・・・。
全部モードレスですか、にゃる。
でも、if ( modal ) が出来ればよさげ。
本当に出来るんでしょうか?
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGで、Create で作成されたか、 DoModal で作成されたかチェックしておけばいいかと。
0250248
NGNGATL実装の例
class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
enum{ IDD=IDD_DIALOG1 }; // ダイアログリソースのID
BEGIN_MSG_MAP( CMyDialog )
COMMAND_RANGE_HANDLER( ID_OK, ID_CLOSE, OnCloseCmd )
END_MSG_MAP()
private:
OnCloseCmd( WORD, WORD wID, HWND, BOOL& )
{
if( m_bModal )
return EndDialog( wID );
else
return DestroyWindow();
}
};
使うとき
CMyDialog myDlg;
myDlg.Create( hWnd ); // モードレス
myDlg.DoModal(); // モーダル
0251デフォルトの名無しさん
NGNG0252236
NGNGGetWindowLongとかで情報取得出来るのかなあと思ってたのでした。
基本的に自前でグローバルなフラグをセットね。了解。
250氏、エレガントです。
0253デフォルトの名無しさん
NGNG直接キーを追加して増やした環境変数を、一度ログオフしなくても
有効にすることってできますか?
システム→詳細→環境変数で追加した場合は、ログインしなおさなくても
有効になっているようなので、できそうなのですが・・
0254デフォルトの名無しさん
NGNGどういう物でしたっけ?
0255デフォルトの名無しさん
NGNG参考文献を売ってゲイツが設ける為。
0256デフォルトの名無しさん
NGNGMicrosoft Press の書籍はともかく、他社の書籍だと MS には金入らんぞ。
っつーか、べつに Win32 プログラミングが複雑ってわけでもなかろう。ウィンドウ
システム絡みだと覚えることは増える (X Window System や MacOS だって
参考文献積んだら結構な厚さだ)。
0257デフォルトの名無しさん
NGNGXやMacOSは情報があまり無いから良いけど、
Winは本によって言ってることが違ったりで読者が惑わされる
0258デフォルトの名無しさん
NGNG黙って Petzold 読んどけ
0259デフォルトの名無しさん
NGNGWM_SETTINGCHANGEを投げる
具体的なパラメータはWM_SETTINGCHANGEの説明に書いてある
でもWin2kSP2では聞かなくなっているという噂
0260デフォルトの名無しさん
NGNGwww.engrish.com に投稿したくなって来た
0261デフォルトの名無しさん
NGNGさらしageたくなって来た
0262デフォルトの名無しさん
NGNGダイアログテンプレートのエレガントな使用方法を示せ。【10点】
0263デフォルトの名無しさん
NGNGおまえむかつくから教えない。
0264デフォルトの名無しさん
NGNG教えないんじゃなくてワカランのだろ(w
小学生か。
0265デフォルトの名無しさん
NGNGsageでしかも「(w」かあ。なんかいっぱいいっぱいだね。
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG今日はじめて構造体のメンバにも関数を入れられることを知りますた
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGかなりの粘着君だな。
0270デフォルトの名無しさん
NGNGhttp://www.m-w.com/cgi-bin/dictionary?book=Dictionary&va=programing
http://www.dictionary.com/cgi-bin/dict.pl?db=*&term=programing+
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGか
「Windows Programming by C/C++(Not MFC)」
なんでないの?
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGもしかしてこれって積んでるメモリ量に依存?
あと、合計2Gぐらいまでしか確保出来ないんだけど、これはWin98だから?
0276デフォルトの名無しさん
NGNGそれはわからんが、
> あと、合計2Gぐらいまでしか確保出来ないんだけど、これはWin98だから?
これはそう。確かWin9xのアドレス空間ははカーネル2GBユーザ2GBだと思った。
0277デフォルトの名無しさん
NGNGAPI は何を使ってる? 確かデフォルトのヒープは 128MB ぐらいしかないが、
HeapCreate() でヒープを作っておけば 1.n GB まで行けるとか聞いた覚えが。
0278デフォルトの名無しさん
NGNGデフォルトのヒープは勝手に伸びるからそれは違う。
HeapAlloc自体の制限。
0279デフォルトの名無しさん
NGNGこれから勉強しようと思っているのですが仕事で使うわけではないので
生産性は一切気にせずに自由度の高い方を勉強したいのですが
0280デフォルトの名無しさん
NGNG両方使え。
0281デフォルトの名無しさん
NGNGMFCにできないことはない
0282mother fucker condemned
NGNG0283デフォルトの名無しさん
NGNG開発環境がWin2kで、Unicode専用でプログラム組んで半分くらい完成したので、
知り合いにテストしてもらったところWin9x系が全滅。。
Unicodeが使えないなんて知らなかった(汗 ←駄目グラマ
CreateWindowExWすら動かないなんて。。 首つるしかないぽ。。
0284デフォルトの名無しさん
NGNG手直ししなさい
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNGMSLU入れろやゴルァというメッセージを出して終了するとか
Microsoft Layer for Unicode
http://www.microsoft.com/globaldev/articles/mslu_announce.asp
0287デフォルトの名無しさん
NGNGその前に、プログラム起動時に DLL のシンボル解決に失敗してダイアログが
出てしまいそうな予感。
0288283
NGNG最初unicows.libがどこにも見つからなくて戸惑いましたが、
最新SDKにunicows.libが入っててリンクしたらWin98でも動きました。
微妙に見た目が違うけど、動いたから十分満足です〜
>>284-287さんありがとうございました!
0289デフォルトの名無しさん
NGNGUnicode APIは(というかNT 3.5までにあったものは全部)9xでも
ERROR_CALL_NOT_IMPLEMENTEDを返すだけのスタブがあるから
大丈夫
0290デフォルトの名無しさん
NGNGリソースエディタはコントロールに 1001 以上、メニュー項目に 40001 以上
の ID を割り当てるようですが、安全な範囲って 0 〜 1000 だけなんでしょか?
メッセージの WM_USER や WM_APP のような標準的なルールってないものでしょうか?
0291デフォルトの名無しさん
NGNG因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
0292デフォルトの名無しさん
NGNG物を作ろうと思っているのですが、
HPなどのアドレスは事前に分かっているとして、(例えばLvは0065e43c)
どのようにすれば他アプリケーションの値を取得できるのでしょうか?
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGそこからどうやって特定のプロセスに絞り込むのでしょうか?
例えばメモ帳がいくつか開いていて、そのうちに一つだけ
という場合はどのようにすればよろしいですか
0295デフォルトの名無しさん
NGNG> そこからどうやって特定のプロセスに絞り込むのでしょうか?
絞り込むというからには何らかの基準があると思うが、それは何?
0296デフォルトの名無しさん
NGNGみなさんの所もそうですか?
0297デフォルトの名無しさん
NGNGしぬんじゃねーの?
0298デフォルトの名無しさん
NGNG自分でライブラリ久米
0299名無し@沢村
NGNGいろいろなボタンをクリックしたときに、そのボタンに応じたハンドルを取得できますか?
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG俺は ATL/WTL が好きだ。
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNGWM_LBUTTONDOWNなどで得られる座標(LOWORD(lParam),HIWORD(lParam))は
ウィンドウ左上からの相対座標で型はWORD(符号なし16ビット整数)ですよね。
マウスポインタがウィンドウよりも左(あるいは上)に行った場合
得られる座標がとんでもない値(USHRT_MAX??)になるのですが
何か解決する流儀みたいなものはあるのでしょうか?
0304デフォルトの名無しさん
NGNG型はWORDと違うよ。
0305303
NGNG0306303
NGNG16ビット符号付き整数にキャストした上で
32ビット符号付き整数にキャストするただのマクロなんですね・・・。
0307デフォルトの名無しさん
NGNG↓の説明と完全逆じゃねぇ?(参照先MFCのでスマソ)
http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_cricheditctrl.3a3a.setsel.htm
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311名無し@沢村
NGNG例えばタグで<BGSOUND SRC="aa.mld" LOOP="-1" >と指定したらホームページから携帯の着メロディが流れてくるようにしたいんですよ。でもプラグインなんてつくったことないし、Internet Explorerのプラグインをつるにはどうすればいいか教えてください。
あ、その前にwindouw板の普通のmldプレイヤーをつくるほうが簡単そうだから、先につくろうっと…。
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNGstatic 変数やらグローバル変数やらがほぼ使えなくなりますが、うまく回避する
方法はありますか?
メモリを動的に確保して GetWindowLong(GWL_USERDATA) に放り込むしかない
ですか?
0314デフォルトの名無しさん
NGNGそれしかないでつ。
ただ、データの個数が少ないのなら、メモリ確保せずに
ウィンドウデータに直接放り込む方法もある。
WNDCLASSのcbWndExtraに 4*N の値を指定しておけば、
GetWindowLongで 0 〜 4*(N-1) までを好きに使えるようになるよ。
0315313
NGNG格納したいのはそれなりの長さのテキストとその他なので、cbWndExtra は諦めます。
0316デフォルトの名無しさん
NGNG文字列を返す、という事をやりたいのですが、どうもうまく行きません。
ウィンドウプロシージャでこれらのメッセージを捕まえようとしても、外部プロセス
からの SendMessage() では普通にテキスト設定/取得されてしまいます。
(ウィンドウプロシージャにメッセージが届いていないようです)
一方、プロセス内部からの SendMessage() では、きちんとウィンドウプロシージャ
にメッセージが届き、期待通りの動作をします。
何がいけないのでしょうか。
LRESULT CALLBACK StringGiverWindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
static LPCSTR GivingText = NULL;
switch(Message)
{
case WM_CREATE:
GivingText = (LPCSTR)((CREATESTRUCT *)lParam)->lpCreateParams);
break;
case WM_GETTEXT:
if(lParam && GivingText)
return (LRESULT)strncpy((LPSTR)lParam, GivingText, (size_t)wParam);
break;
case WM_SETTEXT:
break;
default:
return(DefWindowProc(hWnd, Message, wParam, lParam));
}
return 0;
}
0317デフォルトの名無しさん
NGNG回答が得られなかったので、こちらで質問させていただきます。
少しお聞きしたいのですが、
WindowsXPproでユーザーアカウントの画像を
ランダムに変更するプログラムを作りたいんですよ。
それでレジストリ書き換えて
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Hints\(ユーザー名)\PictureSource)
C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\ユーザー名.bmp
のフォルダに画像を生成させるとこまではできたのですが、
そのあと表示を更新させる方法がわかりません。
手動でなら、
コンパネ→タスクバーのプロパティ→スタートメニューのカスタマイズ
を開いて全てOKでとじれば更新されるのですが・・・。
どなたかご存じの方がいらっしゃれば宜しくお願いします。
0318デフォルトの名無しさん
NGNGファイル名と他アプリケーションのウィンドウハンドルがわかっているときに、
その他アプリケーションにファイルをドロップしたことにするような
メッセージを送りたいんだけど、可能でしょうか。どうやればいいんでしょうか。
0319デフォルトの名無しさん
NGNGメッセージを送ればいいだけだが、いったい何を聞きたいのかわからん
注意点はプロセスメモリーの排他制御で文字列ポインタの扱いに気を付けるくらい
0320デフォルトの名無しさん
NGNGWM_DROPFILES を送りたいって話だろ。
方法は漏れも知りたい。
0321デフォルトの名無しさん
NGNGhttp://www7.big.or.jp/~hina/zidney/programing/wm/wm_dropfiles/
0322318
NGNG>>319
書き方が悪くてすみませんでした。
ドロップを受けるときはメッセージとして受けるので、
ドロップさせるときもそのメッセージを送ればいいんだろうと思ったんですが、
その先どうしたらいいのかわからなくて。
>>320
そうなんです。ありがとうございました。
318を書いた後
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/messages/wm_dropfiles.asp
まではたどり着いたんですが、結局HDROPの正体がわからなくて。
>>321
これです。ありがとうございます。
目的もここの方と一緒です。早速試してみます。
0323320
NGNGおお。
でも、将来 HDROP の実装が変わったりしてたらイヤだな・・・。
OS バージョンのチェックでも入れればいいのか。
0324316
NGNG0325デフォルトの名無しさん
NGNGVC++6.0を使ってプログラムを作成しているのですが、
最近は自前の関数群が色々なアプリに使いまわせるようになって良い気分です。
ですが使っていない関数までコンパイルしてしまっている(ひとつのcppファイルに色々な関数が書いてあるので)のが
気になります。
これはVC++が自動判断して除外してくれているものなのでしょうか。
0326デフォルトの名無しさん
NGNG.obj 単位でリンクされるみたい。
だから、関数単位に分割コンパイルして、.lib を作るといいんじゃない?
0327デフォルトの名無しさん
NGNG関数単位のリンクが出来る。
ビルドオプション見てみ。
あと使い回すならライブラリにしとけ。
0328325
NGNGlibですか。静的リンクとかいう奴ですね
あれなら使わない関数はリンクされずに済むのですか?
そうならすごい便利だと思います
0329デフォルトの名無しさん
NGNG0330327
NGNGライブラリにするかどうかとは関係ない。
使い回すならライブラリにしておくと便利なだけ。
オプション設定しておかないとobj(cpp)単位でリンクされる。
libはobjまとめてるだけだから。
0331デフォルトの名無しさん
NGNG>関数単位に分割コンパイルして、.lib を作るといいんじゃない
>関数単位に分割コンパイルして
>関数単位に分割
OK?
0332デフォルトの名無しさん
NGNGオプションでできるのに関数単位に分割して・・ってことが知ったかってことでは?
0333bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGリンクするときに参照されてないシンボルを検索するんだから、変数が参照されていれば削除はされないだろ。
大体、コンパイルされた段階でその関数と変数は別のところにある。
0336名無し@沢村
NGNGでもあともう一歩なんです…!
もう一歩というのは、トラック2つでもシングルトラックを鳴らすのに比べて、速度が半分に落ちるし、鳴り方もぎこちないんです…。
これがそのコードですが、あとどこを直せばいい…?
教えてくだされ〜♪
for(i=0;i<=i_Sum_Track[i_longest_Track];i+=2)
{_Time= timeGetTime();
for(l=0;l<16;l++)
{t[l]=0;
for(j_i=0;j_i<Onpu_Index[i_longest_Track];j_i++)
{k[l]=j[l]*8;
if(CodeCount[l]!=0)
{if(i==t[l])
{midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000));
midiOutShortMsg(hMidiOut, (DataCode[l][k[l]]) + (DataCode[l][k[l]+1] * 0x100)+(DataCode[l][k[l]+2] * 0x10000)); // Note On
}
t[l]+=DataCode[l][k[l]+3];
if(i==t[l])
{while (Play_Tempo(DataCode[l][k[l]+3])>=timeGetTime()-_Time);
midiOutShortMsg(hMidiOut,(DataCode[l][k[l]+4])+ (DataCode[l][k[l]+5] * 0x100)+(DataCode[l][k[l]+6] * 0x10000)); // Note Off
j[l]++;
}}}}}
■ このスレッドは過去ログ倉庫に格納されています