トップページ⇒tech
608コメント187KB

違法コピーソフト屋を晒すスレ

■ このスレッドは過去ログ倉庫に格納されています
0001 02/11/17 16:14ID:oq2pKPqj
違法コピー販売をしている悪徳店、露天商を晒し
社会からの鉄槌を下そう。
顔写真画像付きならなお良し!
0153デフォルトの名無しさんNGNG
>モーダルダイアログを常時浮かべて、そっからメインのビューを
>ガシガシ使役しているアプリってどうやっているんだろうか。
そんなアプリ、ないと思う……。
モーダルの意味わかってんのかな。
0154デフォルトの名無しさんNGNG
まぁメインにユーザ定義メッセージでも投げてそのハンドラで処理すればいいだけなんだけどな
0155デフォルトの名無しさんNGNG
>>182
ひらめいたのはそれか?wwww


10ヶ月の漏れがいうのもなんだが
ポインタを使えよ。
0156デフォルトの名無しさんNGNG
VC++6.0でCFormViewを基本クラスにしたSDKのアプリを作っています。
ボタンのプロパティにある「標準のボタン」を動的に変更したいのですが、

m_mybutton.SetButtonStyle(BS_DEFPUSHBUTTON,TRUE);

のように書いても他のコントロールにフォーカスが移ると、
元に戻ってしまいます。
これは、どうやるものでしょうか?
0157デフォルトの名無しさんNGNG
>>183
どこにメンバ変数って書いてんだよ
0158デフォルトの名無しさんNGNG
>>184
変更前のボタンにBS_DEFPUSHBUTTONが残ってるんじゃないか?
そいつを外したらどう?
0159デフォルトの名無しさんNGNG
>>186
レスありがとうございます。
う〜む。他に標準のボタンが無くてもダメでした。
しかし、
複数ボタンがあって、最後に押したボタンが標準のボタンになるように
しようと思っているので、ボタンが押されたときに、SetButtonStyleを
実行していたのですが、
他のハンドラ(他のコントロールにフォーカスが移ったときとか)で実行すると
うまく動きました。
どうも、ボタンのクリックで自分自身を変えるときだとダメっぽいです。
なんででしょう?
0160184NGNG
あれれ。ボタンを押すと、
リソースエディタのプロパティで設定してある状態に戻ってしまうだけみたいです。
その前に、SetButtonStyleで変更したものがすべて元に戻るようです...
0161186NGNG
>>187-188
ダイアログベースのときにはCDialog::SetDefID()やDM_SETDEFIDというのがあるが…
CFormViewではどうかなぁ。
0162デフォルトの名無しさんNGNG
DM_SETDEFIDを投げてやればいいのだが
MFCでどうやるのかは知らん
0163デフォルトの名無しさんNGNG
>>183
久々にワラタw
0164184NGNG
>>189-190
ありがとうございます。
::SendMessage(this->GetSafeHwnd(), DM_SETDEFID, IDC_MYBUTTON, 0L);
のような感じでうまくいくみたいです。
0165デフォルトの名無しさんNGNG
>>183
10ヶ月たってやっとポインタを覚えたのでポインタ言いたいだけちゃうんかと
0166183NGNG
>>185
ダイアログとビューでやりとりするんだから
メンバ変数にウィンドウのハンドル・ポインタでも保持しないと無理だろうが。
ビューとダイアログが1対1で対応してるとは限らんだろ。
それともお前はグローバル変数を使うのか?www

>>191
わからないなら黙ってろ。
0167デフォルトの名無しさんNGNG
>>194
ポカーン・・・・・・だからそのハンドル使って>>182すれって言ってんだろ。
それにViewへのポインタならAfxGetMainWnd()->GetActiveView()で取れるからダイアログにわざわざViewのポインタを渡さなくても良い。

おまえに説明すると二度手間ってことがわかった。さすが10ヶ月。
0168デフォルトの名無しさんNGNG
>>183
おまえ>>172と同レベルだな。
基本からやり直して来い。
0169183NGNG
>>195
>AfxGetMainWnd()->GetActiveView()

複数のフレームウィンドウがある場合を考慮に入れないのか?
っちうか、汎用性の高いビュークラスを作ったことないんだろうね。
いずれにしてもビューのポインタを渡した方が安全。
0170デフォルトの名無しさんNGNG
>>172より
>メインとなるウィンドウA(MFC, SDI)からモーダルダイアログBを作成。

どこに複数あるのか問いたい。
0171デフォルトの名無しさんNGNG
ハンドル渡してメッセージ飛ばした方が安全。
0172デフォルトの名無しさんNGNG
安全って・・・w
0173デフォルトの名無しさんNGNG
>>197
独自Viewのポインタ変数をダイアログに持たせるどこが汎用的なんだ?
0174デフォルトの名無しさんNGNG
思いっきりビューの型に依存してるな
0175デフォルトの名無しさんNGNG
>>197
おまえ10ヶ月たってやっと汎用性って言葉覚えたから汎用性って言いたいだけちゃうんかと
0176183NGNG
>>198
>>197を再読。

>>201
>AfxGetMainWnd()->GetActiveView()
で取得したポインタが目的のビュー(ドキュメント)とは
限らない。
0177デフォルトの名無しさんNGNG
>>204
仮にウィンドウもビューも複数あったとして、ダイアログはポインタをどう使うんだ?
まさか直接メンバ関数呼ぶわけじゃないよな。汎用性低いもんな。
0178デフォルトの名無しさんNGNG
>>172を見る限りSetFocusやSetActiveWindow使ってるんだから、欲しいのはアクティブビューのものでよいと思うんだが。
0179デフォルトの名無しさんNGNG
>>197
フレームウィンドウが複数あってもウィンドウのビューのポインタが取れるから問題ないだろ。
そのビューからダイアログ出してんだから。
0180デフォルトの名無しさんNGNG
197がどんな意味で汎用性という言葉を使ってるのか知らんが、
クラス間の依存関係を無くしてダイアログとViewを使いまわしできるように
するというなら、ハンドルを渡してSendMessageでメッセージを送るのが一番だと思うが。
つまり>>182。
>>183はどう見ても駄レスだろう。
0181デフォルトの名無しさんNGNG
>>183
ところでどのポインタをどういう風に使うんだ。
0182デフォルトの名無しさんNGNG
↓183の釣れた発言
0183デフォルトの名無しさんNGNG
「メンバ関数を呼び出す」で図星だったんだろ。
本当に汎用性って言ってみたかっただけらしいな。
0184デフォルトの名無しさんNGNG
SetTimer() を使って1sごとにエディットボックス1をOnTimer(UINT nIDEvent) 内で更新させているのですが、
これだと、他のエディットボックスに文字を打ち込もうとすると打ち込んだ文字も消えてしまいます。
どうすれば、打ち込んだ文字が消えずにすむのでしょうか?
もしくはエディットボックス1のみを更新する方法はあるのでしょうか?
0185デフォルトの名無しさんNGNG
>>212
UpdateDataじゃなくてSetWindowText使え
0186デフォルトの名無しさんNGNG
>>183
10ヶ月もやっててそのレベルじゃ完全にVBに戻ったほうがいいぞ
煽りじゃないマジレスだ
VBやってたころは「俺はできる」と思ってたんだろ?
0187江東支店NGNG
http://elife.fam.cx/a007/



0188183NGNG
>>214
誰もVC++使い出して10ヶ月なんて言ってないだろ。
MFCを使い出してから10ヶ月って事だよ。
VC++なら5年くらい前からやってんだよ。バーヤ、バーヤ。
0189デフォルトの名無しさんNGNG
汎用性意識するならメッセージだな。マルチスレッド化も楽だし。
0190デフォルトの名無しさんNGNG
>>216
それじゃなおさらヤバイだろ。
0191デフォルトの名無しさんNGNG
ワロタ
0192デフォルトの名無しさんNGNG
たしかにw
0193デフォルトの名無しさんNGNG
>>213
ありがとうございました。できました!
0194デフォルトの名無しさんNGNG
>>216
アハハ・・・(´▽`;)
0195デフォルトの名無しさんNGNG
UINT SetTimer( UINT nIDEvent, UINT nElapse, void
(CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

に渡すnIDEventの値は0以外のタイマ識別子を指定する、とヘルプには載っていますが、
一部の書籍などでは、0を指定すると未使用のタイマ識別子が返される、とあります。
特に普通にOnTimer()を使用するなら、はじめから0を指定して、あとでKillTimerするときは、
返された値を使うのが簡単なように思うのですが、この考えっていけないのでしょうか?

VC++6.0(SP5)、OSはWin2000もしくはXPです。
0196デフォルトの名無しさんNGNG
どの辺が簡単になるんだべ?
0197デフォルトの名無しさんNGNG
nIDEventの値がシステム任せにできる。

0198デフォルトの名無しさんNGNG
MSDNライブラリなんかだと、SetTimer()の戻値って、
「正常終了した場合は、新しいタイマのタイマ識別子を返します。」
ってなってるけど、SetTimer(1,500,NULL)とかって指定しても、
戻値が2とか3とかもありえるってことでしょ?
だったら、はじめから0を指定して、戻値をUINTで保存しておいて、
いらなくなったらKillTimer()したほうが合理的に感じるけど。
タイマーひとつ使うとき限定だけど。
0199デフォルトの名無しさんNGNG
ありえねーよ
0200デフォルトの名無しさんNGNG
>>227
荒らしか。つぎ!!
0201デフォルトの名無しさんNGNG
一部の書籍ってどれよ?
0202デフォルトの名無しさんNGNG
もしかしてシステムがタイマIDを決めてくれるって、
>If the function succeeds and the hWnd parameter is NULL,
>the return value is an integer identifying the new timer.
これのことか?::SetTimerの英語版MSDNだけど。
これによればタイマIDに0じゃなくて、ウィンドウハンドルにNULLを渡せば、
ってことになるけど。
0203デフォルトの名無しさんNGNG
SetTimer(1〜
KillTimer(1)

の方が余程楽だとおもうんだが・・・
0204デフォルトの名無しさんNGNG
Windows95APIバイブルに書いてあるね。どっちが正しい?
0205デフォルトの名無しさんNGNG
そら最新のドキュメントの方が・・・
0206デフォルトの名無しさんNGNG
>>231
SetTimer(1〜で1以外の値が生成されて返ってきたら、KillTimer(1)は失敗する。
SetTimerの戻値は保存するべきでしょ。普通。
0207デフォルトの名無しさんNGNG
あら?
SetTimerって仕様が変わったの?
今、SetTimer(0, ...)ってやったら1が返ってきた。
これは古い仕様?
0208デフォルトの名無しさんNGNG
nIDEventに0を指定するとSetTimer()は成功するのか。
0以外の値を指定しなさいってなってるよね。
これってもしかして裏技?
0209デフォルトの名無しさんNGNG
明らかに0以外を渡せって書いてあるんだから0以外を渡すべきだろう。
0210デフォルトの名無しさんNGNG
その一部の書籍を窓から投げ捨てろって事でよろしいか?
0211デフォルトの名無しさんNGNG
一番確実なのは0以外を渡して戻り値をチェックだな。
0212デフォルトの名無しさんNGNG
>>237
0を渡しても大丈夫と言う事実には目をつむれと・・・
0213デフォルトの名無しさんNGNG
>>238
明日、ちり紙交換屋が大繁盛(w
0214デフォルトの名無しさんNGNG
0以外ってことは、負値でもいいんだね!!
0215デフォルトの名無しさんNGNG
このIDって論理的値?
例えば100000なんて指定しても動作保証されるのかな?
0216デフォルトの名無しさんNGNG
>>239
1を渡して駄目なら2。
2を渡して駄目なら3。
3を渡して駄目なら4。
  :
  :
  :

SetTimer()をやるたびにこんなロジック組めないよ。
大体IDの上限値が明示されて無いし。
0217デフォルトの名無しさんNGNG
SetTimerの戻り値が駄目なパターンってどういう場合?
0218デフォルトの名無しさんNGNG
>>245
0が返ってきたら失敗。
0219デフォルトの名無しさんNGNG
>>244
これに限らず関数使うのに戻り値のチェックやるのは当然だと思うが・・・
つか上限っていうかUINTの範囲だろ
0220デフォルトの名無しさんNGNG
>>240
つむらなくてもいいがもし動かなくても文句も言うなってこった
0221デフォルトの名無しさんNGNG
大体1を渡せば成功するのはわかっているのだが、
だからといって1と決めうちしちゃっていいものなの?
(まあほとんど99.9%ぐらいは成功するだろうが。)
UINTの範囲だと、IDの管理自体をコーディングでやらんといけないわけよね。
0222デフォルトの名無しさんNGNG
>>247
パラメータがUINTでも2バイトまでしか許容して無いのもあるし。

しかし、SetTimerのIDはUINT_PTRだから、ハンドルやポインタなどの一意の識別氏を使用してタイマーを作成することも考慮されているだろう。
SetTimerが失敗する状況はわからないが、IDが不正ということは無いだろうから一度失敗したからIDを変えてもう一度ためすというのは不毛だと思う。
0223デフォルトの名無しさんNGNG
SetTimer()って簡単そうで、明確な使い方を答えられるものはいないと
言うことでおしまいでいいですか?
0224デフォルトの名無しさんNGNG
>>250
いや別に再度試すかどうかはそのプログラムの仕様によるだろ。
0225デフォルトの名無しさんNGNG
>パラメータがUINTでも2バイトまでしか許容して無いのもあるし。

将来の拡張性を考慮して?
0226デフォルトの名無しさんNGNG
だから、
m_TimerID = SetTimer( 1, ...);
if( m_TimerID != NULL)
{
  KillTimer(m_TimerID);
}
で宜しいか?
0227デフォルトの名無しさんNGNG
>>254
よろしいってば。
0228デフォルトの名無しさんNGNG
結局、みんな想像でしか言っていない(w
動いてるのは偶然と言うかたまたまということだ。
0229デフォルトの名無しさんNGNG
>>256
おまえさっきから茶々入ればかりだな
0230デフォルトの名無しさんNGNG
よろしくないよ
SetTimer( 1,...);
ってことはCWnd::SetTimerだと思うが、
このメソッドはHWNDを渡すから戻り値はタイマーIDじゃない
0231デフォルトの名無しさんNGNG
>>254
でも、なんか釈然としないよな。
SetTimer()の戻値が必ずしも1と言うことでなければ、
最初から1なんて指定しないで、システムに勝手にIDふってくれ、
戻値であとで殺すから、という使い方にしたい。
だったら0のほうが俺は好き。
0232デフォルトの名無しさんNGNG
>>258
・・・・え?何言ってんの?
0233デフォルトの名無しさんNGNG
>>258
関数が成功すると、新しいタイマー ID が返ります。関数がタイマーの作成に失敗すると、0 が返ります。

って書いてあるよ。
0234デフォルトの名無しさんNGNG
私が試してみると、
CWnd::SetTimer(1,1000,NULL);
の戻値は1でした。タイマーIDがそのまま返ってきた・・・
0235258NGNG
俺なんかずれてた?

MSDNより
> If the function succeeds and the hWnd parameter is not NULL, then the return value is a nonzero integer. An application can pass the value of the nIDEvent parameter to the KillTimer function to destroy the timer.

この関数が成功すると、hWndがNULLでないときは非0が返ります。
アプリケーションはnIDEventに渡した値を使ってKillTimerを呼び出してタイマーを削除することが出来ます。
0236デフォルトの名無しさんNGNG
>>259
まぁIDに0を渡してもエラーにならないのは釈然としないが、
ドキュメントに明記してある以上、0以外のUINTを渡して、
戻り値を保存してそれを識別用に使うのが、動作的にも
ドキュメント的にも確実だろう。
0237デフォルトの名無しさんNGNG
>>262
そりゃもうわかりきってるんだってば。
今話してるのは、0を渡しても1(成功値)が返ってくることの謎と、
1を渡しても1以外の値が返ってくる可能性はあるのかってことだ。
0238デフォルトの名無しさんNGNG
>>263
その非0がタイマーIDなんじゃないのかしら。
それってCWnd::SetTimer()じゃなくて::SetTimer()1の説明かと。
0239258NGNG
>>266
うん、そうだけど。
MFCのソースは
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
lpfnTimer); }

なんだよねぇ。
どっちのドキュメントも正しいとしたら、思いっきりアンドキュメントな動作を利用してくれちゃってる、なんかムカつく。
0240デフォルトの名無しさんNGNG
関数が成功すると、新しいタイマー ID が返ります。関数がタイマーの作成に失敗すると、0 が返ります。

の「新しいタイマー ID が返ります。」の正確な意味が知りたい。
0241183(本物)NGNG
>>207
お前全然わかってねぇな。どのビューから呼び出したって
>AfxGetMainWnd()->GetActiveView()
で取れるポインタじゃ同じビューしか操作できねーだろうが。
複数のフレームに同じビューがあり違うドキュメントを表示すること
だってあるだろ?ちったぁ考えろ。

>>209
ポインタ使ってPostMessageでもSendMessageでもすればいいじゃないか。

>>216 != 183
騙りまでして、必死だなwww
0242デフォルトの名無しさんNGNG
というか日本語版にはCWnd::SetTimerのも::SetTimerのも戻り値はIDだと明記されてる。
0243デフォルトの名無しさんNGNG
>>269
はい、バカが醜態晒しに来た。
>ポインタ使ってPostMessageでもSendMessageでもすればいいじゃないか。
これじゃ>>182の通りだろ。だから>>183は駄レスだって言われんの。
0244デフォルトの名無しさんNGNG
::SetTimer()のプロトタイプは、

WINUSERAPI
UINT
WINAPI
SetTimer(
HWND hWnd ,
UINT nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc);

となっている。
0245デフォルトの名無しさんNGNG
>>271
放置よろしこ
0246デフォルトの名無しさんNGNG
>>269
おい、汎用性はどこ行った?(苦笑
0247183(本物)NGNG
>>271
>>195嫁。
0248デフォルトの名無しさんNGNG
誰かインシデントを消費してSetTimerの動作を問い詰めてくれる神はいないのか?
0249デフォルトの名無しさんNGNG
結論出そうに無いから、
UINT m_TimerID=SetTimer(1, ...);
if(m_TimerID)
{
  KillTimer(m_TimerID);
}
でいっとくかな・・・
テスト十分にして問題なければ、これでいいでしょ。
0250デフォルトの名無しさんNGNG
>>275
その前に>>183を説明してみ。
0251デフォルトの名無しさんNGNG
>>276
オレもそう思った(w
0252デフォルトの名無しさんNGNG
>>276
インシデントを消費するに値する問題かどうか悩む〜。
■ このスレッドは過去ログ倉庫に格納されています