Win32API 質問箱 Build4
レス数が1000を超えています。これ以上書き込みはできません。
0001CreateThread
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
Win32API【2】
http://pc.2ch.net/test/read.cgi/tech/1006783012/ (dat落ち)
Win32API 質問箱 Build3
http://pc.2ch.net/test/read.cgi/tech/1017072275/l50
参考
MSDN Online
http://www.asia.microsoft.com/japan/developer/
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG乙
>>2
氏ね
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG乙カレー
0006デフォルトの名無しさん
NGNG「そのキーにサブキーがある場合は失敗します」って書いてあったんですけど、
何度やってもどうもサブキーごと消してくれちゃうんですよね。
いや、実はその方がありがたいんですけど。
こういう動作をするものだと思ってていいのでしょうか?
これ出来上がったら配布しなきゃならないものでちょっと心配です。
あ、私の環境はWin98です。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG9xでは成功するけどNTでは失敗します。
0009デフォルトの名無しさん
NGNGRegDeleteKey
Windows 95: 指定されたレジストリキーとそのサブキーを、すべて削除します。
Windows NT: 指定されたレジストリキーを削除します。サブキーを持つキーを削除することはできません。
ちゃんとMSDNに書いてある…
00106
NGNG今調べてみたんですけど、双方の違いがよくわかりませんでした。
どう違ってなぜそちらの方が良いのか教えてもらえると助かります。
>>8-9
どうやらそのようですね。(今MSDN見てきました)
調べ方が甘かったようです…。
おかげで助かりました。
みなさんありがとうございました。
0011デフォルトの名無しさん
NGNGあるツールで、指定したディレクトリ以下のすべてのファイルとディレクトリをスキャンするような部分があります。
従来は単純にスキャンしたファイルの数を表示していたのですが、
上司から「次のバージョンからプログレスバーを付けて、処理状況をグラフィカルに表示するように」と言われました。
ファイルの数は少ないときでは数個、多いときでは数千個になると思います。
こういう場合は、どのようにするのが一般的なのでしょうか?
0012デフォルトの名無しさん
NGNG2 エクスプローラのように、ゲージいっぱいで作業を続けてお茶を濁す
0013デフォルトの名無しさん
NGNG> 今調べてみたんですけど、双方の違いがよくわかりませんでした。
NTでもサブキーがあっても削除できるじゃん
0014どはまり
NGNGMSDNに「コピー先のデバイスコンテキストに対して、伸張、圧縮、回転のいずれかが実施されます」
とあるのですが、BitBlt(dcDst, 0, 0, 100, -100, dcSrc, 0, 0)
とやっても、Y軸に対して反転しませんよね?
0015デフォルトの名無しさん
NGNG0016どはまり
NGNGsrcDCとdstDCの座標を重ねて考えたとき、
BitBltは平行移動で、
StretchBltは座標変換という理解であってますか?
0017デフォルトの名無しさん
NGNG両者の違いは「転送先のビットマップの幅と高さ」を指定するかしないか。
StretchBltでは転送先の幅と高さに負数を与えるとビットマップが反転する。
まあ色々と実験してみてくれ。
0018またもや
NGNG戻り値として指定したスキャンライン数が返ってくるのですが、バッファー内には0しかない…
ZeroMemoryせずにデバッグしてみたら、GetDIBitsで0で埋められているようです。
だれか、同じ事経験した方いませんか?
MSDN調べまくったのですが、わからない。
0019デフォルトの名無しさん
NGNGじゃあ、探すディレクトリの直下のディレクトリ数を調べて、それで進行状況を出す。
直下に5個のディレクトリがあったら、それぞれ調べるごとに 20% ずつ進むことにする。
0020デフォルトの名無しさん
NGNGGetDIBits使ったことがないんでアレなんだが、考えられそうなのはこれくらいか。
・GetDIBitsの引数を正しく指定しているか?
・ビットマップをデバイスコンテキストに選択していないか?
GetDIBitsって拡張エラー情報返さねぇのかな・・一応見てみてくれ。
0021デフォルトの名無しさん
NGNGレスありがとうございます。
エラーだと0が返るんですが、エラーにはなっていないようです。
ただ、どうも渡しているビットマップがおかしいようです。
ウィンドウに表示されている内容をファイルに落としたいのですが、
hDC = GetDC(..)
hMemDC = CreateCompatibeDC(hDC)
bitmap = CreateCompatibleBitmap(..)
BitBlt(hMemDC, ..., hDC)
GetDIBits(hMemDC, bitmap...)
とやっているのですがSelectObjectでbitmapを選択していないと0だけだし、
SelectObjectしているとちょっとだけゴミがはいります。
0022デフォルトの名無しさん
NGNG正しく、真っ黒い画像が得られたとか。
0023デフォルトの名無しさん
NGNG> BitBlt(hMemDC, ..., hDC)
何これ
0024デフォルトの名無しさん
NGNGメモリDCにちゃんと描画されてないとか。
hDC = GetDC(..)
hMemDC = CreateCompatibeDC(hDC)
bitmap = CreateCompatibleBitmap(..)
// ここでSelectObject(hMemDC, bitmap)してるか?
BitBlt(hMemDC, ..., hDC)
// ここでSelectObjectで選択を解除し、以前のビットマップに戻す
GetDIBits(hMemDC, bitmap...)
0025デフォルトの名無しさん
NGNGMSDNによると選択中のビットマップではいけないとあるのですが…
SelectObjectで作ったビットマップを指定しないと何も返らないので、SelectObjectしていて、
元のオブジェクトをSelectObjectして、指定解除するのが無かったためですた。
どうもありがとうございました。
ついでといっては何ですが、もう一つ教えてください。
BITMAPINFOHEADERのbiCompressionなどにBI_JPEGやBI_PNGというのがありますよね。
このビットマップ形式でも表示できるということかと思うのですが。
さて、逆にJPEGやPNG形式で取得というのは可能なのでしょうか?
0026デフォルトの名無しさん
NGNG結局GetDIBitsはダメだったのか?報告キボン
BI_JPEGとかBI_PNGは新しいOS(98, 2000以降)でしか
使えないみたいだから俺は知らない。あとは自分で調べるか
知ってるやつが来るまで待つか。
0027デフォルトの名無しさん
NGNG> 結局GetDIBitsはダメだったのか?報告キボン
おかげさまで、イメージの取得に成功しました。
親切な皆さんのおかげです。ありがとうございました。
BitsPerPixelが16bitや32bitでも取得できましたし、BI_BITFIELDSで
5:6:5マッピングも正常に動きました。
> BI_JPEGとかBI_PNGは新しいOS(98, 2000以降)でしか
> 使えないみたいだから俺は知らない。あとは自分で調べるか
やってみた限りでは、「パラメータが間違っています。」というエラーになるのですが…
私が指定しているパラメータの性もあるので、
> 知ってるやつが来るまで待つか。
です。
0028デフォルトの名無しさん
NGNG感じでMSDNに書いてあるけど、どうなんだろ。
前ここで質問したけど、誰も知らなかったですねぇ(´・ω・`)
0029デフォルトの名無しさん
NGNG以下のように取得すると、ダイヤルアップの設定は取れるのですが、LANの設定が取れません。
PCにLANカードが3枚指してあるので、RasEnumEntriesだとインターネットにつながっている
ルーター/PCとのコネクションを取得したいのですが。
RASCONN *rasconn = new RASCONN[1];
DWORD cb = sizeof(RASCONN);
DWORD connections;
rasconn[0].dwSize = sizeof(RASCONN);
DWORD code = ::RasEnumConnections(rasconn, &cb, &connections);
if (code == ERROR_BUFFER_TOO_SMALL) {
delete [] rasconn;
rasconn = new RASCONN[cb / sizeof(RASCONN)];
rasconn[0].dwSize = sizeof(RASCONN);
::RasEnumConnections(rasconn, &cb, &connections);
}
0030デフォルトの名無しさん
NGNG444で質問していたのですがこちらで質問です
猫でも分かるプログラミングという有名ページがありますが
あそこには超初心者用と書いてあります。
あれが理解できても初心者ですか?
Windows(Win32か)プログラミングに関してはかなりのものになると思うのですが
実際はまだまだなのでしょうか…
確かにあそこだけでは自分でオリジナルなものを作るのには
厳しいと思いますけどWindowsの仕組みを理解するには十分すぎる気もします。
0031デフォルトの名無しさん
NGNGだから初心者ってのは意識の問題だっての。
0032デフォルトの名無しさん
NGNG003330
NGNG重複までしてご迷惑をおかけいたしました。
少しだけですが自信が出ました。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGALT+Rを押すとComboBoxなどにフォーカスを移す処理をしたいのですが、
どのようにすればいいのでしょうか?
0036デフォルトの名無しさん
NGNG初心者なのに有能なつもりの勘違い君の、2通りのタイプしかいない。
0037デフォルトの名無しさん
NGNGタブオーダを確認する。
モードレスダイアログならIsDialogMessage()つける。
でいいとおもいます。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGCloseHandleを行う前(<==ココで示したタイミング)にディスケットを取り出してしまう
とエラーのダイアログが表示されてしまいます。回避する方法をご存知の方、
ご教授いただけますでしょうか?
oldMode = SetErrorMode(SEM_FAILCRITICALERRORS);
srcHandle = CreateFile(); //HDD上のファイル
destHandle = CreateFile(); //FDD上のファイル
while(1)
{
ReadFile(srcHandle,...);
WriteFile(destHandle,...);
}
CloseHandle(srcHdl);
<==ココ
CloseHandle(destHdl);
SetErrorMode(oldMode);
0041デフォルトの名無しさん
NGNGそこで取り出さないといけない理由ってのが気になる。なんで?
0042デフォルトの名無しさん
NGNGWriteFileの後に、FlushFileBuffers汁
もしくは、srcHandleのCreateFileでFILE_FLAG_WRITE_THROUGHを指定汁
結果キボンヌ
0043デフォルトの名無しさん
NGNG>>41
ユーザーの方が誤って取り出した際にエラーメッセージが出てしまった状況です。
(ディスクアクセスしている最中なので、本来は触ってほしくないのですが...)
>>42
FlushFileBuffers、FILE_FLAG_WRITE_THROUGHの指定ともに確認してみましたが、
結果はやはり「ドライブにディスクがありません。・・・」とのダイアログが
表示されてしまいました。
システムでドライブの情報を保持でもしているのでしょうか?
もう少し、調べてみます。
0046デフォルトの名無しさん
NGNGむしろエラーダイアログ出ない方がまずいだろ。
ユーザーも書き込めたと思うだろうし。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGSetErrorMode(SEM_FAILCRITICALERRORS)
をしてるのになんで、エラーダイアログが出るのか、ということでないの?
004940
NGNG対象がマウス、PCキーボードが接続していないPCで、エラーダイアログが出るとそれに対して操作を行う事が難しいのです。
KIOSK端末みたいなもので、特殊なインターフェイスで専用のキーパッドを接続しています。
キー入力が矢印と数値しかできない(とお考えください)ので、エラーダイアログが出るとそれに対して操作を行う事が難しいのです。
そこでエラーをアプリケーションでハンドリングしようと、SetErrorMode(SEM_FAILCRITICALERRORS)としたにもかかわらず、
40で示したタイミングでダイアログが表示されてしまった...。ということです。
48さんがおっしゃるように
>SetErrorMode(SEM_FAILCRITICALERRORS)
>をしてるのになんで、エラーダイアログが出るのか、ということでないの?
というのが、疑問点です。
長文失礼しました。
0050デフォルトの名無しさん
NGNGコードでコピーするんじゃなくてCopyFile()使うってのはどう?
あと、どうしてもダメな場合はダイアログでたらボタン押す
監視アプリを常駐させとくとか。
#確かローソンのロッピーとかもそうしてたような…
0051デフォルトの名無しさん
NGNGさすがに簡単にブルーバックをだすのはユーザビリティに優れているとはいえないから、
ダイアログが出る程度にとどめただけだとおもわれ。
0052デフォルトの名無しさん
NGNG何とかしてくだちい。
0053デフォルトの名無しさん
NGNGタスクトレイ?
0054デフォルトの名無しさん
NGNGWM_LBUTTONDOWNを使っている、て事だろ。
0055初心者
NGNGしますが、描画ルーチンでスクリーンDCに直接描画すると何が問題になるのでしょう?
複数の描画処理(線を引くなど)を行ったり、アニメーションする場合にちらつかないように?
という事は、単にビットマップを描画しているだけだと直接描画しても問題ないのかな。
オフスクリーンのイメージとして取っておくならともかく、毎回描画ルーチンでCreateCompatibleDC
でメモリーDCを作るサンプルばかりなので納得でけへん。
0056デフォルトの名無しさん
NGNGつまりWM_CONTEXTMENUで処理していないから、
メニューキー押してもコンテキストメニューが出ないってことか。
0057デフォルトの名無しさん
NGNGアプリケーションキーを押してもコンテキストメニューが出ないぞゴルァって事?
ちなみに俺はちゃんとWM_CONTEXTMENUで拾ってる。
0058デフォルトの名無しさん
NGNG>>55
ディスプレイDCに何回も描画していると描画の過程が見えるのでちらつく。それだけ。
オフスクリーン使うにしても絶対に一回はディスプレイDCに描かないといけないんだから
GDI関数で線とか円を直接描いても別に問題なかろう。
0059デフォルトの名無しさん
NGNG左クリックで出ることになるから右クリックで出るようにすれってことじゃないのか。
もちろんWM_CONTEXTMENUで。
0060デフォルトの名無しさん
NGNGわお!ミスった
WM_RBUTTONDOWNですた。
タスクトレイのほうも、XPで不具合でてるのわかってるはずなのにその後のアップグレードでも直されてなかったり。
0061デフォルトの名無しさん
NGNG関係有りそうな、GetClipRgn, GetWindowRgn, GetUpdateRgnなどやりましたが、
どうもうまく取れません。
0062デフォルトの名無しさん
NGNG取得できません。以上。
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGWM_SIZEで、wParam == SIZE_MAXIMIZEDが最大化ボタンのメッセージ。
0065デフォルトの名無しさん
NGNG即レスありがとうございました。
0066デフォルトの名無しさん
NGNGGetRandomRgn(hDC, rgn, SYSRGN);
ClientToScreen(m_hWnd, &org);
rgn.OffsetRgn(-org.x, -org.y);
でできますた。
0067デフォルトの名無しさん
NGNG>タスクトレイのほうも、XPで不具合でてるのわかってる
詳細きぼんぬ
0068デフォルトの名無しさん
NGNG右ボタンを押し下げたときにアプリケーションのコンテキストメニューが表示されて、
右ボタンを離したときにWinが出すタスクトレイ本来のコンテキストメニューが重ねて表示される。
006967
NGNGなるほど。自分のタスクトレイアプリでも WM_RBUTTONDOWN使ってたので(;´Д`)
今チェックしてみたんだけど再現しなかった。状況によるのかな?
っていうか、WM_CONTEXTMENUが飛んでこないっぽい...?
0070デフォルトの名無しさん
NGNGShellExecute(..."c:\\unkou.html#unkou"...);
ってやっても起動してくれないです。
いい方法あるのでしょうか?
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG・タスクトレイで飛んでくるメッセージはWM_*BUTTONDOWN/UP等。
で、タスクトレイとWM_CONTEXTMENUごっちゃにして考えてないか?
0073デフォルトの名無しさん
NGNGと汁
0074デフォルトの名無しさん
NGNGここみれ
http://www68.dns.ne.jp/~bbs2/upload3/helen/OB00014094.jpg
007552
NGNG漏れは一度もWM_CONTEXTMENUとは言ってない、
とにかくWM_RBUTTONDOWN(当初間違ってLBUTTONと書いた)でメニュー出すのは止めてくれと
0076デフォルトの名無しさん
NGNGネタが古い
0077デフォルトの名無しさん
NGNGあんた出てこなくて良いって。
あんたの言ってることはたぶんわかってるから。
WM_CONTEXTMENUの話題に移っただけだk
0078デフォルトの名無しさん
NGNGにしたらページは開いてくれたんですけど、
#unkouに移動してくれない希ガスるんですが。。
僕タンだけ?
0079デフォルトの名無しさん
NGNGは、WM_COMTEXTMENUで表示しなさいって事ですか?
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGWM_RBUTTONDOWNでなくてWM_CONTEXTMENUを使うべし、
タスクトレイでメニューを出すときは、
WM_RBUTTONDOWNでなくてWM_RBUTTONUPで開けってことでいいんすか?
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGMFCを使え。
MFCもAPIのみで実現されてる
0086デフォルトの名無しさん
NGNGおかげさまでサンプルプログラムも見つかりましたので何とかなりそうです。
どうもでした。
0087木村 キタキタマシーン
NGNGヨカッタネ
0088デフォルトの名無しさん
NGNG内容のないただの相槌を書き込むのはやめといたほうがいい。
反感をもたれるから。
0089デフォルトの名無しさん
NGNG009062
NGNGガーン取得できたのか
VS6.0のMSDNライブラリには載ってなくて
MSDN Onlineにはいつのまにかしれっと
> Windows NT/2000/XP: Included in Windows NT 3.1 and later.
> Windows 95/98/Me: Included in Windows 95 and later.
とか載ってるんですが非公開だったってことですか。
> Windows NT/2000/XP: The region returned is in screen coordinates.
> Windows 95/98/Me: The region returned is in window coordinates.
9xとNTで動作が違うのもいかにも非公開っぽいし
0091デフォルトの名無しさん
NGNGWIN2000でLANの接続状態をひろえるAPIはありませんか。
またはそれに代わる良い方法があれば教えてください。
VBで接続状態の監視ができるようにしたいのです。
0092デフォルトの名無しさん
NGNGまずはっきり教えてくれ。
まあとりあえず、定期的に鯖にpingでも撃っとけ。
0093デフォルトの名無しさん
NGNGうーん、WIN2000のローカルエリアネットワークのプロパティで出てくる
ダイヤログに接俗の『状態:有効(または無効)』ってあるでしょ。
OSでLANの接続状態を監視しているのだろうけど、そいつを利用できないもの
かしらって思ったのです。
今作ってるのはMSDEを使う鯖蔵型のプログラムなんですが、LANが切断されると、
たとえすぐにLANが回復してもDBとのコネクトは回復しないでしょ。
だからLANが切れたときに即、エラー出してプログラムを強制終了させて、つまり
プログラムを再起動させるようにしてしまえば良いカナーっと思ったのです。
0094デフォルトの名無しさん
NGNGあ、つまりその、接続状態が「有効」か「無効」かってのを知りたいのです。
009592
NGNGGetIfEntry
を使ったらどうかな?
0096デフォルトの名無しさん
NGNG即レス感謝です。しかしながらすいません。初耳APIです。
どこかに良いTipsなんて出てたらURL教えて下さい。
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG使う文字だけ画像データとして持って BitBlt() とかで
描画するのが一般的なのでしょうか?
ttp://www.watch.impress.co.jp/game/docs/20010618/ys20.jpg
↑みたいな感じ
こういうのは使う文字だけ画像データで持っているのでしょうか?
0101デフォルトの名無しさん
NGNG"ROPコード"って言葉は知ってる?
文字を描いたビットマップとグラデーションのかかったビットマップを用意して、ROPコードを使って2枚を重ねるとできるよ。
0102デフォルトの名無しさん
NGNGアルファベットと数字だけとかなら画像で持っててもいいが日本語は現実的じゃない(と思う)。
やるんならDIBSection作ってそこにTextOutして、そのビットイメージに対して加工するとか
するのがいいんじゃなかろうか?
0103デフォルトの名無しさん
NGNG・・・・さっきどっかに誤爆したかも・・・?
俺は日本語も画像で持ってる。
画像つっても格納してるのは8bitの輝度情報だけで、実際の色は描画時に計算するんだけど。
JIS第1水準くらいなら画像サイズもそれほど大きくはならないよ
0105100
NGNG知りませんでした。
簡単に言うと、グラデの掛かった画像を、フォントの画像を型として
抜くという感じでしょうか?
>>102, 103
どうしてもわからなかったらその方向にします…。
0106100
NGNG模様を書いた紙の上に文字を白抜きしたもう1枚の紙を置く感じです。
「ラスタオペレーションコード」ともいいます。
具体的には、文字と背景の画像を作って、
PatBlt(),BitBlt(),StretchBlt(),MaskBlt(),PlgBlt()
などで画像を加工します。
詳しくは、Charles Petzoldの「プログラミングWindows」やAPIヘルプに解説があります。
0107デフォルトの名無しさん
NGNGたとえばゲームに使うとして、
必要なグリフをビットマップにして配布するのは、
ライセンス違反となることもあるので気をつけないとダメだぞ
0108デフォルトの名無しさん
NGNGそれはあり得るね、気をつけないとね。
0110デフォルトの名無しさん
NGNGwhile(1){
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
if (!GetMessage(&msg, NULL, 0, 0)) return msg.wParam ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}else{
Mainloop(hWnd);
}
}
の様にすると、
1.9xでCPU占拠率が上がる(ノートのバッテリーの持ちが悪くなる)
2.エレガントではない
と言う問題が出てしまいます。
何か良い方法は無いでしょうか?
0111デフォルトの名無しさん
NGNGゲームプログラムで、メッセージの無いときの処理を書きたいのですが、
while(1){
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
if (!GetMessage(&msg, NULL, 0, 0)) return msg.wParam ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}else{
Mainloop(hWnd);
}
}
の様にすると、
1.9xでCPU占拠率が上がる(ノートのバッテリーの持ちが悪くなる)
2.エレガントではない
と言う問題が出てしまいます。
何か良い方法は無いでしょうか?
0112デフォルトの名無しさん
NGNG全部メッセージ経由で処理する。
1. timeSetEvent() を用い、一定時間毎に WM_USER + n をポストするように。
2. WM_USER + n に対するメッセージハンドラから Mainloop() を呼び出す。
0113110
NGNGうわー、それ恐ろしく頭良い方法ですねぇ(笑)
ちょっと調べてみたら詳しい情報がわんさか出てきました。
やっぱこれってかなり初心者質問だったみたいですね...
こういうゲームプログラミングの基礎みたいなのって、どんな本に載ってるんですか?
やっぱGame Programming Gems ですか(高くて手を出しにくいんですが...)
0114デフォルトの名無しさん
NGNGSleep(1);
0115デフォルトの名無しさん
NGNG0116112
NGNG> こういうゲームプログラミングの基礎みたいなのって、どんな本に載ってるん
> ですか?
timeSetEvent() やメッセージを使って処理を進める方法は、ゲームとは無関係に
Win32 のバイブル「プログラミング Windows」を読んで知りました。
ゲームプログラミングの基礎を解説した書籍で「これは」というモノは見かけませ
んね……。Game Programming Gems は、むしろ既にゲームを 2, 3 本書いた人
間がさらなる情報を探す手がかりとして使うもので、論文の abstract 集のような
感じです。いきなり読んでも、あまり役に立たないかと。
0117デフォルトの名無しさん
NGNG略すなよ。コの界隈で gems 本というと Graphics Gems もあるし。
0118110
NGNGそれは知っていましたが、あまりエレガントでは無いので...
>>115
そうなんですか...書評に初級者から上級者までって書いてあったので...
そういう低レベルな事って調べにくいんですがみなさんはどうやって調べたんですか?
0119デフォルトの名無しさん
NGNG{
try {
mymain(...);
} catch(...) {
// ここでエラーを起こした状態のレジスタ情報や
// スタック情報を取りたいんですがどうしたらいい
// のでしょうか?
}
}
0120デフォルトの名無しさん
NGNGエレガントじゃないってどういうことだ?
だったらこう汁!
必要以上のCPU時間を取らないエレガントな実装だ(ワラ
DWORD frame_time = 1000 / 60;
while(1){
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if (msg.message == WM_QUIT) return msg.wParam ;
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}else{
DWORD tick = timeGetTime();
Mainloop(hWnd);
int interval = timeGetTime() - tick;
if (interval > 0) ※
Sleep(interval);
}
}
※ もしくは
> while (timeGetTime() < tick + frame_time)
> Sleep(0);
このように。
0121デフォルトの名無しさん
NGNGすでにスタックが巻き戻っているので手はない。
例外クラスに状態を保存させるしかない。
0122デフォルトの名無しさん
NGNG> エレガントじゃないってどういうことだ?
感性が微妙に鈍いな…
あと「もしくは」の方法だと、バッテリー消耗激しい問題は解決しないと思うぞ。
Sleep(0) って、呼び出し側のプロセスよりも実行優先度が高いプロセスが存在
しなければ、すぐに戻って来ちゃうでしょ?
0123デフォルトの名無しさん
NGNG>感性が微妙に鈍いな…
どういう意味だ?
正直、すでに定番となっている形式のIdleLoopなのに、
それをエレガントじゃないと切り捨てる意味がわからないって事だが。
>バッテリー
問題ない。
基本的にhltでループ回しているのと変わらないから。
それでかつ精度もそれなりに高いやり方。
0124デフォルトの名無しさん
NGNGありがとうございます。
ということは、catch(...)でしか取れないような
エラーを起こした場合、その原因を知る方法って
ナイのでしょうか?
0125110
NGNGしまった!!(^^;
たしかにプログラミングWindows(下)に載ってました。
下は恐れ多くも流し読みしてました(^^;
流し読みしちゃぁいけない本なんですね...
穴があくほど読んで出直します。
Game Programming Gems は、ゲーム2.3本作ってから買うことにします。
>>120
>エレガントじゃないってどういうことだ?
分かりません(^^; なんとなく(1)とかです。
>エレガントな実装だ
ぉお、それも良いですね。
たしかにかなりエレガントですね。
どっちが良いんでしょう。ちょっと自分でも調べてきます。
0126110
NGNGif (interval > 0)
Sleep(interval);
って
if (interval > 0)
Sleep(frame_time - interval)
ですよね...?
0127デフォルトの名無しさん
NGNG> 基本的にhltでループ回しているのと変わらないから。
いや、
> while (timeGetTime() < tick + frame_time)
> Sleep(0);
これは、どう見ても hlt でループ回すのとは別だろ。timeGetTime() も while の
条件分岐も CPU 働くよ。(これが Sleep(1) なら話は分かる)
0128デフォルトの名無しさん
NGNGSleep()中に来たイベントはどうすんだよ。
0129デフォルトの名無しさん
NGNGIEのプラグインツールバーを作ろうと思ってサイトを検索していると、
http://www.codeproject.com/atl/ietoolbartutorial.asp
というサイト見つけたんだけども、commctrl.h が古いらしくコンパイルがとおらない…。
(TBSTYLE_EX_MIXEDBUTTONSが定義されてないとエラーが出てくる)
これって最新のヘッダーファイルはどこに?
(ちなみにVC++6.0で開発しています)
0130デフォルトの名無しさん
NGNGSleep(0)でもSystem Idle Processに1tick処理が回るよ。
0131デフォルトの名無しさん
NGNGVC++.net "commctrl.h"抜粋
#if (_WIN32_IE >= 0x0501)
#define TBSTYLE_EX_MIXEDBUTTONS 0x00000008
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 0x00000010 // don't show partially obscured buttons
#endif // 0x0501
0133デフォルトの名無しさん
NGNGPlatformSDK落とせ
0134デフォルトの名無しさん
NGNG別スレッド作ってMsgWaitForMultipleObjects。
俺が模作したなかじゃこれが一番エレガント。
精度はパフォーマンスタイマーで補う。
0135デフォルトの名無しさん
NGNGWindowsのイベント処理は全部忘れられるぞ
0136デフォルトの名無しさん
NGNGそれは誰でもやること。
あくまでシングルスレッドでがんばりたいって事じゃないのか?
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNGウインドウを生成しないプログラムってどうやって作るんでしょう?
ウインドウクラスやcreatewindowは使わないんですよね?
0139138
NGNG0140デフォルトの名無しさん
NGNGWS_VISIBLE付けずにCreateWindow
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNGHWNDがNULLでGetThreadMessage()でウインドウなしが実現できる
0143デフォルトの名無しさん
NGNG普通非表示のウィンドウを作るんでないの
0144デフォルトの名無しさん
NGNGて優香、ウィンドウを作らないとタスクトレイアイコンをクリックしたときなどの
通知メッセージを受け取れまへん。
0146デフォルトの名無しさん
NGNGchar grid[128]="100,200"
のように入っているときxとyの値を個別に取り出して別の変数に入れたい時は
どんな感じでプログラミングすればよい?できればintやPOINT型で入れたいんですが。
0147デフォルトの名無しさん
NGNGx=atoi(grid);
y=atoi(strstr(grid,',')+1);
ってな処か?
#これはAPIの質問なのか?
0148デフォルトの名無しさん
NGNGどうせstdio.hをincludeするなら、
int x,y;
sscanf(grid,"%d,%d",&x,&y);
がスマートかも。
すれ違いなのでSEGA。
0149デフォルトの名無しさん
NGNG0150146
NGNGCのお話だと思うのですがこのスレで質問してしまいました。
0151デフォルトの名無しさん
NGNG0152146
NGNG0153デフォルトの名無しさん
NGNG無意味
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG実際に使うかどうかはまた別の問題だが、windowプログラムだからかどうかと
は無関係。
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGそういう場合は使わなきゃ良いじゃん
0158デフォルトの名無しさん
NGNGスタートアップできないっす。
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG{
ExitProcess(0);
}
cl -link -entry:Startup
0161デフォルトの名無しさん
NGNG買う価値あるかな?
0162デフォルトの名無しさん
NGNG本気でWindowsプログラムをC言語で学びたければ買う価値あるよ。
SDKでやるんだよ。
でも
AdvancedWindowsと何が違うのでしょうか?
AdvancedWidnows買ってないのであちらはよく分かりません。
あちら、C++で書かれているようですけど。
C++分かれば今ならAdancedWindowsで良いのでしょうか?
0163デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4756138055/qid=1024220278/sr=1-1/ref=sr_1_2_1/249-7181027-3890743
0164デフォルトの名無しさん
NGNGそれでAPI勉強してからC++のMFC勉強しようと思ってるのですが
わざわざAPIを勉強する必要もないですか?
0165デフォルトの名無しさん
NGNGMFC使っていてもWin32APIは出てくるよ。
.netになったらWin32APIは邪魔になりそうですけど同なのでしょうか?
APIやMFCって勉強するものですか?
C(の場合API)やC++(の場合MFC)が分かれば使えると思います。
0166デフォルトの名無しさん
NGNG知ってた方が世界は広がる。
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGないと思う。
って言うよりプログラミングWindowsはいまどきいるか?
0169デフォルトの名無しさん
NGNGWin32 native なコードを書く人間にとっては、意味がある。MFC やら ATL を使う
にせよ、背後にあるメッセージの仕組みやら Win32 API 知らんと、実際にはマト
モにプログラミングできんし。
ただ、今更 Win32 native なコードを書く勉強をすることに意味があるかは、何と
も言えんな。現時点では仕事は結構あるけど、これから増えるとは思えんし。
(まぁ、まだ 1 年ぐらいは食えるよ。その先は世の中 .net になるのか、それとも
しぶとく Win32 native が残るのかに依る)
0170デフォルトの名無しさん
NGNGヽ(`Д´)ノ ウワァァァン
漏れは貧しい学生なのに高い金出してプログラミングwindows買ったのに。
こんな漏れは逝ってよしですか?
0171デフォルトの名無しさん
NGNG本買う前にやりたい分野のこと少しくらい調べろよ。
0172デフォルトの名無しさん
NGNG正解!
0173デフォルトの名無しさん
NGNG.netでは、MFCとは異なるラッピングのライブラリがあるの?
0174デフォルトの名無しさん
NGNGき、きみねぇ・・・
0175デフォルトの名無しさん
NGNG0176173
NGNGな、なにその反応。俺、もしかして、「すごくくだらない質問スレ」級の
質問をしてしまったの? 逝くべき?
でも、その前に解説してくれー。
>>175
.net「が」!? わけわからーん。
自分で晒しageしとくか。
0177デフォルトの名無しさん
NGNGAPIスレであなたは「邪魔」です
0178デフォルトの名無しさん
NGNGなんで?どこがいけないの?
メッセージキューを理解するってやつでマウスの左ボタンを押しながらマウスを動かすと(要はドラッグ)
小さい円を描くってやつで、マウスを早く動かすとWM_MOUSEMOVEの中身が入れ替わるから円がまばらになるってだけなんだけどどうしてもエラー(TωT)ブヒー
SPY++で見てみると、際限なくWM_PAINTがはっせいするんだよねぇ。ハマったよ。誰か教えて下さい。
注:そのままコピペしてビルドするとビジー状態になるから、強制終了してネ
*************************************こっから*************************************************************
#include "windows.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevinstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX wcl;
HWND hWnd;
MSG msg;
wcl.cbSize = sizeof(WNDCLASSEX);
wcl.style = CS_HREDRAW | CS_VREDRAW;
wcl.lpfnWndProc = (WNDPROC)WndProc;
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
wcl.hInstance = hInstance;
wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
wcl.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcl.lpszMenuName = NULL;
wcl.lpszClassName = "ModelApp";
wcl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wcl);
0179デフォルトの名無しさん
NGNGhWnd = CreateWindow(wcl.lpszClassName,
"SetCursor3",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0));
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
int x, y;
switch(message)
{
case WM_MOUSEMOVE:
if(wParam & MK_LBUTTON)
{
hdc = GetDC(hWnd);
x = LOWORD(lParam);
y = HIWORD(lParam);
Ellipse(hdc, x - 5, y - 5, x + 5, y + 5);
ReleaseDC(hWnd, hdc);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
0180デフォルトの名無しさん
NGNGPAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
これだけでいいから WM_PAINT の処理入れてみそ?
0181デフォルトの名無しさん
NGNGwhile(GetMessage(&msg, NULL, 0, 0)); ←セミコロン
{
0182デフォルトの名無しさん
NGNGなんとセミコロンだぁ(〃∇〃) てれっ☆
こんな単純な、ミスをするなんて・・・・・俺もまだまだひよっこだな・・・・ふっ
間違えなくてもひよっこだけどね・・・ぼそっ
セミコロン消したら一発オーケーでした。
181さんありがとうございました。
180さんもありがとう。
VC++。警告ぐらい出してくれ!わからんじゃないか!
おそまつでした。(@^_^)ゞ ポリポリ
0183デフォルトの名無しさん
NGNGゴミ人間。
0184デフォルトの名無しさん
NGNG大山鳴動してなんとやらだな、と滅多に
使えないことわざをここぞとばかりに使ってみる。
まぁ礼を言えるだけ真人間じゃないかな。最近はそれすら
言えないヤツが多いからね。このスレにもいっぱいだ。
0185デフォルトの名無しさん
NGNGVC#では確か指摘してくれたはず。
0186デフォルトの名無しさん
NGNG警告されたら困る。while中に式書いて空ループ廻すのは良くやる手法。
0187デフォルトの名無しさん
NGNGでも、その直後にただのブロック置くことってかなり少ない罠。
0188デフォルトの名無しさん
NGNG無限ループならwhile(1)とかでしょうけど。
0189デフォルトの名無しさん
NGNG前回の状態を保持する関数、もしくは同期用の待ち関数で、
while(hoge(1) != 0);
while(WaitThread(THR_ALL) != 0);
とか。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG}
がよろしいかと
0192デフォルトの名無しさん
NGNGよくやるなよ〜。
ビジーループは俺的にタブーって感じだ。
while (1){}もそう。
検索するコンテナなりなんなり
そういうリソースってのは、必ず有限な訳で
()の中に条件式を入れられないケースなんて滅多にないはずだぞ。
何で使う?
0193デフォルトの名無しさん
NGNG無限ループは常套手段だろう。Win32 API がらみだと、たとえばこんなコードとか。
for (;;) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
if (TranslateAccelerator(hWnd, hAccel, &msg) == 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else if (app.IsActive()) {
app.ExecOneStep();
Sleep(0);
} else {
WaitMessage();
}
}
0194デフォルトの名無しさん
NGNGこういうのだってあるだろ
0195デフォルトの名無しさん
NGNGfor (List *p = phead->next; p != NULL; p = p->next)
;
0196名無しさん@カラアゲうまうま
NGNGfor (List *p = phead; p->next != NULL; p = p->next)
;
0197デフォルトの名無しさん
NGNGリストの末尾探し?
ObjectPascalなら使えないけどいい!
0198デフォルトの名無しさん
NGNG> ビジーループは俺的にタブーって感じだ。
while (1)だけで回すってことじゃなくて、言いたかったのは、
空文";"じゃなくて中に何も無くても{}の方が、よろしかないかと
いふこと
while(getchar() != -1)でもfor(;;)でもなんでもいいんだけどね
0199デフォルトの名無しさん
NGNG情報が得られそうなサイトや書籍があれば教えていただけないでしょうか。
USのMSDNサイトと ASCIIのMSDN magazin No.18に記事があるのはGoogle等で
Hitしたのですが、他の出来れば日本語のドキュメントか、具体的なサンプルが
掲載されているサイト等を探しています。
0200デフォルトの名無しさん
NGNG記念age
0201デフォルトの名無しさん
NGNGマウスの動き(中の歯車の動き。ちなみにX座標≪水平方向≫のみ)
を取りたいのですが、どうしたらよいでしょう。
とりあえず今は「猫でも出来る〜101章」にあったように
WM_LBUTTONDOWN:メッセージを受け取ると
SetCapture(hWnd)関数を呼ぶようにして、左クリックしたままなら
画面上の座標は取れるようになりました。
case WM_LBUTTONDOWN:
SetCapture(hwnd);
break;
しかしこれだと、左クリックし続けなければならないし
画面の端に来たときに止まってしまいます。
誰か分かる方いらっしゃいましたら、どうかよろしくお願い致します。
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGWM_MOUSEMOVEメッセージが来たときにSetCapture関数を呼んでも
ウインドウを外れると動かなくなってしまいます。
本当に初心者な質問ですみません。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNGメッセージの横取り?みたいなことが出来るんですね。
知りませんでした。
難しそうですが・・・何とか色々検索してやってみます。
ありがとうございました。
0207デフォルトの名無しさん
NGNG右クリックし続けないといけないのは、それなりに正常な動作
だったはず。画面の端にきたら止まるのがこまるなら、
それを検出してもう一方の端にマウスを設定すればいいのでは。
0208デフォルトの名無しさん
NGNG避けようがないんですか。
>それを検出してもう一方の端にマウスを設定すればいいのでは。
もう一方の端に設定する仕方(マウスポインタの強制移動?)の仕方がわかりません。
本当に素人ですみません。検索してきます。
レス本当にありがとうございます。
0209デフォルトの名無しさん
NGNG何度もすみません。
0210デフォルトの名無しさん
NGNGライブラリ探しまくりますか?
そこで見つからなかったらどうしますか?
0211デフォルトの名無しさん
NGNG全体が動いて落ち着くか、その部分がネックになるようだったらもう一度しらべなおす。
0212デフォルトの名無しさん
NGNG> そこで見つからなかったらどうしますか?
どうしても必要なら、作るしかないだろ。
ただ、ライブラリを使うのに比べてコストがかかるから、まずは見積もりを
出して許容範囲にあるか、あるいは別の方法で安く逃げられないかを考え
るけど。
0213デフォルトの名無しさん
NGNGビットマップの読み込と表示を,ウインドウ2のプロシジャではウインドウ1
のプロシジャで読み込んだ画像の加工と表示をさせたいのですが,肝心の
ウインドウ1のプロシジャ内のデータ(ビットマップ情報などをまとめた構造体)を
ウインドウ2のプロシジャに受け渡す方法が分かりません.
googleで検索して見様見真似で以下のようなコードを書いてみたのですが,
矢印のところで「error C2115: '=' : 互換性のない型が含まれています。」と
エラーが表示されうまくいきませんでした.一応,参考にした所では
reinterpret_castでキャストしていたのですが,Cで使おうとしたらエラーがでて
使えませんでした.受け渡しの方法が間違っているのか,それとも構造体を
送るには別の方法があるのか分からなくて困っています.
どうかご教授をお願いします.
/*ウインドウ1のプロシジャ (IMAGEは構造体)*/
static IMAGE im01;
SendMessage(hWnd, WM_USER+100, 0, (LPARAM)(&im01));
/*ウインドウ2のプロシジャ*/
static IMAGE *im02;
switch(message){
case WM_USER+100:
* im02 = (IMAGE*)(lParam); <===
break;
0214デフォルトの名無しさん
NGNGOpenProcessとWrite/ReadProcessMemoryだけで可能ですか?
0215デフォルトの名無しさん
NGNGim02 = (IMAGE*)(lParam);
または
* im02 = *(IMAGE*)(lParam);
では?
WM_COPYDATAってメッセージもあったと思うけど使えない?
0216デフォルトの名無しさん
NGNGを判定する方法ありませんか?
0217デフォルトの名無しさん
NGNGモードレスダイアログだとしたら……
a. ダイアログが閉じた時にオーナーウィンドウに通知する
b. IsWindowでハンドルが有効かどうか検査
c. FindWindowでダイアログを探してみる
あたりかな。
0218デフォルトの名無しさん
NGNGありがとうございます、やってみます。
0219デフォルトの名無しさん
NGNGtypedef struct {
BITMAPFILEHEADER * pbmfh ;
BITMAPINFO * pbmi ;
BYTE * pBits ;
int sx;
int sy;
int ex;
int ey;
} IMAGE;
上記のような構造体を渡したいので,WM_USERでやるのは(googleで見て回ると)
大変らしいので,WM_COPYDATAを使うことにしてみます.
まだ試してはいませんが,以下のような感じになるのでしょうか.
ただ,googleで見て回ったところ,構造体にポインタがあるとうまくいかないとかいう
記述があったので,ちょっと心配ですが...
/*ウインドウ1のプロシジャ (IMAGEは構造体)*/
static IMAGE im01;
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(IMAGE);
cds.lpData = &im01;
SendMessage (hWnd, WM_COPYDATA, (WPARAM)0, (LPARAM)(&cds));
/*ウインドウ2のプロシジャ*/
static IMAGE im02;
PCOPYDATASTRUCT pcds;
switch(message){
case WM_COPYDATA:
pcds = (PCOPYDATASTRUCT)lParam;
MemoryCopy (&im02, pcds->lpData, pcds->cbData);
break;
0220デフォルトの名無しさん
NGNG/*ウインドウ1のプロシジャ (IMAGEは構造体)*/
static IMAGE im01;
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(IMAGE);
cds.lpData = &im01;
SendMessage (hWnd, WM_COPYDATA, (WPARAM)0, (LPARAM)(&cds));
/*ウインドウ2のプロシジャ*/
static IMAGE im02;
PCOPYDATASTRUCT pcds;
case WM_COPYDATA:
pcds = (PCOPYDATASTRUCT)lParam;
memcpy(&im02,(PCOPYDATASTRUCT)lParam, sizeof(IMAGE));
0221デフォルトの名無しさん
NGNG同一スレッドなのかが重要
0222デフォルトの名無しさん
NGNG>memcpy(&im02,(PCOPYDATASTRUCT)lParam, sizeof(IMAGE));
何をコピーしてるんだ、何を。
0223デフォルトの名無しさん
NGNG同一プロセスです(ウインドウ1はWinMainで最初に作成し,ウインドウ2は
ウインドウ1のプロシジャ内でメニューからコピーを選んだときに作成されます).
あと,同一スレッドかというのは,どのような意味でしょうか?
CreatThredとか使ったことが無いので,スレッドの定義というか意味が
よくわからないのですが...
>>222
MSDNに,
void *memcpy( void *dest, const void *src, size_t count );
dest コピー先のバッファ
src コピー元のバッファ
count コピーする文字数
とあったので,,,てよく見たら「バッファ間で文字をコピーします。」と
書いてある.単純にmemcpy(送り先,送り元,大きさ)だと思ってました.
それでは,どのようにしたら構造体をコピーできるのでしょうか...
memcpy (&im02, pcds->lpData, pcds->cbData);
とかでは駄目でしょうか? それとも他に関数とかあるのでしょうか?
0224デフォルトの名無しさん
NGNGmemcpyはデータをメモリでコピーするものと言うことでよいのですか?
memory同士でコピーして何になるのでしょうか?
0225デフォルトの名無しさん
NGNGいろいろあるぞ。
あるデータをちょっと弄って処理するときに、元データを保護する目的とか、
テンプレをconstで持ってて、それ弄る時とか…
0226222
NGNGmemcpy (&im02, pcds->lpData, pcds->cbData);
lpDataをcdData分im02にコピーする.
#ということを期待している > 私
>memcpyはデータをメモリでコピーするものと言うことでよいのですか?
はい...
#違うんでしょうか...
>memory同士でコピーして何になるのでしょうか?
...上記のがそういう状態ということでしょうか...
うーん...
0227デフォルトの名無しさん
NGNGこれは普通プロセス間でデータを渡すもの。最初の方法でいい
とおもう。
その2つのウインドウでそれぞれIMAGEを持ちたいのか
IMAGEは一つで、それをみんなで使いたいのか?
仕様が良く分からない。
0228213
NGNG>2つのウインドウが同じスレッドならWM_COPYDATAは必要ない。
>これは普通プロセス間でデータを渡すもの。最初の方法でいい
>とおもう。
>215 での修正を加えたのですが,うまくいかなかったので,別の道に走った
のですが,ちょっと違う方向に走っていっていたようです...(−−;
>その2つのウインドウでそれぞれIMAGEを持ちたいのか
>IMAGEは一つで、それをみんなで使いたいのか?
>仕様が良く分からない。
各ウインドウで*違う*IMAGEを持たせたいのです.
感じとしては,ウインドウ1に原画像を表示し,加工した結果を,他のウインドウ
(ここではウインドウ2)に表示するということをしようとしています.
0229デフォルトの名無しさん
NGNG0x00000000〜0x003FFFFF
の情報は取得できるのですが
0x00400000
以降のメモリが
CD CD CD CD ・・・・
となってしまいます
どうすればきちんと取得できるでしょうか?
0230デフォルトの名無しさん
NGNG代入やmemcpyではだめで
> * im02 = (IMAGE*)(lParam); <===
たとえばCopyImageとか作って
CopyImage(IMAGE* pTo, const IMAGE* pFrom)
{
if(pFrom->pbmfh != NULL)
{
pTo->pbmfh = new BITMAPFILEHEADER ;
memcpy(pTo->pbmfh, pFrom->pbmfh, sizeof(BITMAPFILEHEADER));
}
else
pTo->pbmfh = NULL;
・・・
としないとコピーは作れない
0231デフォルトの名無しさん
NGNG最悪、グローバル変数にするとか。
0232デフォルトの名無しさん
NGNGJavaの謎と落とし穴を奨める。
他のオブジェクト指向ユーザにも有益。
0233デフォルトの名無しさん
NGNGすればいいでしょうか。
WM_CHARで処理すればいいんですが、CTRL+keyとしたときには
keyはWM_CHARで取れないので困ってます。
特にVK_OEMとかのキーボード固有のやつを処理したいのです。
0234デフォルトの名無しさん
NGNG決まった方法はない。
変換テーブルを持ってやるのが一般的だが、
キーボード(正確にはドライバ)によって違ってくる。
0235あぼーん
NGNG0236デフォルトの名無しさん
NGNGマルチしまくりだな。お前、出会い系サイトかなんかにはまってんの?
0237デフォルトの名無しさん
NGNG私はエラー(メモリ?)チェックが厳しいと聞いた.cppでプログラムしてますが。
みなさんはどうですか?
0238デフォルトの名無しさん
NGNG取りあえず基礎からやり直せ。
0239213
NGNGvoid CopyImage2(IMAGE* pTo, const IMAGE* pFrom){
if(pFrom->pbmfh != NULL){
pTo->pbmfh = (BITMAPFILEHEADER *)malloc(sizeof(BITMAPFILEHEADER)) ;
memcpy(pTo->pbmfh, pFrom->pbmfh, sizeof(BITMAPFILEHEADER));
pTo->pbmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFO));
memcpy(pTo->pbmi, pFrom->pbmi, sizeof(BITMAPINFO));
pTo->pBits = (BYTE *)malloc(sizeof(BYTE)*(pFrom->pbmi->bmiHeader.biSizeImage));
memcpy(pTo->pBits, pFrom->pBits,
sizeof(BYTE) * (pFrom->pbmi->bmiHeader.biSizeImage));
}
else{
pTo->pbmfh = NULL;
pTo->pbmi = NULL;
pTo->pBits = NULL;
}
}
/*ウインドウ1のプロシジャ (IMAGEは構造体)*/
static IMAGE im01;
static HWND hCwnd;
case IDM_IMAGE_COPY:
SendMessage(hCwnd, WM_USER+100, 0, (LPARAM)(&im01));
/*ウインドウ2のプロシジャ*/
static IMAGE im02;
static int cxDib, cyDib;
case WM_USER+100:
CopyImage2(&im02, (IMAGE *)(lParam));
if (im02.pbmi->bmiHeader.biSize == sizeof (BITMAPCOREHEADER)) {
cxDib = ((BITMAPCOREHEADER *) im02.pbmi)->bcWidth ;
cyDib = ((BITMAPCOREHEADER *) im02.pbmi)->bcHeight ;
}
else {
cxDib = im02.pbmi->bmiHeader.biWidth ;
cyDib = abs (im02.pbmi->bmiHeader.biHeight) ;
}
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
if (im02.pbmfh)
SetDIBitsToDevice ( hdc, 0, 0, cxDib, cyDib, 0, 0, 0, cyDib,
im02.pBits, im02.pbmi, DIB_RGB_COLORS) ;
EndPaint (hwnd, &ps) ;
return 0 ;
と変更することでエラーもなくコンパイル+実行できるのですが,ウインドウ2に
なにも表示されません.
デバックモードで値を見てみたのですが,ちゃんと入っているようでした.
もう少しでちゃんと表示できそうなのですが...うーむ.
あとどこがおかしいのでしょうか?
0240デフォルトの名無しさん
NGNG窓1からイメージが送られてきても、WM_PAINTメッセージが来ないとイメージ描かれない
よん。WM_USER+100の処理が終わったらUpdateWindow辺りでWM_PAINT送って…
じゃないかな?
0241213
NGNGWM_USER+100の処理の最後にUpdateWindow(hwnd);を入れて,WM_PAINTまで
処理がいっているのを確認したのですが,それでもウインドウ2には何も表示され
ません(正確にはウインドウクラスで定義した背景色の白が表示されています).
うーん...
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGで調べたけど、要領得なくてさぁ。
例えば、子ウインドウのエディットボックスで、
CreateWindow("EDIT", "", ここの部分, ・・・・・・・・・);
なんかで指定できる一覧なんか見たいんだけど、サクッと見られるサイトとかないかなー。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGMFCの解説
http://www.microsoft.com/JAPAN/developer/library/vcmfc/_mfc_window_styles.htm
http://www.microsoft.com/JAPAN/developer/library/vcmfc/_mfc_extended_window_styles.htm
0246デフォルトの名無しさん
NGNG実を言うと俺が買ったんじゃなくってさぁ
VC++6.0の実物見たことなくて、あれってVC++とMSDNの2枚組なの?実は3枚あるとか?
漏れ2枚しかもって無くてフツーにインストールしたけど、なぜかヘルプがみれないんだよねー
しょうがないから、オンラインで検索しまくってんだけど、やっぱ正規に買った方がいいかなー?
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGありがとう!
載ってるじゃん!、漏れの検索不足かよー。
できれば、どうやって検索したのかも教えてほちいなぁ。
0249デフォルトの名無しさん
NGNGCreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | ES_RIGHT, ・・・・);
こんな感じで、指定したんだけどどうしてもES_RIGHTが反映されなくて、左詰めになっちゃいます。
これって機種依存とかあるのかな。本に書いてあるとおりやっても出来ないんだよね。
付録のCD-ROMにサンプルとしてオリジナルがあるんだけど、それも試したけどやっぱり左詰になっててどう考えても俺のパソのせいなんだよね。誰か、うまく右詰にする方法知ってる人居ますか。
ちなみに俺の環境は
Win95OSR2
VC++6.0
0250デフォルトの名無しさん
NGNGサンプルが絶対正しいという保証はないと思うが。
0251デフォルトの名無しさん
NGNGWin2kは右詰になったりするが、本来は複数行エディットでないとES_RIGHTは効かない
ことになっとる。ES_MULTILINE付けてみそ。
0252デフォルトの名無しさん
NGNGできました!ES_MULTILINEでばっちりです。
ありがとうございました。
>>250
指摘通りサンプルにはES_MULTILINEはついていませんが、Win2kで右詰になるならあながち間違いとも言えないようですね。ただ単にWin95で、動作確認をしていないだけでしょうか。
いまどきいねーもんな・・・・95
0253213
NGNGtypedef struct {
BITMAPFILEHEADER * pbmfh ;
BITMAPINFO * pbmi ;
BYTE * pBits ;
} IMAGE;
>>239 のようにしたのですが,>>240 >>242 のアドバイスもあったのですが,
ビットマップの縦横の大きさはとれるのですが,肝心のデータ部がうまく表示できません.
構造体のコピーの仕方が悪いのか,それとも表示方法がまずいのか分かりません.
どこがおかしいのかご教授お願いします.
もしくは,似たようなことを解説しているページがありましたら教えてもらえないでしょうか.
よろしくお願いします.
/* ウインドウ2のプロシジャ(>>239 からの変更部) */
case WM_USER+100:
CopyImage2(&im02, (IMAGE *)(lParam));
if (im02.pbmi->bmiHeader.biSize == sizeof (BITMAPCOREHEADER)) {
cxDib = ((BITMAPCOREHEADER *) im02.pbmi)->bcWidth ;
cyDib = ((BITMAPCOREHEADER *) im02.pbmi)->bcHeight ;
}
else {
cxDib = im02.pbmi->bmiHeader.biWidth ;
cyDib = abs (im02.pbmi->bmiHeader.biHeight) ;
}
rc.top = 0;
rc.left = 0;
rc.bottom = cyDib;
rc.right = cxDib;
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
SetWindowPos(hwnd,HWND_TOP,0,0,rc.right-rc.left,rc.bottom - rc.top,SWP_NOMOVE);
InvalidateRect (hwnd, NULL, FALSE) ;
UpdateWindow(hwnd);
return 0;
0254213
NGNGしていることぐらいです...
/*ウインドウ1のプロシジャ*/
HWND Chwnd;
case WM_CREATE:
// ウインドウ2 用
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc2 ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = (HINSTANCE)GetWindowLong(HWND_DESKTOP,GWL_HINSTANCE);
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = TEXT("Image2");
RegisterClass (&wndclass);
// ウインドウ2を作成
hCwnd = CreateWindow (TEXT("Image2"),
TEXT ("Image Processing Result"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hCInstance, NULL) ;
ShowWindow (hCwnd, SW_SHOWNORMAL) ;
UpdateWindow (hCwnd) ;
return 0 ;
0255デフォルトの名無しさん
NGNGおまえウザイよ。
いちいちインデント崩れまくりのソースを貼るのはよせ。
現象を再現できる最小限の完全なコードをどこかにUPして、
施した変更や処理の要点だけをここに書け。
0256デフォルトの名無しさん
NGNGとりあえず、あぷろだ見つけてきたからソースはここにUPれ
0257デフォルトの名無しさん
NGNGim01がちゃんと出来てないとどうしようもないぞ。
0258213
NGNG申し訳ありません.まわりでWindowsでCでプログラムをしている人がいないもので,こちらに
何度も聞いてしまいました.
>>256 のところに,タイトル「1047/ Win32APIスレより」,投稿者「213」でアップしました.
0259デフォルトの名無しさん
NGNGbmiHeader.biSizeImageからサイズを取ってはダメ。MSDNにも、「BI_RGBの時は多分
0が入ってる」と書いてある。BITMAPFILEHEADERのbfSizeから計算するか、biWidthと
biHeightから計算するかどっちかにして。
0260デフォルトの名無しさん
NGNGそれから、もう一つ。
BITMAPINFO構造体をコピーするのもあのままじゃダメ。
パレットをキッチリコピーしてやらないと。
0261213
NGNGご指摘ありがとうございます.
BITMAPINFO構造体のコピーを下記のよう直したら,ちゃんと表示されるようになりました.
pTo->pbmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFO) + pFrom->pbmi->bmiHeader.biClrUsed * sizeof(RGBQUAD));
memcpy(pTo->pbmi, pFrom->pbmi, sizeof(BITMAPINFO) + pFrom->pbmi->bmiHeader.biClrUsed * sizeof(RGBQUAD));
#2箇所直すのに2時間もかかってしまった...
#pgm形式とppm形式しか扱ったことがなかったので,よい勉強になりました.
0262デフォルトの名無しさん
NGNGエラーでビルドできませんでした。
下記の環境ですがDLLから明示的に呼び出さないと使えないのでしょうか?
環境:Windows2000Pro+SP2, VC++6.0Pro+SP5
Platform SDK November 2001 インストール済み
0263デフォルトの名無しさん
NGNG>>259が言うように絵本体のコピーも変更しないと駄目なケースが多いぞ
0264デフォルトの名無しさん
NGNGVC++.NETの話だけど、Wizardが吐いたデフォルトのstdafx.hだと
やっぱ同じようなエラーになったあるよ。
#define _WIN32_WINNT 0x500
に変えないとSetLayeredAttributesのプロトタイプを読み込まなかったよ。
デフォルトはこの値が0x400だったよ。
0265デフォルトの名無しさん
NGNG#define _WIN32_WINNT 0x500
でビルド/実行できました。
0266デフォルトの名無しさん
NGNG使った方がよいのでしょうか?
私の見た範囲では,クリップボードにコピーする必要がなかったらGlobalAllocは使わずに
mallocを使ったほうがよいように思うのだが.
それともGlobalAllocはmallocより便利/お得な機能(例えば,早いとか)でもあるのでしょうか?
0267デフォルトの名無しさん
NGNGmallocは結局APIでアロケートしてます。
0269デフォルトの名無しさん
NGNGmallocの方がお手軽。
でも、ランタイムのメモリ機能使ってると、DLLだらけの時にたまにはまるんだよなあ。
0270デフォルトの名無しさん
NGNG現在Windows2000で常駐してスクリーンセーバが起動中とか、
コンピュータがロック中とかを監視するアプリケーションを
作っています。
スクリーンセーバの方は何とかできたのですが、ロック中は
どうにもわかりません。
コンピュータがロック中かどうかを取得する事は可能でしょうか?
ご存知の方、お教えください。
よろしくお願いいたします。
0271デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/developer/library/jpwinpf/_win32_globalalloc.htm
によると、
GlobalAlloc
指定されたバイト数のメモリをヒープから割り当てます。Win32 のメモリ管理機能は、グローバルヒープとローカルヒープを区別していません。
注意 グローバル関数は他のメモリ管理関数より低速で、提供する機能も多くありません。そのため、新しいアプリケーションは「heap functions」(ヒープ関数)を使うべきです。しかし、DDE 関数とクリップボード関数では、依然としてグローバル関数が使われています。
だそうだ。
「他のメモリ管理関数」が何をさしているか分からん+ヒープ関数ってなんだってのが
あるので、誰か解説してくれ。俺も知りたい。
0272デフォルトの名無しさん
NGNGHeapCreate(), HeapAlloc(), HeapFree(), HeapDestory()
あたりでしょ。
0273266
NGNGmallocよりGlobalAllocの方が,早くてよさそうですが,>>271 にある「他のメモリ関数より
低速」とあるのですが,「他の関数」は他のAPI関数を指しているということでしょうか?
早さ比較: malloc() -> GlobalAlloc() -> HeapAlloc() の順で早くなるという理解で
よいのでしょうか.
0274デフォルトの名無しさん
NGNG得に問題が起こってない限りはmalloc使っといたほうがお得だと思うよ
ライブラリ実装者はmallocに何らかの機能を加えて高速化してるかもしれないでしょ。
だいたい、どれが速いかなんて自分で調べればわかるもの。
0275デフォルトの名無しさん
NGNG速さの差は誤差の範囲と言っていいと思うよ。順序はあってるけどさ。
むしろ、それが気になるほど頻繁に割り当て・解放を行なっているのなら
別の問題が起きそう。ヒープの断片化とか。
0276デフォルトの名無しさん
NGNGOpenInputDesktop→GetUserObjectInformationでOK、
と思って試してみたら、ロックされているときはエラーになるなあ。
はっ、そうか、エラーが帰ってきたらロックされていると思えばいいんだ。(いいのか?)
0277デフォルトの名無しさん
NGNG思ってたんだけどな。malloc() が遅いというデータってある?
0278デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNGよって、最初の1度の確保に限れば、HeapAllocがもっとも高速と思われ。
但し、細切れを何個も確保するのであれば、愚直なHeapAllocより
それなりの管理をしてくれるmallocの方が、よりbetterな選択と思われ。
0281デフォルトの名無しさん
NGNGblock size = 1024 bytes, 1000000 times
malloc: 595msec.
GlobalAlloc(GMEM_FIXED): 743msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 1158msec.
HeapAlloc(0): 629msec.
HeapAlloc(HEAP_NO_SERIALIZE): 603msec.
HeapAlloc(HEAP_ZERO_MEMORY): 1089msec.
block size = 10240 bytes, 1000000 times
malloc: 630msec.
GlobalAlloc(GMEM_FIXED): 735msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 3441msec.
HeapAlloc(0): 665msec.
HeapAlloc(HEAP_NO_SERIALIZE): 626msec.
HeapAlloc(HEAP_ZERO_MEMORY): 3346msec.
block size = 102400 bytes, 1000000 times
malloc: 1020msec.
GlobalAlloc(GMEM_FIXED): 1118msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 55862msec.
HeapAlloc(0): 1036msec.
HeapAlloc(HEAP_NO_SERIALIZE): 1011msec.
HeapAlloc(HEAP_ZERO_MEMORY): 55839msec.
block size = 1048576 bytes, 1000000 times
malloc: 25076msec.
GlobalAlloc(GMEM_FIXED): 25633msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 25267msec.
HeapAlloc(0): 25631msec.
HeapAlloc(HEAP_NO_SERIALIZE): 25630msec.
HeapAlloc(HEAP_ZERO_MEMORY): 25269msec.
0282デフォルトの名無しさん
NGNG最初の1度に限るのってあんまり意味無くない?
mallocって何か閾値を境に動作が変わるんだったっけ。
0283デフォルトの名無しさん
NGNG>malloc()の方が早いと思うよ。API呼び出しはオーバーヘッドがでかいって聞いた事あるし。
あふぉか。
0284デフォルトの名無しさん
NGNG今度はbcc32
block size = 1024 bytes, 1000000 times
malloc: 227msec.
GlobalAlloc(GMEM_FIXED): 705msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 1189msec.
HeapAlloc(0): 655msec.
HeapAlloc(HEAP_NO_SERIALIZE): 609msec.
HeapAlloc(HEAP_ZERO_MEMORY): 1144msec.
block size = 10240 bytes, 1000000 times
malloc: 227msec.
GlobalAlloc(GMEM_FIXED): 735msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 3344msec.
HeapAlloc(0): 685msec.
HeapAlloc(HEAP_NO_SERIALIZE): 612msec.
HeapAlloc(HEAP_ZERO_MEMORY): 3304msec.
block size = 102400 bytes, 1000000 times
malloc: 71526msec.
GlobalAlloc(GMEM_FIXED): 1068msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 56017msec.
HeapAlloc(0): 1015msec.
HeapAlloc(HEAP_NO_SERIALIZE): 1008msec.
HeapAlloc(HEAP_ZERO_MEMORY): 55774msec.
block size = 1048576 bytes, 1000000 times
malloc: 51318msec.
GlobalAlloc(GMEM_FIXED): 53775msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 53803msec.
HeapAlloc(0): 53058msec.
HeapAlloc(HEAP_NO_SERIALIZE): 52757msec.
HeapAlloc(HEAP_ZERO_MEMORY): 53770msec.
0285デフォルトの名無しさん
NGNG......
0286デフォルトの名無しさん
NGNGVCとの差はヒープ管理にかける時間の差かな。
単純パターンじゃなくて複雑な使い方すると、また違った比率になるかも。
0287デフォルトの名無しさん
NGNGmalloc: 672msec.
GlobalAlloc(GMEM_FIXED): 697msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 1173msec.
HeapAlloc(0): 642msec.
HeapAlloc(HEAP_NO_SERIALIZE): 582msec.
HeapAlloc(HEAP_ZERO_MEMORY): 1126msec.
malloc: 671msec.
GlobalAlloc(GMEM_FIXED): 718msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 3350msec.
HeapAlloc(0): 660msec.
HeapAlloc(HEAP_NO_SERIALIZE): 602msec.
HeapAlloc(HEAP_ZERO_MEMORY): 3321msec.
block size = 102400 bytes, 1000000 times
malloc: 677msec.
GlobalAlloc(GMEM_FIXED): 1080msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 55596msec.
HeapAlloc(0): 1032msec.
HeapAlloc(HEAP_NO_SERIALIZE): 951msec.
HeapAlloc(HEAP_ZERO_MEMORY): 55542msec.
malloc: 35152msec.
GlobalAlloc(GMEM_FIXED): 25284msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 25550msec.
HeapAlloc(0): 25143msec.
HeapAlloc(HEAP_NO_SERIALIZE): 25544msec.
HeapAlloc(HEAP_ZERO_MEMORY): 25554msec.
0288デフォルトの名無しさん
NGNG謎なのが、100kbの時のmallocの異常な遅さと、
1MBの時の遅さ(他のコンパイラのおよそ2倍)
API呼び出しも遅くなってるのが謎。
0289デフォルトの名無しさん
NGNGif (割り当てサイズ <= __sbh_threshold) 独自のメモリ割り当て
else HeapAlloc()
みたいなのが書いてある。大きなブロックではAPIと同じぐらいの時間ということか。
謎は解けんが・・・0クリアごときでなぜそんなに違いが出る?
0290デフォルトの名無しさん
NGNG>1MBの時の遅さ(他のコンパイラのおよそ2倍)
>API呼び出しも遅くなってるのが謎。
アフォか。
0291デフォルトの名無しさん
NGNG[VC6]
block size = 1048576 bytes, 1000000 times
malloc: 25076msec.
GlobalAlloc(GMEM_FIXED): 25633msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 25267msec.
HeapAlloc(0): 25631msec.
HeapAlloc(HEAP_NO_SERIALIZE): 25630msec.
HeapAlloc(HEAP_ZERO_MEMORY): 25269msec.
[BCC]
block size = 1048576 bytes, 1000000 times
malloc: 51318msec.
GlobalAlloc(GMEM_FIXED): 53775msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 53803msec.
HeapAlloc(0): 53058msec.
HeapAlloc(HEAP_NO_SERIALIZE): 52757msec.
HeapAlloc(HEAP_ZERO_MEMORY): 53770msec.
[g++]
malloc: 35152msec.
GlobalAlloc(GMEM_FIXED): 25284msec.
GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT): 25550msec.
HeapAlloc(0): 25143msec.
HeapAlloc(HEAP_NO_SERIALIZE): 25544msec.
HeapAlloc(HEAP_ZERO_MEMORY): 25554msec.
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNG単にアフォかといいたいだけちゃうんか。
0295デフォルトの名無しさん
NGNG>>292
283は確かに俺も「オーバーヘッドって何のことだ?」と思った。
0296デフォルトの名無しさん
NGNGVMwareでインストールしたけど、PSDKを入れないといけないんで面倒
DMCも面倒だ
0297201
NGNG「手元でマウスが何センチ動いたか」知る方法は無いでしょうか?
今は、例えば400CPIのマウスだと、ウインドウズ側のマウスの速度の設定を
最大にすれば手元で一インチ動かすあたり400カウント取れるので
そこからセンチを逆算しているのですが、
できればウインドウズ側の設定によらず取りたいのです。
つまり、マウスを距離を測るセンサのように使うことはできないかということです。
昔の98だと、マウスはただ単にロータリーエンコーダとしてしか
見ていなかったと思うので、出来ると思うのですが・・・
よろしかったら、どなたかよろしくお願い致します。
パソコン自体初心者なので、間違いがあったら申し訳ありません。
0298デフォルトの名無しさん
NGNG定規で測る。
0299デフォルトの名無しさん
NGNG鬼だね。
でも、mousemoveで始点から終点の座標とれば動いた分は分かると思うのですが。
って、思いついただけなのでコード書いてないけど。
0300デフォルトの名無しさん
NGNGマウスの分解能はマウスの機種によりさまざま。
インターフェイスもPS/2マウスでなくUSBでより自由になっている。
また、ドライバにより普通に「加速」が行われるため、マウスが元の位置に戻ってきても
マウスカーソルは元の位置に戻らないことも多い。
さらに、ポインティングデバイスがマウスでない環境もノートには多い。
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG>>301のように、デバイスの座標がそのままディスプレイ上の座標になるような物を使えば測れそうだけど
(俺の使ってるマウスも測れる)
0304デフォルトの名無しさん
NGNG位置の変化量を検出するセンサとして使いたいのです。
詳しく言うと、光学式マウスの発光部というかマウスパッドを見ている部分に
焦点をあわせて細長い紙かなんかを付け
それを上下させて何センチ動いたかどうかを知りたいのです。
だから一般的なソフトとしてすべての環境で動かすことを考えるのではなく
今の自分の環境(光学式マウス、400CPI)で動けばよいのですが・・・
説明下手ですみません。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG光学式マウスの精度ってそんなに信頼できるものなの?
0307デフォルトの名無しさん
NGNGまたシリアルにああいったセンサを取り付けても良いのですが
予算の問題で・・・
0308デフォルトの名無しさん
NGNG紙を動かすことは可能ですか?
タブレットを使えば1万円程度で出来そうですけど
0309デフォルトの名無しさん
NGNGそこは問題ですね。
とりあえずは1ミリ単位(できれば0.1ミリ単位)で測定できればいいと
思っていたので
まあこのくらいなら誤差も無く測定できるかと決め付けていたのですが・・
0310デフォルトの名無しさん
NGNG紙を上下してその動きを見るつもりです。
タブレットで出来るのでしょうか。
タブレットの仕組みがいまいちよく分からないので
今から検索してきます。
0311デフォルトの名無しさん
NGNGやりたいことは単純にいうと、
「上下動する細い針金の変位の推移を見たい」っていうことです。
ただ上下動する力が大変弱い(だろう)ので、針金に紙を張って
紙の上下動を固定した光学式マウスのセンサ部で見たいっていうことです。
(それなら紙に触らなくてすむだろうってことです)
なんだか板&スレの趣旨とかけ離れてきてしまって
申し訳ありません。
やっぱりマウスドライバを自作
(マウスの中でシリアルとして変換されている信号を直に取る)
しかないのでしょうか・・・でもそんなの出来なさそう・・・
0312デフォルトの名無しさん
NGNG接触させないと最大限の精度は出ないでしょ
0313能無しさん
NGNGそこを上手く常に通るようにすれば接触無しでも大丈夫かと思ったのですが・・・
周りを覆って暗くしないと駄目っていうことでしょうか。
0314デフォルトの名無しさん
NGNG簡単なタイマーを作ろうと思ってます。<時間が来たらなるやつです
まず、WM_CREATEメッセージが来たときにCREATEWINDOW関数で
ウインドウの中のクライアント領域に
タイマーの開始、終了というボタンを作ります。
そして裏画面のビットマップに「残り時間9:54」みたいな感じで
TEXTOUT関数で表示し、そのビットマップを表画面に転送します。
これを一秒ごとにやると
クライアント領域のボタンがチラチラします。
なぜでしょうか?また解決法などございましたらご教授ください。
よろしくお願いします。
0315デフォルトの名無しさん
NGNG書き換えにも時間がかかるからです。
ダブルバッファとか調べてみればいいかと。
0316デフォルトの名無しさん
NGNG即レスありがとうございます。
ダブルバッファですね。調べてみます。
0317デフォルトの名無しさん
NGNGちらつかない。
WM_ERASEBKGNDでreturn NULL;するといいと思われ
0318デフォルトの名無しさん
NGNGありがとうございます。
早速試してみます。
0319デフォルトの名無しさん
NGNG>314 クラススタイルにCS_CLIPCHILDRENとか付けてみたら?
0320デフォルトの名無しさん
NGNGWNDCLASSEX wcl;
wcl.style = CS_CLIPCHILDREN;
でいいんですよね・・?
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGWS_CLIPCHILDREN?
0323デフォルトの名無しさん
NGNGWS_では?
0324デフォルトのななしさん
NGNG0325デフォルトの名無しさん
NGNGwcl.style = WS_VISIBLE|WS_CLIPCHILDREN;に変更すると
なぜか全くウインドウが表示されなくなりました・・・
0326デフォルトの名無しさん
NGNG0327314
NGNGようやくちらつかないで描画が出来ました。
WS_CLIPCHILDRENっていうのは子ウインドウ以外のところを
描画するようにするっていう命令なんですね。
皆さん、本当にありがとうございました。
0328デフォルトの名無しさん
NGNGBitBltすると異常に遅くなるんだけど理由知ってる人いる?
Celeron850Mhz,MX400で320x240x16bitの転送に
200msecぐらいかかった。鬱。
0329デフォルトの名無しさん
NGNG0330328
NGNGその通り。
Celeron500のNTでは8msecぐらいなんだけど。
俺なんか間違ってるかなあ?
0331デフォルトの名無しさん
NGNG画面の色数の設定や、ドライバのバージョンでも変わりそうな気がするよ
特にXPはいろいろ変わってそうだし
0332328
NGNGDirectX使ってビデオメモリアクセスまでやったけど
なんかビデオメモリやDDBにアクセスする時点でOSが介入して
なんかしてるみたいなんだよね。
(DDB→DIB変換は仕方ないとして。)
で、どうやったかというと、GetBitmapBits使った。
大丈夫かどうかは分からんけどとりあえず解決。
0333デフォルトの名無しさん
NGNGチャットプログラムなんですがスクリーンセーバーが起動すると
自動的にニックネームを変えたいので、監視したいんですが。
0334デフォルトの名無しさん
NGNGGetDIBitsも駄目でしたか
0335デフォルトの名無しさん
NGNGSPI_GETSCREENSAVERRUNNING
ただしWin98/2000以降
0337デフォルトの名無しさん
NGNGvoid title(HWND, const char*, ...);
として、
title(hWnd, "ゲームを開始して%dミリ経過", tim);
つまり内部でsprintfすることによって、関数を呼ぶ側での手を抜きたいのですが、
自作関数title内部でうまーくsprintfにもっていく方法がわかりません
何か妙案はございませんでしょうか?
0338デフォルトの名無しさん
NGNGマクロとかは?
0339デフォルトの名無しさん
NGNG早速の解答ありがとうございます
マクロですか。ですが「不特定の数の引数を考慮したマクロ」の記述方法がわからないのです
#define TEST(x) if (x)〜〜〜〜
などは今も色々なHPで確認できたのですが、不特定の数の〜〜マクロはさすがに扱っているところが見つかりません
よろしければ組み方の例など教えていただけるとうれしいです
もしくはマクロに詳しいサイトなど教えていただけると
0340デフォルトの名無しさん
NGNGhttp://www.st.rim.or.jp/~phinloda/cqa/cqa8.htmlはどうですか?
誤爆しちゃったよ
0341デフォルトの名無しさん
NGNGそこによるとどうやら「使わないほうがいい」という結論のようですが、他のFAQもかなり参考になるものばかりでした
感謝いたします
うーん。やはり素直にtitle(const char*)にして、アプリ側で文字列用意させるしかないですかね
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNGお、新情報ありがとうございます
ぱっと見たところうまくいきそうな予感がします
今から作成してみますのでまた詰まったら相談しに来させていただきたいと思います。では
0344デフォルトの名無しさん
NGNG一応同じ質問がきたときのために私のサンプルを張っておきますね
#include <stdio.h>
#include <stdarg.h>
void title(const char *Format, ...){
char str[256];
va_list argp;
va_start(argp, Format);
vsprintf(str, Format, argp);
va_end(argp);
printf(str);
}
int main(){
title("%d秒%s", 150, "でやんす");
return 0;
}
0345デフォルトの名無しさん
NGNGvsprintfではなく、vsnprintfを使えという声が近頃は大きい。
しかしWindowsのLIBCにはvsnprintfがない罠
0346デフォルトの名無しさん
NGNGサンプルとは言え、printf(str) はまずいだろう。str に '%' が含まれてた
ら、こけるぞ。printf("%s", str) か puts(str) にした方が無難だよ。
>>345
_vsnprintf() じゃダメなの ?
0347デフォルトの名無しさん
NGNG"Microsoft Layer for Unicode"使って、プログラム内部でUNICODEを扱えるようにはなってます。
しかし、エディットコントロール上だとUNICODEフォントを指定していても全角文字は化けてしまう…。
ちなみに、半角英数はなぜか大丈夫です。
0348デフォルトの名無しさん
NGNGMSLU入れてもコントロールの実態は影響受けない(→今まで通り使えない)のでは。
リッチエディット使うとか…MSLU入れなくてもWin9x系でUNICODEが扱えます。
0349 ◆tYf6yb3Y
NGNG0350デフォルトの名無しさん
NGNGWin64API が流行るまでじゃないの ?
0351デフォルトの名無しさん
NGNGそれはいつくらいになりそう?
0352デフォルトの名無しさん
NGNG5年後ぐらいかなあ...
0353デフォルトの名無しさん
NGNGつーか、主語を明確にしろよ・・
0354デフォルトの名無しさん
NGNG何に対するレスなのか明確にしろって
0355デフォルトの名無しさん
NGNGそりゃ、>>394 に対するレスだろ。充分明確だよ。
このスレには存在しないのが問題だけどさ...。
0356394
NGNG0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG{
::CreateFile(argv[0],GENERIC_READ,0,0,OPEN_EXISTING,0,0); // 2重起動防止
〜〜〜〜〜〜〜
.exe の拡張子を .ini にしただけのINIファイルを守るために、
↑のようなコードを思いつきました。
小手先技くさいので、ちゃんと守れてるか心配です。
main開始からCreateFileの間の時間以外に、抜け道ありますかね?
0359デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGMutex の名前をパス名から生成すれば良いやん。
0362デフォルトの名無しさん
NGNGアクティブウィンドウが無い場合に起こりやすいです。
回避方法はあります?
0363デフォルトの名無しさん
NGNG関係ないけど、VBのApp.PrevInstanceってまさに360+361の動作するんだよねえ。Semaphoreみたいだけど。
ヘタレVBめ。
0364347
NGNGレスありがとう。
その指摘を受けてさっそくRichedit2.0を使ってみたんだけど、上手くいきませんでした。
結果、入力はどれもダメ。
文字入力したときの表示は問題ないけど、GetWindowTextで文字列取得するとUNICODEでも
S-JISでもない、バイナリ(既に文字でない)が返ってくる。
で、正しいコードを入れて表示させると各言語によって対応は大違い。
日本語は、日本語のみOK、簡体、繁体は一部文字化け。ハングルは全部ダメ
英語は、半角英数のみOK、他言語表示はまるでダメ。
韓国語は、ハングルのみOK。日本語、簡体、繁体は一部文字化け。
中国語は、OS入れるスペースがないので試してません…。
…と、自分の国以外は完全対応してないようです。
やっぱり、Win98でUNICODEは無謀なのか…。(;´д⊂
0365U-ハァハァ(;´Д`)さん
NGNGオラオラ もっとキッチリ試せ (#゚Д゚)ゴルァ!
各文字コードセットの値の端っこ付近とか、
1コずつブッ込んで試してみれ。
入力した値に対して、表示だけではなく、
各桁位置から取得できるコード(1バイトずつ桁をずらしてみる)を
元のコードと比べて評価しよう DEATH!
丹念に小一時間調べれば、
誰も知らない、新事実をお前様があきらかにすることに
なりましょうぞ ・・・・・(;´Д⊂
0366デフォルトの名無しさん
NGNGM$からzh-chとzh-twのフォントDLさせてもだめ?
(すれ違いだけど)WebBrawserコントロールかCHtmlViewなら簡単に表示できそう
だけど。
0367デフォルトの名無しさん
NGNGSendMessage(…,EM_GETTEXTEX,…);
で取ってみそ。
0368367
NGNG0369347
NGNG励ましありがと〜。どうも、最近になって諦め癖がついてたようです。
まだ調査継続中ですが調査の中間結果を…
GetWindowText()が変更するバイト数は、[S-JISでの入力バイト数*2+2](最後の+2はNULLかも)
どうも、リッチエディット(以下Riched)のフォントはUNICODEでも、実際にRichedが保持している
文字情報はS-JISっぽい?
で、私見ですがWin98SEにMSLUを使用した場合のGetWindowText()内部は、
Richedに入力されたS-JISのデータを(制御コード含め)「そのまま」にUNICODEに読み替える。
↓
読もうとして読めたやつはその文字コードで固定。読めなかったやつは、"?"[0x003F]に変換。
S-JISで換算して奇数Byteの入力の場合、1Byte余るので[0x00]をくっ付けてそのままUNICODEに。
↓
そうすると、変更予定バイト数に明らかに足りないのでそこは[0x0000]で埋める。
こんな感じかな。そうなると大半の出力が"?"だけになるのとも合致する。
それと実験して見つけた実証パターンとして"0テf"[36-83-65-66]を入力すると
"茶�ユ"[36-83-65-66]とでるので、部分的に違うところがあっても完全に間違いではないと思う。
逆にこれが本当だとすると、使い物にならないと言う結論が出そうで怖い…(;´д⊂
-------------
…と、ここまで書いて>>367さんの書き込みを発見。
で、それを使ったら入力は一発で出来ました。ヽ( ̄▽ ̄)ノ
ありがとうございます。
結論:
MSLUの実装するGetTextWindowW()など、ウィンドウからテキストを取得する関数は
UNICODEに対応してない!
さて、次は多言語表示だな…。とりあえず、>>366さんの発言を見てフォントを
DLしましたがダメでした。コントロール系はまだ試してません。
長々と書いてしまって、すみません…
0370デフォルトの名無しさん
NGNGマズUNICODEフォントを拾ってくるべし。
http://www.microsoft.com/downloads/searchdl.asp?
で、keyword searchにしてunicodeで検索すると、
Arial Unicode MS Font for Publisher 2000
ってのがある。フォントの中身を全部確認した訳ではないが、漢字・ハングル・簡体
は少なくとも同時に表示できる。
あとは実際の表示だが、MSLUがどこまで出来るかワカランからあれだが、漏れが
Win9xで作ったソフト(MSLU無し)では、TextOutWを使った。これはWin9xにもある
APIだす。がんがれ!
0371デフォルトの名無しさん
NGNGアクティブウインドウが存在しない状態は有り得ない。
たとえばデスクトップやタスクバー、
もしくは不可視のウインドウにかならずアクティブ属性が設定されている
0372362
NGNGでも、GetForegraundWindow()の結果が0になる場合があります。
その時は、フックに通知がいかないみたいです。
0373デフォルトの名無しさん
NGNGデスクトップに表示されているリストビューとかとは別の。
0374362
NGNGGetDesktopWindow()は0じゃないですよね。
別物なんですか?
0375デフォルトの名無しさん
NGNGそれもデスクトップ。
しかし、Windowsにおける(本来の)デスクトップはもっと
上の階層で、Winlogonデスクトップ(だっけ?)とか、
スクリーンセーバーのデスクトップなる物が存在し、
特定のウインドウをデスクトップと呼ぶ物ではなく
0をデスクトップを表す物として扱っている。
0376デフォルトの名無しさん
NGNGデスクトップはHDESK型のハンドルで識別されるまったく別の概念のオブジェクトなので、
GetForegroundWindowの返却値にはなりえない。
MSDNで見つけた0を返すケースとして、
・他のデスクトップがアクティブのとき
・アクティブなウィンドウが変わる瞬間
みたいな記述見つけたけど、もっとベタなケースあったような気がするんだけどなー。NT3.51の時だったかなあ。
0377362
NGNGタスクトレイをいじっていると、0を返す場合があるみたいです。
Win98/2000で確認しました。
こうなったらフックは駄目みたいなので、諦めます。
いろいろありがとうございますた。
0378347
NGNG"Arial Unicode MS"は既に入ってます。それとこっちの事情でしかないんですが、現在
作ってる物はいろいろ制限がありまして、GDI関連やMFCは使えないのです…。(;´д⊂
で、昨日の続き。
WebBrowserコントロールを使ってみました。なにも入れなくてもすんなり表示してくれました。
でも、やっぱりこれって文字列そのまま入力は出来ないですよね…。
やるとすれば表示する文字列を逐次ファイルに書き込んで、そのURIを参照すると言う方法かな。
ついでに装飾も出来て面白そうかも。(必要ないけど)
でも、IEに関する余計な(表示以外の)機能を封じないといろいろ問題が出そうな気がする。
とりあえず、リッチエディットとWebBrowserの両方をもう少し探ってみます。
0379デフォルトの名無しさん
NGNGTEXTAREAを全面に貼ったらどうよ
>>350
.NETが流行るまでだと思う
Win64 APIは今までのように直接使われることはあまりないと予想
0380厨
NGNG取得する方法ありませんか?
0381デフォルトの名無しさん
NGNG自分のプログラムがアクティブのときは
マウスの座標の取得できるんだよねぇ。
グローバルフックでいろいろ検索してみそ。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNGWindows の ミキサー制御低レベル API を使って録音ソースの選択を
プログラムから切り替えようとしたところうまくいかず行き詰まっています。
以下のような手順で録音ソース選択のコントロールを取得できると思った
のですがうまくいきませんでした。
mixerGetNumDevs()
mixerGetDevCaps()
mixerOpen()
mxl.dwDestination = 1; // 録音ライン
mxl.dwSource = 1; // 録音ソースとして選択したいコネクション(マイク)
mixerGetLineInfo((HMIXEROBJ)hMixerHandle,&mxl, MIXER_GETLINEINFOF_SOURCE )
この時点で mxl.cControls が1となっていて、Volume Control のみが
関連付けられています。
試しに mxl.dwDestination を再生ラインに変えて各コネクションの
コントロールを調べるとVolume Control 以外に Mute Control もあったので、
てっきり録音ラインのコネクションにも Select Control ? のようなものが
関連付けられていると思っていたのですが・・・
ミキサー制御に詳しい方、ご教授をよろしくお願いいたします。
この辺詳しく勉強したいので参考になる本なども合わせて
教えていただけると助かります。
0386347
NGNGあ、いや入力とは言ってもユーザーからの入力ではなくプログラム内部からの入力でして…。
結局、RichEdit3.0でなら表示含め可能でした。ちなみに、EM_GETTEXTEXとEM_SETTEXTEXを使って実現してます。
WebBrowserの方はIEのバージョンによって微妙なところがありそうなのと
「RichEditが使えるならいいや」という事で放置しました。(^^;
ただ、Win95/98/98SEにRichEdit3.0対応のDLLが入ってないんで、
Riched20.dll(5.30.23.1200以降?)をアプリに付けて再配布しなきゃいけませんが。
その前に再配布可なバージョンはどれだろう…。
0387デフォルトの名無しさん
NGNGmixerGetControlDetailsしてみるとどう?
あとは提示のコードでMIXER_GETLINEINFOF_DESTINATIONとか。
0388デフォルトの名無しさん
NGNGVC++でAPIプログラミングしてます。
ダイアログボックスをリソースエディタで作成し、閉じるの×ボタンを表示しないようにして、
ダイアログを終了されないようにしています。
ところが、Alt+F4で閉じてしまいます。
WM_DESTROYなどでも、検出できなくて困っています。
ご教授お願いします。
0389デフォルトの名無しさん
NGNG嫌がらせか?
とりあえずここでも読んどけ。
readme.txtにアンインストール情報を!
http://pc.2ch.net/test/read.cgi/prog/997370579/l50
0390デフォルトの名無しさん
NGNGWM_COMMAND の LOWORD(wParam) == IDCANCEL で検出できますね。
ただ、この場合、タスクマネージャーから強制的に終了してやらないといけなくなるので注意
0391389
NGNG補足。return TRUE ; とすると、終了できなくなるよん。
return FALSE ; だと、デフォルトのダイアログプロシージャ
に処理がわたってしまうのでの
>>389
まぁ、スプラッシュウインドウとかもあるしね。
B's Gold の焼いてる途中のダイアログも終了できないし(w
0392デフォルトの名無しさん
NGNGまったく、効かないです。
強制的にどころか、デバッグでブレークポイントを作ったのですが、
とまりません。
ダイアログの表示自体は、DialogBox()で、作っているのですが…。
なにか、解りませんでしょうか?
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG消してます!
0395デフォルトの名無しさん
NGNGありがとうございました。
教えていただいたとおり
mxl.dwDestination = 1; // 録音ライン
に対して
mixerGetLineInfo(
(HMIXEROBJ)hMixerHandle, &mxl,
MIXER_GETLINEINFOF_DESTINATION )
すると "Record Select Switch" というコントロールが見つかりました。
あとは
mixerGetControlDetails(
(HMIXEROBJ)m_hMixerHandle, &mxcd,
MIXER_GETCONTROLDETAILSF_VALUE )
で MIXERCONTROLDETAILS_BOOLEAN の配列を取得して録音ソースの選択状態を
正しく調べることが出来ました。
こんなところにあったのですね。ありがとうございました。
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG確認する方法はありませんか?
なんかマルチモニタ環境でしか起きない不具合を報告されて
かなり悩んでます。
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG他に方法がなければ安い外付けディスプレイを調達して来ようかと
本気で考え中だけど金掛けずに済む方法があれば
それにこしたことはないので
0401デフォルトの名無しさん
NGNGプライマリディスプレイとセカンダリディスプレイのDCに
互換があると思ってはいけない。
互換性がないと思いながらコーディングをしていくしか無いんじゃないかと。
0402デフォルトの名無しさん
NGNG設定しても、きちんとメッセージを送っていないようなのですが
こんなに速くは動かせないってことなのでしょうか?
時間の測り方
・左クリックをしたらSetTimer関数を使ってタイマーをかけ、
GetTickCount()でそのときの時間をとります。
・WM_TIMERの中では変数をインクリメントします。
・もう一度左クリックをしたらタイマーを殺し
GetTickCount()でまた時間をとります。
で、GetTickCount()で得られた値を引き算して
タイマーの動いた時間を得ているのですが、2000ミリ秒くらい
動かしても16回くらいしかWM_TIMERが呼ばれていないのです。
将来的にはマウスカーソルの動きを10ミリ秒に一回くらい取りたいのですが
そんなのは不可能なのでしょうか?
長文失礼致しました。
誰か、よろしかったら教えてください。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGそうなんでしょうか。
どうやったら正しい計測が出来るでしょうか?
0405デフォルトの名無しさん
NGNG測定時間を2秒なんつー短い時間にしないでせめて20秒見てみるとか
0406デフォルトの名無しさん
NGNG計測時間:22237ミリ秒
計測回数:199回 でした。
本来なら222回呼ばれてないとおかしいと思うのですが・・・
0407デフォルトの名無しさん
NGNGどうやったら、以前に
おまえのプログラムにバグがあるか確認しろよ
0408デフォルトの名無しさん
NGNGバグは無いと思います。
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG思いますは思いますでしょう?
可哀想な方ですね(ププ
0411デフォルトの名無しさん
NGNG0412402
NGNG思いますっていうのは・・・たぶん無いだろうってことなんですが・・
なんせ素人なんで良く分かりません。
どうやったらいいのかって聞いたのは>>403さんが
僕の書いた計測方法を読んで
間違いがあるのに気付いたのかと思ったからです。
0413402
NGNG本当にありがとうございます。
早速検索してみます。
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNGNT系ではいちおう10msの精度があることになってるらしいが
0417デフォルトの名無しさん
NGNG0418402
NGNGマウスの変位を文字列に入れて描画して
その変位を配列に次々に保存していっても
きちんと10ミリ秒で動くようになりました。
アドバイスくださった皆様、本当にありがとうございました。
そのうち恩返しが出来るよう頑張ります。
0419デフォルトの名無しさん
NGNG2ちゃんにはめずらいしい、まじめなレスだのう
しかし、あと半年も2ちゃんにいれば、
「氏ねやゴルァ」とか言ってるんだろうなぁ シミジミ <- テナニガ?
0420デフォルトの名無しさん
NGNGクリックした時の一回しか来ないんですけど
マウスのボタンが押されている間中届いている
メッセージってあるんですか
0421デフォルトの名無しさん
NGNG普通、WM_LBUTTONDOWN来たらSetCaptureしてWM_LBUTTONUP監視じゃねぇの?
もしかして、もっと簡単な方法あるのか…
0422デフォルトの名無しさん
NGNG押してる間中届いてたらマシンがとんでもなく重くなる罠
0423デフォルトの名無しさん
NGNGcase WM_CHAR:
switch (wParam) {
case 'i':
i++;
break;
}
これだとキーボードが押されているあいだくりかえされるのですが
これをウインドウの一点がクリックされてる間にも
くりかえされるようにしたかったんです。
これを実現する何か簡単な方法があったら教えてください。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGそれは関係ない。キーリピートが原因。
0427デフォルトの名無しさん
NGNGおいおい、マジで言ってるの?
TranslateMessageでWM_KEYDOWN/UP WM_SYSKEYDOWN/UPから
キーボードドライバを通してWM_CHAR/WM_SYSCHARを生成してるんだよ。
0428デフォルトの名無しさん
NGNGあんたこそマジ?
WM_KEYDOWN が実際にたくさん来てるんだよ。
ちなみに、WM_KEYUP は最後だけね。
0429デフォルトの名無しさん
NGNGアプリケーションのメッセージキューが作成されるまで待機する方法ありませんか?
起動直後に処理が戻るのではなく、準備が出来るまで待機したいのですが。
0430デフォルトの名無しさん
NGNG使ったこと無いから実は実際の動作は知らんのだけど、WaitForInputIdle() は?
0431デフォルトの名無しさん
NGNGthx!
期待通りの動作でした。
0432デフォルトの名無しさん
NGNG他のアプリのThreadを取得出来るAPIはない?
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNGそれはハンドル
0435デフォルトの名無しさん
NGNGDLLにでも入れとけ。
0436デフォルトの名無しさん
NGNGGetWindowThreadProcessIdとか?
0437デフォルトの名無しさん
NGNGThanks!
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNGLoadImageを使ってビットマップをそのまま読み込むようにしました。
ただ、この場合必ずビットマップの全域を読み込んでしまってビットマップのある一部分だけを
読み込むことができないんですが、これをする方法ってあるのでしょうか?
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNGパスを取得するにはどうすればいいでしょうか?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGポインタうんぬんで、char型を返したときに、
半角カナの「へ」がたくさん並ぶことがあるじゃないですか。
NULLあたり(?)でしょうか。
これは、検出する方法はあるのでしょうか?
教えてください。
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGGetWindowsDirectoryやらGetSystemDirectoryやら環境変数やら
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG環境変数やらとありますが、ProgramFilesディレクトリは
どのようにして環境変数から取り出せばいいでしょうか?
0449デフォルトの名無しさん
NGNG環境変数?
SHGetFolderPathではダメなのかいの?
0450デフォルトの名無しさん
NGNG後はSHRegGetPathやらGetEnvironmentVariableやら色々
0451デフォルトの名無しさん
NGNGSHRegGetPathはマチガイデシ
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNGSHGetSpecialFolderLocation()とSHGetPathFromIDList()を組み合わせて使え。
0454446
NGNGそれは文字列中に%ABC%みたいな形で書いてある環境変数を展開するやつだから、
使っても良いけどGetEnvironmentVariableで十分でしょ。
>>453
あー俺だったらそれ使うけど、初心者向きじゃないかなと思って薦めなかった。
0455名無しさん@カラアゲうまうま
NGNGなんでそれはあんなにめんどくさいインターフェースになってるんだ?
0456デフォルトの名無しさん
NGNGその世界ではフォルダを識別するのにitem id listというのを使ったり、
COMベースでインターフェースが提供されていたりするわけだ。
面倒くさいけど、「コントロールパネル」みたいな仮想フォルダを実現できるのは
このおかげ。
…そもそも環境変数の内容取得するのにわざわざAPIを使う必要わない。
0457デフォルトの名無しさん
NGNG更新時にちらついてしまい、更新頻度を50ms等にするとかなり見にくい状況です。
一応hWndを受けた時にメモリDCを作成してそこに描画し、
メインフレームで OnPaint が発生した時には
グラフ描画クラス内で GetDC して ウィンドウにBitBlt したあと ReleaseDC しています。
なんとかしてちらつきを低減したいのですが
DirectX以外の方法で実現する方法を教えてください。おながいします。
0458デフォルトの名無しさん
NGNGWM_ERASEBKGNDを処理汁
0459デフォルトの名無しさん
NGNG新しいSDKが出てた、あげ
0460457
NGNGメインフレームで OnEraseBkgnd をオーバーライドして
return 1; としたところ、ウィンドウサイズ変更時に全体がちらつく現象はなくなりました。
しかしスクロールするグラフ部分のちらつきは解消されませんでした。
こちらについてなにかご存知でしたら教えてください。
0461デフォルトの名無しさん
NGNGお前のスクロール処理がまずいんだろ
0462名無しさん@カラアゲうまうま
NGNG> 面倒くさいけど、「コントロールパネル」みたいな仮想フォルダを実現できるのは
> このおかげ。
GetWindowsDirectory()みたいのがあってもいいじゃん、と思ったんだが。
なんつーか、SHGetSpecialFolderLocation()の後始末がめんどくさ杉。
> …そもそも環境変数の内容取得するのにわざわざAPIを使う必要わない。
逆にCSIDL_PERSONALをsetenv("HOME")したかったんだけどね。
0463デフォルトの名無しさん
NGNGもしかして、OnPaint以外で画面の更新かけてる?
その場合ちらつきを防ぐのはかなり面倒だったような気が…
画面内容の更新は全てメモリDCにやって、OnPaintで実際のウィンドウに反映とか。
で、50ms間隔で更新したければそのタイミングでInvalidateRect()呼ぶとかでダメ?
0464457
NGNGその通りですた。
>>463
OnTimer でInvalidateRect(FALSE) と書いています。
どうやら本当にスクロール処理に問題があるようでした。
ためしにスクロール関数内でスクロールの代わりに
ランダムに線を描画させてみたところちらつきは発生しませんでした。
void CGraph::Scroll(int Pixcel, int direction)
{
POINT pnt;
MoveToEx(m_memdc, 0, 0, &pnt);// 以前のカーソルの位置を取得
BitBlt(m_memdc, rcPoint.left + 1, rcPoint.top + 1,
rcPoint.right - 1, rcPoint.bottom - 1,
m_memdc, rcPoint.left + Pixcel + 1,
rcPoint.top + 1, SRCCOPY);// 指定範囲をスクロール
MoveToEx(m_memdc, pnt.x - Pixcel, pnt.y, NULL);// スクロールした分カーソル位置を補正
}
まだバグバグですがとりあえずちらつきを直したかったので質問させていただきました。
描画自体は OnPaint() から、
void CGraph::Draw(int x1, int y1, int x2, int y2)
{
if(x2 == 0) x2 = ptGrid.x;// 全体の幅
if(y2 == 0) y2 = ptGrid.y;// 全体の高さ
HDC hdc;
hdc = GetDC(m_hWnd);
BitBlt(hdc, x1, y1, x2, y2, m_memdc, x1, y1, SRCCOPY);
ReleaseDC(m_hWnd, hdc);
}
こんな感じです。
スクロール処理の改善方法について何かご存知でしたらご教授いただけると助かります。
0465デフォルトの名無しさん
NGNGあ、ファイアーウォールのテストに使いたいだけです。
0467デフォルトの名無しさん
NGNGああそういうことか。
でもまさしくそういう用途のためにSHGetSpecialFolderPath()があるんじゃん?
動作環境の制限がうざいけどさ。
…最近はShGetFolderPath()なんていうのもあるのか、いじってないとすぐ知識が廃れるな。
0469デフォルトの名無しさん
NGNGScrollWindow使ってみろんぬ。
どうでもいいが、OnPaintに渡されたDCを使わずに勝手にGetDCするのは
最近の流行りなのか?
0470デフォルトの名無しさん
NGNGWin95にはなかったところを見るとMicrosoftもさすがに不便だと
思い直したんだろうな
0471457
NGNGScrollWindowEx と ScrollDC を使用することで
ちらつきの無いスクロールが実現できました。
ありがとうございました。本当に助かりました。
あと、勝手に GetDC しているのは OnPaint 以外の箇所から呼ばれた場合を考慮したからです。
0472デフォルトの名無しさん
NGNGäöüß <-ドイツ語のウムラウト
を表示させたいのですが、どうすればよいのでしょうか?
UNICODEアプリではないです。
0473デフォルトの名無しさん
NGNG欧文フォントを指定してはいかが?
0474デフォルトの名無しさん
NGNG上のドイツ語を貼り付けても aous としか表示してくれないです。
IEのテクストエリアだとちゃんと表示してくれます。
なぜなの。鬱
0475デフォルトの名無しさん
NGNGメモ帳なら表示するけど・・・。
欧文フォントでなくてもFixedSysで。
0476デフォルトの名無しさん
NGNGUnicodeアプリじゃないと不可能
でもUnicodeアプリはWin9xで動かない罠
ちなみにNT/2000/XPのメモ帳ならまったく問題なし
どうしても9xで使いたきゃActiveXでIEのエディット使え
0477デフォルトの名無しさん
NGNG絵ディとコントロールは無理ということであきらめます。
ところで、IEのエディットっていうのはHTMLEditのことで
しょうか?これもちょっと大掛かりになりそうなので、
自作する方向で考えてみます。
0478デフォルトの名無しさん
NGNGRichEdit 3.0とか
0480デフォルトの名無しさん
NGNGDelphiで使えるRichEdit 3.0のコンポーネントってあります?
0481デフォルトの名無しさん
NGNGRichEdit調べてみます。
0482デフォルトの名無しさん
NGNGどう考えても自作する方が大掛かりだろ……
0483デフォルトの名無しさん
NGNGこんなとこで質問しません。
0484デフォルトの名無しさん
NGNGとかを用意しなければならないので大変かなと。重くなりそうだし
エディットコントロールの変わりに使ってるのはみたことないしで、
それに比べれば、エディットの自作なんて、DrawText系で書くくらいかな
と思った次第です。
0485デフォルトの名無しさん
NGNGWndProc内でそのクラスのメンバ変数にアクセスできるようないい方法ないでしょうか?
考えたのはCreateWindowEx(・・・,this)
としておいて、そのクラスにstaticじゃないウィンドウプロシージャ(MsgProc)
ようなものを用意する。それで、
static LRESULT CALLBACK CWin::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
CWin *pWin;
switch(message)
{
case WM_CREATE:
pWin = (CWin *)lParam;
SetWindowLong(hWnd, GWL_USERDATA, (LONG)lParam);
break;
default:
pWin = (CWin *)GetWindowLong(hWnd, GWL_USERDATA);
}
return pWin->MsgProc(hWnd, message, wParam, lParam);
}
として実際の処理はMsgProcでするようにしてたんですけど、
他に何かいい方法がありませんか?
0486デフォルトの名無しさん
NGNG・MFC方式(テーブルからHWNDつかってルックアップ)
・ATL方式(「hWndをCWindow*にすり替え、本当のWndProcに
jmpするコード片」を自動生成して、WndProcとして登録する)
・グローバル変数を用いる方法(あんまし考えてないね)
などがあるようです。
0487デフォルトの名無しさん
NGNG> と思った次第です。
その程度の知識じゃ、プロポーショナルフォントで
カーソル制御するだけでも、苦労しそうだな。
とりあえず、マウスクリックされた位置が、
文字列のどの位置当たるか、判定する関数書いてみなさい。
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGエディットくらいは自作も簡単だろ、色分けやフォント変え(サイズ含む)出来るエディットコントロール作ったことがあるが、EM_系メッセージに対応させるのが量的に面倒だった事意外は別段普通だと思うが。
0491デフォルトの名無しさん
NGNGhwndをCWindow*にすり替えるってどういう事?
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG自作とカスタマイズを、混同してる気がするが?
0495デフォルトの名無しさん
NGNGVC6 持ってるなら、ATL のソース読むのが確実。
class CWndProcThunk;
CWindowImplBaseT<CWindow, CControlWinTraits>::Create()
CWindowImplBaseT<CWindow, CControlWinTraits>::StartWindowProc()
このあたりね。検索すると、いくつか解説のページが見つかるよ。
0496デフォルトの名無しさん
NGNGエディタからエディットコントロールまでには、
まだいくつかハードルがある。
まあ、エディットコントロールを
自作したほうが楽なんてキティな意見を、
無理矢理通そうとする奴に、何言っても無駄だろうが。
0497デフォルトの名無しさん
NGNGアンタの言うテキストエディタって、
RichEditやEDITを貼り付けるだけの物を言ってる?
コントロール自作出来ない奴は初心者だって言ってるんだが。
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNGおぃおぃ
0500デフォルトの名無しさん
NGNG> でもUnicodeアプリはWin9xで動かない罠
これ微妙。MSLUを使えば9x系でもプログラム内部でUNICODE使えます。
で、Richedit2.0以降を使えばUNICODE対応してるし。
ただし、Richedit3.0でないとEM_SETTEXTEXが使えないのでRichedit上に
UNICODEを表示したい場合は、5.30系のriched20.dllを用意するべし
さらに、9x系での入力はAciveIMM(GlobalIME)を使わないとコピペする以外に方法ない。(たぶん)
ちなみに、ActiveIMMはActiveXなんでIEコンポーネント使わなくても単独で使えるはず。
もう一つ言うと、NT系でもXP以外はデフォルトでUnicodeフォントが入ってないので、
Unicodeフォントを入れるか、各言語ごとにフォントを指定してやらないと多言語混在表示は出来ません。
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG何か勘違いしてないか?
誰もHTMLEditだなんて言ってないだろ。
FM20.DLLを知らないの?
0504デフォルトの名無しさん
NGNG#define UNICODE
してコンパイルしてみそ
CreateWindowEx()すら落ちるようになるから
0505デフォルトの名無しさん
NGNG明示的にTextOutWとか呼べばいいだけじゃん。
0506デフォルトの名無しさん
NGNG今回の話はEDITをUnicode対応にするって話だから、
単に表示できるかどうかって話じゃないのよ。
EDITをUnicode対応にするには、
CreateWindowExW()を使わないと駄目ってこと。
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNGコレなら9x対応のUNICODEテキストエディタ簡単に作れるよ。
0509デフォルトの名無しさん
NGNGいくらCOMが面倒でも、コードの量的に考えて、
全部自作する方が10倍以上コード量多いだろ、という話。
0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNGhttp://support.microsoft.com/default.aspx?scid=kb;EN-US;q224305
0512デフォルトの名無しさん
NGNGVBのランタイム入れれば済む話
どうせ今回は内輪で使うためで
一般配布が目的じゃないんだろうし
0513デフォルトの名無しさん
NGNGVBのランタイムに入ってないだろ
Officeの一部だろ
ま、内輪で使うんなら関係ないのは確かだけど
0514デフォルトの名無しさん
NGNGそんなに簡単に作れるんだったら、
誰か再配布自由なの作って配ってないの?
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGあら、そうだったのね。と言う事は「Unicodeフォントが入ってない」ではなく
「自国語以外の部分が無い」と言う方が正しいのか?
>>502
XP以外のOSでは、"Arial Unicode MS"はOffice2Kを入れるか、別途ダウンロードしないと
入ってないようです。XPは無くても上手くできるようになってるみたいだけど。
>>504
9x系で普通に"UNICODE"定義しただけでは、落ちるのは当たり前。OSがUnicode対応してないからね。
だから、"Microsoft Layer for Unicode(MSLU)"と言うライブラリがあるんだけど…。
0517デフォルトの名無しさん
NGNGWin2k使ったことあるか?
MSゴシックも明朝もハングル・ウムラウト表示できるし。
MSLUは使わなくても基本的なWideCharToMultiByteとか
TextOutとかGetTextExtentPoint32とかはW版もついてくるから
Unicodeアプリは動かなくても内部でUnicodeを使うことが出来る。
0518デフォルトの名無しさん
NGNGなるほど、こちらですね。
http://member.nifty.ne.jp/~katsuhiko/hedit.html
今回はWin32APIまたはMFCのアプリ作成が目的みたいですが、
Delphiコンポーネントって簡単に使えるのでしょうか?
>>516
こちらですね。
http://www.microsoft.com/globaldev/articles/mslu_announce.asp
つまり、MSLUを使うと、
OS組み込みのEDITコントロールも
XP相当のUnicode対応にできるということですね。
それでしたら一発解決ですね。
0519デフォルトの名無しさん
NGNG>>472-476
0520500=516
NGNG> MSゴシックも明朝もハングル・ウムラウト表示できるし。
IMEパッドで見たところ、ラテン系は"MS Pゴシック"がほぼ全域をカバーしてる。
他のはラテン拡張Bがほとんど無いですが、基本的なところはあるのである程度の表示は出来そう。
ハングルに関しては"MS(P)ゴシック","MS(P)明朝"には無かったけど、これってうちの
フォントがおかしい?
なので、"MS(P)ゴシック","MS(P)明朝"は「Unicodeでも表示できる」というだけな気が…
"MS UI Gothic"ならハングルからタイやアラビアまで、かなり広範囲をカバーしてました。
> Unicodeアプリは動かなくても内部でUnicodeを使うことが出来る。
もちろんそれは可能。でもAPIにUnicodeを渡せないと面倒じゃない?
いちいち変換かける必要が出てくるし。それが面倒じゃなければそれでも良いけど…。
>>518
あ〜、それがすんなり行かないのです。MSLUはあくまでAPIのラッパー的な役割しかなくて
コントロールまでは影響しません。ここらへんの解決策は >>347-378 にポツポツとありました。
0521デフォルトの名無しさん
NGNGCreateWindowWしたウインドウじゃなくても
TextOutWで描画出来るから、普通はあんまり問題にならないでしょ。
XP版msgothic.ttcと2k版msgothic.ttcは同一バイナリだった。
コンペア結果も一致。
msmincho.ttcは違ったけども。
0522デフォルトの名無しさん
NGNGGetWindowLong, SetWindowLongを失敗してしまいます
OrgMenuProc = (WNDPROC)GetWindowLong((HWND)GetMenu(hwnd), GWL_WNDPROC)
SetWindowLong((HWND)GetMenu(hwnd), GWL_WNDPROC, (LONG)MyMenuProc)
というような感じでやっているのですが
どこがいけないんでしょう?
0523デフォルトの名無しさん
NGNGそれで質問なのですが,ファイルを指定して開くときに GetOpenFileName を
使いますが,フォルダの場所だけを指定したいときには,どのような処理を
行えばよいのでしょうか?
やりたいことは,フォルダの参照ダイアログ ボックスを表示して,そこで検索したい
フォルダの場所(ディレクトリ)を指定するということをしたいです.
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG大きさになるように調整しているのですが、メニューの折り返しがあった場合(読み込んだ
画像の横幅が小さいとき)、その折り返しがあった分だけ、ビットマップを表示するスペース
が小さくなってしまい正しく表示されません。
なんかよい方法がないでしょうか。。。
分かりにくいので図に描くと以下のような感じです。
ある程度横幅があると正しく表示されるが、
タイトルバー
メニュー1 メニュー2 メニュー3
○○○○○○○○○○○○○○○○
△△△△△△△△△△△△△△△△
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
横幅が小さいときは、
メニュー1 メニュー2
メニュー3 <--- メニューの折り返し
○○○○○○○○○
△△△△△△△△△
◇◇◇◇◇◇◇◇◇ <--- この部分が切れて表示されない
枠をマウスで広げないと表示されない
となる
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGおぉ!出来た!!
ありがとうございます.
0528デフォルトの名無しさん
NGNGHMENUはHWNDじゃないってことだよ。
>>525
アジャくんはあくまでメニューが1行としてしか計算してくれないからね。
サイズ変更した後にクライアント領域のサイズを調べて、
希望どおりになっていなかったらその分引き伸ばして
もう一回リサイズかけるくらいしか思いつかん。
0529522
NGNGありがとうございます。
でもHWNDにキャストしてやらないとコンパイル出来ないのですが・・・
もしかしてメニューハンドルを使う事自体間違ってるのでしょうか?
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNGWM_NCCALCSIZEを投げれば
実際にサイズ変更しないでサイズ計算できる
0532デフォルトの名無しさん
NGNGのですが何か良いAPIはありませんか?
今は ReadFile() WriteFile() を繰り返して実現してるのですが…
0533デフォルトの名無しさん
NGNGThe SetEndOfFile function moves the end-of-file (EOF) position for the
specified file to the current position of the file pointer.
This function can be used to truncate or extend a file.
0534デフォルトの名無しさん
NGNG便利なライブラリってないでしょうか?
0535デフォルトの名無しさん
NGNGttp://www.vector.co.jp/soft/win95/prog/se115574.html
0536デフォルトの名無しさん
NGNGその他にありませんかね?ライセンス気にせず自由に使用できるもので。
0537デフォルトの名無しさん
NGNG拙作の作りかけpop3ライブラリ。
plain/APOP/AUTH(CRAM-MD5)対応
http://lounge.dip.jp/~yoshinoya_off/up/img/pop3.zip
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGcase WM_NCCALCSIZE:
rc.top = 0;
rc.left = 0;
rc.bottom = 240;
rc.right = 320;
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, TRUE);
SetWindowPos(hwnd,HWND_TOP,0,0,rc.right-rc.left,rc.bottom - rc.top,SWP_NOMOVE);
return 0;
なことをしたら,タイトルバーも全部真っ白なクライアント領域だけが表示されました.
なんか激しく勘違いをしているようなので,どうやればよいのかご教授願えないでしょうか.
#MFCとか使っている人だと楽勝なのだらろうか...
0540デフォルトの名無しさん
NGNGリファレンス読め
0541デフォルトの名無しさん
NGNGすんません.MSDNみてもいまいちピントこなかったのです.
で,googleで WM_NCCALCSIZE を調べても SendMessage(hwnd, WM_NCCALCSIZE, 〜
なのがひっかかからなくて,うーむという状態です.
どのタイミング+引数でSendMessage(hwnd, WM_NCCALCSIZE, 〜 すればよいのでしょうか.
0542デフォルトの名無しさん
NGNGライブラリっていうのは無いものでしょうか?
ゲーム内で使いたいんですが、
いちいち自分でフォントを作って動かし方の指定をするのは
めんどくさいなって思って・・・
0543デフォルトの名無しさん
NGNG自分で作って以後それを利用する。
0544デフォルトの名無しさん
NGNGやはりそれしかないのかな〜
頑張るか・・
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGサンプルプログラムってないかな?
ログ出力に使いたいんだけど。
0547デフォルトの名無しさん
NGNGさすがにそのくらい自分で作れよ・・・
0548デフォルトの名無しさん
NGNG標準出力に吐く
0549デフォルトの名無しさん
NGNGAdjustWindowRectで求まった矩形をr1とすると、
r2 = r1;
SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&r2);
でr2にクライアント領域のサイズが入って戻ってくる。
これを見てr1を調整してからSetWindowPosかけれ。
0550デフォルトの名無しさん
NGNGエディットウインドウつくって、AppendTextすれば〜?
0551デフォルトの名無しさん
NGNGファイルの同時アクセスは許さない、時々ファイルは削除される、という場合に、
・一方がファイルを読み書き中にはエラーを返す。
・ファイルが存在しない場合にはファイルを作る。
という処理がしたいのですが、
ファイルが存在しない場合を知るにはどうすればいいのでしょうか?
hFile = CreateFile( "hoge.txt", GENERIC_READ , 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
これで調べているのですが、ファイルの共有エラーの場合と、
ファイルが存在しない場合の区別の仕方がよく分かりません。
よろしくご教授お願いします。
0552デフォルトの名無しさん
NGNGGetLastError()とか。
0553デフォルトの名無しさん
NGNGOleInitialize()を呼び出しますが、
CoInitializeEx()は呼び出さなくても良いのでしょうか?
CoInitializeEx( NULL, COINIT_MULTITHREADED );
OleInitialize( NULL ); -> 失敗
OleInitialize( NULL );
CoInitializeEx( NULL, COINIT_MULTITHREADED ); -> 失敗
となるのですが。
OleInitializeが内部でCoInitializeを呼び出しているのなら良いのですが、
そうでないならOLE以外のコンポーネントを同時に使えないのかなと思いまして。
0554デフォルトの名無しさん
NGNGOPEN_ALWAYS使えばいいんでわ?
0555デフォルトの名無しさん
NGNGなぜMSDNを調べないか。
>OleInitialize calls CoInitializeEx internally to initialize the
>COM library on the current apartment.
>Because OLE operations are not thread-safe,
> OleInitialize specifies the concurrency model as
>single-thread apartment.
と明記されているではないか。
0556デフォルトの名無しさん
NGNGそんなのあるなら俺も欲しいな〜
出来たらサンプル公開・・・してくれると嬉しいでやんす。
0557sage
NGNGよく分からないまま、流れていってしまったのですが・・・
もしかしてメニューのサブクラス化というのは
割と初歩的な事で、本かなんか読めば書いてある事
なのでしょうか?
それとも逆にあまり一般的ではないのでしょうか?
いろいろ試しているのですが相変わらず出来ません
トホホ・・・
0558デフォルトの名無しさん
NGNG一般的でないどころか世界中でそんなことしてるやつ一人もいないかも
どうしてもメニューをサブクラスかしたかったら
メニューのウィンドウハンドルを何とかしてゲットしてください
ポップアップ中なら座標から何とかなるでしょう
0559デフォルトの名無しさん
NGNGなんて子供の純真な夢を打ち砕くような台詞をどうしても言わせたいのかキミは
オーナードローとかで我慢しる。
0560デフォルトの名無しさん
NGNG誰からそんなウソ教わった?
0561デフォルトの名無しさん
NGNG実際システムメニューとかって乗っ取れるしね。
0562デフォルトの名無しさん
NGNGんじゃ、教えてやれよ
0563デフォルトの名無しさん
NGNGユーザーの入力を受け取る事が可能な物は例外なくウインドウなんだが。
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNGステータスバーはウインドウではないと。
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG変に何かを定義付けしようとする奴は基本的に叩かれる。
よって多分俺も叩かれる。
0569デフォルトの名無しさん
NGNG入力を受け取るオブジェクト⊂ウインドウ
入力を受け取る物だけがウインドウとは書いてない
0570デフォルトの名無しさん
NGNG>ユーザーの入力を受け取る事が可能な物は例外なく
書いてある。
0571デフォルトの名無しさん
NGNGと、
ウィンドウとは例外なくユーザーの入力を受け取ることが可能である
は等価じゃないんだが。
つか、これ中学生レベルの数学で習わなんだか?
0572デフォルトの名無しさん
NGNG「〜物のみ〜」とは書いてないだろ。
日本語読める?
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGコマンドプロンプトのウインドウハンドル(゚∀゚)クレクレ
0575デフォルトの名無しさん
NGNGSpy++じゃ取れないがWinSightとか自力なら普通に取れるが、何か?
0576デフォルトの名無しさん
NGNGウインドウのように見えるが、ウインドウじゃないのか?
0577デフォルトの名無しさん
NGNGセキュリティの関係でいじれないようになってるんだよ。
パスワードとか入力される場合もあるしな。
0578デフォルトの名無しさん
NGNG002C0810
"コマンドプロンプト"
ConsoleWindowClass
14EF0000
0579デフォルトの名無しさん
NGNGどうあがいてもSetForegroundWindowが効かないのは
どうしてですか。
0580デフォルトの名無しさん
NGNG出来ました.ありがとうございます.
0581デフォルトの名無しさん
NGNG文字と被ってない部分の線も消えてしまうんですがそれを消えないようにする
方法ってありますか?
0582デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNGfopen("file_path","a");
すりゃ、勝手にファイル作ってくれると思うが・・・・・
んで、mutexでプロセス間の排他はOK
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNGスクリーンではなくアプリケーションウィンドウに対して
センタリングせよという意味のガイドラインがどこかに書かれていた
と思うのですが探し出せません。
どこに書いてるか知ってる人いませんか?
0587551
NGNG情報さんくすです。
結局、
GetFileAttributes(FILENAME) == 0xFFFFFFFF
でファイルの存在を調べて
hFile = CreateFile( FILENAME, GENERIC_READ , 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)
で排他処理することにしました。
0588デフォルトの名無しさん
NGNGファイルが作られたり削除されたりという可能性は考慮しなくていいの?
(´-`).。oO(なんで素直にアドバイスどおりに作らないんだろ?)
0589偽551
NGNG大丈夫ですよ、チェックしたらすぐに作成しますから。最近のマシンなら
1/1000 もかからないでしょ。
まあ、俺が担当にいる間ぐらいはちゃんと動くだろうしね...。
0591デフォルトの名無しさん
NGNGなぜ OPEN_ALWAYS 使わないのか小一時間
0592本物かもしれない551
NGNGOPEN_ALWAYS はなかったら作る、あったらそのまま、なので
存在したかどうかの判断ができないと思われ。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNG551は
> ・ファイルが存在しない場合にはファイルを作る。
と言っているのでそれでもいいかと思われた
0595デフォルトの名無しさん
NGNG書き込み権利は排他的にとれるでしょうに、
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG別のオブジェクトで排他処理すると、二重管理に
なるとおもうけれど、どうなんだろ。
0598デフォルトの名無しさん
NGNGhFile = CreateFile("test.txt",GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
wsprintf(str, "%d\n", i);
WriteFile(hFile,(LPVOID)(&str),(lstrlen(str))*sizeof(char),&dwWrittenByte,NULL);
iはint型の変数で、中には100が入っています
strはchar型の配列の先頭へのポインタです
dwWrittenByteはDWORD型です
上のようにして、できたファイルをメモ帳で開くと
改行されずに100■となってしまいます。
なぜでしょうか?
0599デフォルトの名無しさん
NGNGCreateFileだと全部バイナリ形式の読み書き?だったから
\nが\r\nに変換されないせいじゃねーの?
0600デフォルトの名無しさん
NGNGきちんと改行されるようになりました。
こんなにあっさり直るなんて、ここで相談してよかったです。
早いレス本当にありがとうございました。
0601デフォルトの名無しさん
NGNGEnumWindowsとかで取得したHANDLEからそのアプリケーションが
あるパスを取得する方法を教えて下さい。
0602デフォルトの名無しさん
NGNGGetWindowThreadProcessID
OpenProcess
EnumProcessModules
GetModuleFileNameEx
かな?
0603デフォルトの名無しさん
NGNGおおおおっ!!!
感謝です、ちょっとその辺りを調べてみます、
0604デフォルトの名無しさん
NGNGメッセージボックスを画面の中央に表示する方法はありませんか?
親を指定すると無理なのかなあ。
0605デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNGSetWindowPosするにはhwndが必要なんですけど、
MessageBoxでもらえるんでしょうか?
それとも別のAPIがあるのかな?
0608598
NGNGあれ?
&strでもstrでもどっちでも同じ意味のはずですよね?
なんか見た目的に&strのが「アドレスだな!!」ってわかる気がしてw
いやまあ(LPVOID)で分かるんだけど。
やっぱり変ですか・・?
0609デフォルトの名無しさん
NGNG……もう一度最初からCなりC++の勉強をやり直すことを強く推奨する。
0610デフォルトの名無しさん
NGNGstrが配列ならセーフだが、ポインタだと君のコンピュータが光の速さで吹っ飛んでいくぞ。
>>607
自作ダイアログで代用するのが定番。
0611デフォルトの名無しさん
NGNG(゚ロ゚)
(゜〇゜;)
(゜o゜)
0612デフォルトの名無しさん
NGNGんっと、いやだから
配列だから良いんですよね?
0613デフォルトの名無しさん
NGNG0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNGたまたま配列だから助かっていただけ
わざわざ危険側に振るなってこと。
0617デフォルトの名無しさん
NGNGやっぱりダイアログで代用ですか。残念。
でも、REGEDITでキーを削除するときに出てくる確認は、
普通のMessageBoxっぽいのに中央に表示されるんですが...
あれもREGEDITが頑張ってるのかな。
0618偽者604
NGNGやっぱり方法ないんですね。
MFCのAfxMessageBoxではちゃんとhWndの中央にでますが
あれのソースってどうやったら見れますか?厨房+便乗質問でスマソ
0619デフォルトの名無しさん
NGNGいや、hwndの中央じゃなく、画面の中央に出したいのです。
hwndには自分のウィンドウいれてね。
hwndにNULL入れると中央にでるけど親さわれちゃうし。
NULL入れてTASKMODALにすると親さわれなくなるけど、
タスクバーに表示される...
MFCのソースはステップ実行すれば簡単に見られるよ。
ソース漁るより楽。
0620デフォルトの名無しさん
NGNG自分で作成したウィンドウのことだろ?どうせ
MessageBoxを好きな位置に移動させる方法はある。
http://pc.2ch.net/test/read.cgi/tech/1024380249/159
0621偽者604
NGNGあれ?
MessageBoxは常にデスクトップの中央に表示されない?
OSで違ったっけ?Win2000ではそうなるけどな。
> MFCのソースはステップ実行すれば
ほんとだ。Thx!
0622デフォルトの名無しさん
NGNGSetWindowsHookしてWM_CREATEなりWM_SIZEなりを捕まえてやれば出来るんじゃないかと思うが、
Spy++で見ると、メッセージボックスはごくふつうのダイアログであったりするから、常時フックしておく訳にもいかず、
出す直前にフックして直後に解除しなければならないと思われ。
そんなことするなら、ダイアログを自作する方がはやいと思われ。
0623デフォルトの名無しさん
NGNGCBTフックですね。試してみます。
Thanks!
0624デフォルトの名無しさん
NGNGダイアログを作るなら、非表示のダイアログを作って
その中でMessageBoxすると可能でした。
でもなんかスマートじゃないなぁと思って。
フックがスマートなのかどうかはよくわかんないけど。
色々試してみます。
0625偽者604
NGNGMFCの
int CWinApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
これを見ても何でhWndの中央に出るのかよく分りません・・・。
0626デフォルトの名無しさん
NGNGCWinApp::DoMessageBoxの中も追わないと。
0627デフォルトの名無しさん
NGNGそれともわざと言わないのか? ぼけてるのか?
0628デフォルトの名無しさん
NGNG説明する気もない奴は来なくていい
0629デフォルトの名無しさん
NGNG説明するのは簡単だが、場の空気ってもんがあるだろ。
本人のために、あえて言わないのかもしれんからな。
0630デフォルトの名無しさん
NGNGそういうヤシは黙っとけ
0631おねがいします
NGNGようになりましたが、これと同じことを Windows 2000 でもやりたいのですが、
プロトコル(TCP/UDP)とポート番号の組み合わせからプロセスIDを取得する方法
ってわかりますでしょうか?
パーソナルファイアーウォールなどでは、取得できているようなのですが。
お願いします。
0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNGGetWindowThreadProcessIdを使うと
[リンカ エラー] 外部シンボル 'GetModuleFileNameExA' が未解決
ってリンクでエラーになります、何が足りないのでしょうか?
0634デフォルトの名無しさん
NGNGなんだこの無駄な漫才は。
0635デフォルトの名無しさん
NGNGGetModuleFileNameExは使ってないの?
0636デフォルトの名無しさん
NGNG激しく間違いました。
×GetWindowThreadProcessId
○GetModuleFileNameEx
ですね、はい。
0637デフォルトの名無しさん
NGNGpsapi.libが足りないんじゃない?
0638デフォルトの名無しさん
NGNGimplibでpsapi.dllから.lib作ればリンク出来るだろうけど
psapi.dllが入ってない環境だとアプリの起動も出来なくなるだろうから、
↓のようにdllを動的にロードしたほうがいいと思う。
http://techtips.belution.com/ja/vc/0022/
0639デフォルトの名無しさん
NGNGTVM_EXPAND/TVE_TOGGLEでプログラムから
ツリーを開いたり閉じたりしているのですが、
アイテムを閉じたときにTVN_ITEMEXPANDEDが送られてきません。
勿論、TOGGLEの後にTVIS_EXPANDEDONCEをリセットしているのですが。
どうすればいいのでしょうか?
0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNGhttp://n76cd-01p05.ppp11.odn.ad.jp/old/a8575.html
ここのA8564に同様の質問があり、答えが出ていません。
なにかうまい方法無いでしょうか?
0642デフォルトの名無しさん
NGNGTVS_OWNERDRAWFIXEDみたいなの無いんですが。
0643デフォルトの名無しさん
NGNGQueryPerformanceCounter
って何分の何の単位の精度なんですか?
0644デフォルトの名無しさん
NGNGQueryPerformanceCounterの精度は、
QueryPerformanceFrequency(&freq), 1/freq (sec)
0645デフォルトの名無しさん
NGNGなるほど、やっぱそういうことですか、
ありがとうございますた。
0646デフォルトの名無しさん
NGNGできれば、日本語で書いてるといいですね。
0647デフォルトの名無しさん
NGNGツールバーに登録されている(ツールバーにアイコンとして表示されている)アプリケーション(かウィンドウ)へのハンドル一覧を得たいのですが、どの関数を使えばよいのでしょうか。
また、タスクトレイをエミュレートするために、
(1)タスクトレイに登録されているアプリケーションのハンドル
(2)実際にタスクトレイに表示されているアイコンのハンドル
(3)そのアイコンがクリックされた際に適切なメッセージを生成してアプリケーションに送信したい場合に、そのメッセージの種類
を知りたいのです。
0648デフォルトの名無しさん
NGNGMSDNで十分じゃない?
0649クリップボードの使い方
NGNGなど、多くのサイトでは、SetClipboardData を呼び出した後は、
メモリは Windows の管理下に置かれるので GlobalFree しては
いけない、と書かれています。
確かに実際に動かしてみた限りでは GlobalFree してしまうと、
動作がおかしくなります。(2回目の SetClipboardData が失敗する )
では、メモリが Windows の管理下になるとすると、解放はいつ
行われるのでしょうか?
一方、 MSDN では、
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_setclipboarddata.htm
「CloseClipboard 関数を呼び出すまでは、そのハンドルを解放
することや、ロックし続けることを避けなければなりません。」
と書かれていて、 CloseClipboard を呼び出した後であれば
解放しても良さそうにも思えます。
また、MSDN では
「CloseClipboard を呼び出した後も、アプリケーションはそのデータに
アクセスできます。」とも書かれていますが、いつ解放されるか分から
ないのでは怖くてアクセスできないと思うのですが・・・
0650デフォルトの名無しさん
NGNGだから使うなってことだと思うんだけど。
0651デフォルトの名無しさん
NGNG画面全体を消去する以外にありますか?
0652デフォルトの名無しさん
NGNGふつうはコピーして使う
SetClipboardData したメモリのことは忘れたほうが無難
0653デフォルトの名無しさん
NGNG背景と同じ色で上書きしたら
0654デフォルトの名無しさん
NGNGタスクバーのツールバー?
あれはタブコントロールだよ。ボタンスタイルの。
(1)(2)(3) はできた、という話を聞いたことない。
0655デフォルトの名無しさん
NGNG出来るかどうか知らんが、ITaskbarListでも調べてみれば?
0656デフォルトの名無しさん
NGNGトップレベルウィンドウでかつSW_HIDEじゃない奴を表示してると思う。
ウインドウスタイルの条件があるかも。
トレイはどうだろう。
Shell_No〜をフックすればいけるかも。
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNGGetCaretBlinkTime
0660デフォルトの名無しさん
NGNG方法って何?
0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNGおお、ありがとう。手っ取り早そう
0663デフォルトの名無しさん
NGNGWNDCLASS wndclass ;
wndclass.lpszMenuName = IDR_MENU ;
てな感じで書くと,
--------------------------------------------------------------------
warning C4047: '=' : 間接参照のレベルが 'const char *' と 'const int '
で異なっています。
warning C4047: '=' : 間接参照のレベルが 'const char *' と 'const int '
で異なっています。
-------------------------------------------------------------------
とwarningがでるが,ちゃんとメニューは表示されるが,
wndclass.lpszMenuName = "IDR_MENU" ;
とかするとwarningはでないけど,今度はメニューが表示されません.
なんででしょうか?
0664デフォルトの名無しさん
NGNGとゆうマクロがあるよん。
ウィザードでは(LPCSTR)IDR_MENU
ってキャストしてるけどね。
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNGオーナーのハンドルを取得するにはどうすればいいのでしょうか?
ポップアップメニューのハンドルは取得できるのですが、
GetWindow(hWnd, GW_OWNER);
GetAncestor(hWnd, GA_ROOTOWNER);
では、0が返ってきます。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG調べる方法はありますか?
0670デフォルトの名無しさん
NGNGGetPrivateProfileSectionを調べよ
0671デフォルトの名無しさん
NGNG画面全体を消去してN-1本の線を復元しています。
あまり良い方法ではないと思うのですが、最後の線だけ消すと
その線と交わっている別の線も消えてしまうので仕方なくこうしてるんですが
いい方法ないですか?
0672デフォルトの名無しさん
NGNG差分を取るようにすれば相当圧縮が効くし。
0673デフォルトの名無しさん
NGNGベクトルベースのお絵かきプログラム?
0674デフォルトの名無しさん
NGNG私のプログラムでは好きな回数だけ前に戻れるようにしたいので
その方法ですとN個の線を描いた場合N個のイメージが必要になりますよね。
工夫すればイメージの量も小さくなるかもしれませんが、どうなんでしょう。
0675671
NGNGあ、671でした。
>>673
あまり詳しくないのでどっちと聞かれると困ってしまいますが
マウスの座標(x,y)を取得し、それを画面上に線として描画するだけの
プログラムです。答えになってるでしょうか・・・。
0676デフォルトの名無しさん
NGNGBMPとかJPEGとかで保存するの?
0677671
NGNGいえ、今のところそのような保存は行わないです。
最初にお絵かきツールと書きましたが、主な使用目的は
簡単に線を書いたり消したりすることがメインです。
少し話が難しくなってしまいそうな表現でした、すいません。
0678デフォルトの名無しさん
NGNG線分の頂点を記録して再描画(つまり今やっている手段)が
むいているんじゃないかな?
0679671
NGNGそうですか、現在はおっしゃるように頂点を記録しているので
それを元に最初から復元するのは比較的容易です。
ただ、効率が悪いなぁと思いまして^^;。
0680デフォルトの名無しさん
NGNG時間効率と空間効率は、しばしば相反する。トレードオフを探せ。
0681デフォルトの名無しさん
NGNG両方組み合わせれば?
俺が今書いてるのは、基本はUndoの度に線を再描画して、
再描画にかかる時間が0.5秒を超えたらその状態を保持して
次からはそこから再描画するようにしてる
0682679
NGNG確かにトレードオフは重要ですね。妥協点を探します。
>>681
ある程度の処理時間がかかるところまで保存しておく方法ですね。
なかなか良さそうな方法なので簡単に実装できたらやってみます。
0683デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGテキストの最初の方を見ていても、最後尾に移動してしまいます。
テキストを挿入しても、その場所に移動しないようにするには
どうしたらいいでしょうか?
0686デフォルトの名無しさん
NGNGハァ?
0687デフォルトの名無しさん
NGNG自動スクロールオフ
0689カンで書いてみる人
NGNG0690カンで書いてみる人
NGNGEM_SETSEL 0 0 とか
0691デフォルトの名無しさん
NGNG置き換え後に、S1にSETSELしてから、S2にSETSELでなんとかできん?
0692デフォルトの名無しさん
NGNGなどで、
SC_MOVE or 2
という指定になっていますが、なぜ2との論理和なのですか?
APIヘルプや、MSDNを見ても載っていなかったのですが・・・。
あと、出来ればReleaseCaptureについての詳しい解説もお願いします。
0693デフォルトの名無しさん
NGNG2 は HTCAPTION です。
ReleaseCapture は SetCapture でキャプチャしたマウス捕捉を解除します。捕捉したままだと上手くいかないので、解除します。
0694デフォルトの名無しさん
NGNGあ!つまり、タイトルバーをつかんでいる様にしているわけですね!
だけどヘルプには論理和〜とか書いてないし・・・。しかも何故WM_NCHITTESTが?
何か、WinAPIの常識のようなものなんでしょうか・・・?
>ReleaseCapture
なぜうまくいかないのですか?
0695693
NGNGSC_MOVE ... えーと。勘違い。適当なこと言ってました。
よく考えたらヒットテストコードなわけ無いですね(ヒットテストコードは21まであるし・・・ぐーぐると SC_MOVE|HTCAPTION とか出てくるのですが)。
これはなぜか2のようです。実際にタイトルバーをドラッグしたときに、Windowsから2が送られて来ます。よくわかりません。
ReleaseCapture ... なぜかキャプチャしてると実際に上手くいきません。キャプチャを解除してやると、なぜか実際に上手くいきます。そういうもんだと私は考えてますけれども、なぜかと言われると・・・なぜでしょう。
0696694
NGNGそもそも何で論理和を取るのかが・・・。ヘルプに載ってないのに・・・。
一体どこに2を送る仕様とかについて書いてあるんでしょう?
・・・APIは謎の仕様が多いですね・・・。
0697デフォルトの名無しさん
NGNGWM_SYSCOMMAND の WParam の SC_XXXX の定数定義はどうしてとびとび
の値になっているか、よーく考える。MS が公開してないメッセージが
たくさん飛び交っているのよ。
論理和ではなく、SC_MOVE+2 の数値が意味ある。
0698デフォルトの名無しさん
NGNG条件に一致するウィンドウが複数会った場合、どうなりますか?
0699デフォルトの名無しさん
NGNGIn WM_SYSCOMMAND messages, the four low-order bits of the wParam
parameter are used internally by the system. To obtain the correct
result when testing the value of wParam, an application must
combine the value 0xFFF0 with the wParam value by using the
bitwise AND operator.
0700デフォルトの名無しさん
NGNGその中から適当にどれか1個でしょう。
0701デフォルトの名無しさん
NGNGWM_DRAWITEM の rcItem が微妙にオフセットずれるのって僕だけですか?
(0,0)から描画したいのに(0,2)とかになっちゃうんだけど。
0703697
NGNGForm1 のタイトルバーをクリックしたり、ドラグすると SC_MOVE+2 が
WM_SYSCOMMAND の wParam として送られてくるのが分かるだろう。これを
コードで送って、枠なしフォームをドラグするわけね。
type
TForm1 = class(TForm)
ListBox1: TListBox;
private
{ Private 宣言 }
public
procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
ListBox1.Items.Add(IntToStr(Msg.CmdType-SC_MOVE));
inherited;
end;
0704デフォルトの名無しさん
NGNGWindowsアプリケーション作成しようと思ってAPIが必要という事が分かりました。
MFCは使わない方向です。
貴方の使用しているorお勧めする参考書籍おねがいします。。。
0705デフォルトの名無しさん
NGNG検索すればその辺にコード転がってるだろ。
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNGたまたま2だけど2だと決め付けたコーディングは行儀が悪いと書いてるの。
読解力のない奴にいくら言っても無駄だが
0708デフォルトの名無しさん
NGNG表示したり変更したりするアプリケーションを作成しています。
QueryServiceConfig2 に SERVICE_FAILURE_ACTIONS オプションをつけて、
サービスの回復設定情報を取得すると、
LPTSTR lpRebootMsg;
LPTSTR lpCommand;
の2つのデータだけ異常なデータが入ってきます。
ms-help://MS.MSDNQTR.2002APR.1041/dnw2k/html/shc.htm のサンプルを
コピペしたものでも同じく期待した文字列のアドレスじゃないデータが入ります。
もうひとつ。。。
ChangeServiceConfig2 に SERVICE_FAILURE_ACTIONS オプションをつけて、
サービスの回復設定情報を設定すると、SC_ACTION の SC_ACTION_TYPE が
SC_ACTION_REBOOTのときだけアクセスが出来ないエラーがLastErrorに入ります。
たとえば、SC_ACTOINを配列で複数設定した場合、タイプにリブートが1つでも
入っているとエラーになります。リブートが入ってない場合は正常に書き込まれます。
OpenSCManagerはSC_MANAGER_ALL_ACCESSで開いています。
どなたか、上記APIで正常に取得出来ている人はいませんでしょうか?
0709デフォルトの名無しさん
NGNGところが、メインのウィンドウは生成できるのですが、
子ウィンドウを生成するときにCreateWindowEx()に失敗します。
問題のソースは大体下のような感じなのですが、
なぜCreateWindowEx()は失敗してしまうのでしょうか?
どなたかわかる方がいましたら、よろしくお願いします。
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp){
…
case WM_CREATE: // メインのウィンドウのWM_CREATEメッセージ
// RegistClassは内部でRegisterClassExを呼び出す関数
if(!RegistClass(hInst, ToolWndProc, "ToolWnd", NULL)){ // hInstはWinMainの第1引数のコピー
MessageBox(hwnd, "RegisterClass関数失敗", "ツールウィンドウ", MB_OK);
break;
}
htool = CreateWindowEx(WS_EX_TOOLWINDOW, "ToolWnd", "ツールボックス",
WS_CAPTION, 10, 10, 128, 64, hwnd, (HMENU)1000, hInst, NULL);
if(!htool){
MessageBox(hwnd, "CreateWindowEx関数失敗", "ツールウィンドウ", MB_OK);
break;
}
0710デフォルトの名無しさん
NGNG0711どおすればいいんだ
NGNGげげ!!!!!
0712デフォルトの名無しさん
NGNGRegistClassの中身をみせろ。
0713デフォルトの名無しさん
NGNG(1) InitCommonControls()は?
(2) ツールバーの作成にはCreateToolbarEx()を使うのでは?
(3) CreateWindowEx()を使うのなら
CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD,0,0,0,0,hwnd,ID_TOOLBAR,hInst,NULL);
かな?
参考→ttp://www.kumei.ne.jp/c_lang/index_sdk.html
0714デフォルトの名無しさん
NGNG(MENU)1000 ← これってツールバーにメニューがあるって事?
0715デフォルトの名無しさん
NGNGシンボルブラウザからつくるかせめて
#define MyToolBar 1000
とかしてほしいけどな。
0716デフォルトの名無しさん
NGNGWINEのソースみるとヒットテストコードとして扱ってるみたい。
0717デフォルトの名無しさん
NGNGすみませんです。
RegistClass()は下のようになっています。
int RegistClass(HINSTANCE hinst, WNDPROC proc, const char *classname, const char *menuname)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = proc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hinst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wc.lpszMenuName = menuname;
wc.lpszClassName = classname;
if(!RegisterClass(&wc)) return 0;
return 1;
}
0718709
NGNG過去に作った同様の方法で子ウィンドウを生成するプログラムのソースと比較してみました。
そして、1行1行切り詰めていって、普通のウィンドウと子ウィンドウを表示するだけの
プログラムにまでした結果、以下のようにすると子ウィンドウがきちんと生成できました。
これを・・・
htool = CreateWindowEx(WS_EX_TOOLWINDOW, "ToolWnd", "ツールボックス",
WS_CAPTION, 10, 10, 128, 64, hwnd, (HMENU)1000, hInst, NULL);
こうする。
htool = CreateWindowEx(WS_EX_TOOLWINDOW, "ToolWnd", "ツールボックス",
WS_CAPTION, 10, 10, 128, 64, hwnd, NULL, hInst, NULL);
第10引数をNULLにしました。
子ウィンドウの生成ではここにはIDを指定しろというのに、なんか腑に落ちません。
さらに、これで原因がわかったと思って、切り詰める前のプログラムに同様の処置をしたところ、
依然として子ウィンドウの生成に失敗してしまいます。
この第10引数を使うには他に手続きとかいるのでしょうか?
0719デフォルトの名無しさん
NGNG0720709
NGNGWS_CHILDってつけたら、
確か親ウィンドウの枠の外に出られないウィンドウになりますよね?
それだとツールウィンドウとしては不便なのではずしています。
0721デフォルトの名無しさん
NGNG厳しくなってメニューハンドルが有効じゃないと
ウィンドウが作成されなくなったりしたんだよな
0722デフォルトの名無しさん
NGNGWS_CHILDがついてなかったら子ウィンドウじゃないだろうがボケ
もしかして「所有されてるウィンドウ」と「子ウィンドウ」の
区別がついてないのかな。これをごっちゃにしてる人は
驚くほど多い。
0723701
NGNGウインドウ作る部分正確に書いときますね。
hwndListView = CreateWindow(WC_LISTVIEW, NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSCROLL |
LVS_OWNERDATA | LVS_OWNERDRAWFIXED | LVS_NOCOLUMNHEADER,
0, 0, 0, 0, hWnd, (HMENU)IDC_LIST, hInstance, NULL);
こう作って WM_DRAWITEM を受けて DRAWITEMSTRUCT を参照しつつ描画
しようとすると、rcItem のY座標が 2 ピクセルずつ下にずれているんです。。。
0724709
NGNG>WS_CHILDがついてなかったら子ウィンドウじゃないだろうがボケ
>もしかして「所有されてるウィンドウ」と「子ウィンドウ」の
>区別がついてないのかな。
どうも区別ついてなかったようです。
CreateWindow()に親ウィンドウハンドルをつけてウィンドウを作るときに、
・さらにWS_CHILDをつけると「子ウィンドウ」になる。
・WS_CHILDなしで呼び出すと「所有されてるウィンドウ」になる。
ということですね?
ひとつ、物知りになれました。ありがとう。
0725708
NGNGChangeServiceConfig2 のエラーは解決しました。
シャットダウン特権を与えていなかったのが原因でした。
QueryServiceConfig2 のほうは、まだ解決してません。
引き続き調査を続けています。
現在は、レジストリから直接取得といった方法でお茶を濁しています。
どなたか、うまく取得できているかたは、いらっしゃいませんでしょうか?
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGTabコントロールの子ウインドウとしてウインドウを作ると、
ウインドウのリサイズ時にどうしてもちらついてしまいます。
CS_HREDRAWとCS_VREDRAWをスタイルから除去すると
ちらつきも消えるのですが、今度はTabコントロールの描画がおかしくなります。
何かイイ対処方法無いでしょうか?
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG勿論付けてます。
0732デフォルトの名無しさん
NGNGローカルファイルを検索する関数、CFileFindのFindfile関数を使うと、そのフォルダ内
のファイルは検索できるのですが、ドライブ全体のファイルを検索したい時は
どうすればいいのでしょうか?なにか関数があるのですか?
なにかよい方法を教えていただけたらうれしいです。
0733デフォルトの名無しさん
NGNGマルチポストだったら頃す
■ VisualC++(MFC限定)相談室 4■
http://pc3.2ch.net/test/read.cgi/tech/1021620974/l50
0734732
NGNG0735デフォルトの名無しさん
NGNG何と比べて2ピクセルずれてるの?
先頭の項目でrcItem.topが0でないってことだったら、
単純にリストビューがその分余白をとってるだけでしょ。
細かいこと気にせず、「ここに描いてね」と言われた所に
素直に描画しる!
0736701
NGNGレスTHX.
何と比べてって、リストビューのクライアント領域の上の端。
まさに先頭の項目で rcItem.top = 2 になっちゃうのです。
確かに単純に余白取ってるっぽいんですけど、
俺様が描くのだモードなのに何で勝手に余白取るのよ〜
ぴっちりと詰めて描きたいこともあるだろうに。。。
余白は取りたい奴が取ってくれよ〜
おかげで上は隙間ができるし、下は2ピクセル分切れちゃうんだよ〜
んで、やっぱこれって余白なんでしょうか?
0 にできないもんなんでしょうか?>識者の方
できないのならサブクラス化して隙間に描画するようにせんとしゃーないかな、やっぱ。
素直じゃない僕ちゃんでした。
0737デフォルトの名無しさん
NGNGリストビューすべてをカスタマイズするという用途に使う物ではない。
0738デフォルトの名無しさん
NGNG隙間ができて困るリストビューって……何か間違った使い方をしてそうな予感。
まあ、ダメモトでLVM_SCROLL送りつけてみれ。それでダメだったら、
別のウィンドウの子ウィンドウにしてしまって、上にちょこっとずらして収納するとか。
0739デフォルトの名無しさん
NGNGコントロールパネルの「サウンドとマルチメディア」ってやつで、オーディオ→優先するデバイスってあるじゃないですか。
あれを変更するプログラムを作りたいんですが、技術的に可能なんでしょうか・・・
教えてください!お願いします。
0740デフォルトの名無しさん
NGNGインターレース(奇数ラインと偶数ラインがずれている)になっているのですが、
ノンインターレースで保存する方法はありますか?
0741デフォルトの名無しさん
NGNG自分で処理汁
0742デフォルトの名無しさん
NGNGどのようにすればいいでしょうか?
ダイアログボックスにエディットボックスを貼り付けてそこに表示させることをかんがえたのですが、
次々と表示するようにはできません。表示する文字列を毎回更新してそれを一度に
表示させるしかないのでしょうか?追記できれば楽なんですが…
0743デフォルトの名無しさん
NGNG超Fuck
EM_SETSEL->EM_REPLACESEL
0744デフォルトの名無しさん
NGNG超FAQでしたか…すみませんでした。
それでもレスしてくださってありがとうございました。
早速やってみます。
0745デフォルトの名無しさん
NGNGCB_LIMITTEXT や、CB_GETEDITSEL したときの挙動が
どうも二バイト文字も一文字と勘定してくれてるみたいなんですが、
これって漏れだけ?
例えば SendDlgItemMessage(hDlg, IDC_COMBO, CB_LIMITTEXT, 10, 0) とすると
半角でも全角でも10文字入ってしまいます。
また、エディットボックス内に「あいうえお」と入力し、「う」だけを選択した状態で
SendDlgItemMessage(hDlg, IDC_COMBO, CB_GETEDITSEL, &start, &end)
とやると、start = 2、end = 3 となってしまいます。
どうすりゃいいんだYO!
0746デフォルトの名無しさん
NGNG0747745
NGNGしてないけど、ちなみに 2000 だから?
確かに spyxx で除くと(Unicode)ってなってる。
そうかと言って CBEM_SETUNICODEFORMAT を 0 にしてみてもダメだったけど(泣
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG> Specifies the maximum number of characters
と書かれてるし(number of bytesではない)。
0750740
NGNGレスどうもです。
仕方がないので、当面妥協しておきます(汗
0751745
NGNGダメでした。。。sageときます。。。
>>749
う、何かそんな感じしてきたけどきつい仕様やな。。。
通知メッセージ(CBN_EDITUPDATE)とか使ってチマチマやらんとあかんのかな。。。
日本人のみんなは困ってないのかな?
0752デフォルトの名無しさん
NGNGautoexec.batの中でUSB-FDを認識させたいんですが、
何かよい方法ありますでしょうか?
0753デフォルトの名無しさん
NGNG不可能
0754デフォルトの名無しさん
NGNGスレ違いの予感
0755デフォルトの名無しさん
NGNG>autoexec.batの中ではWin32 API
とりあえず意味不明として、
autoexecが動くプロセスってリアルモードなの?
0756デフォルトの名無しさん
NGNGNT系じゃautoexec.batは意味ないから95系なわけだが、リアルモードっつーか、
Windowsのカーネルがロードされる前だからWin32 APIが使えないのは当然だろ
う。
0757デフォルトの名無しさん
NGNGとりあえず↓イテコイ
ttp://homepage2.nifty.com/winfaq/index.html
0758デフォルトの名無しさん
NGNG現段階で全コールで全パラメータをベタ渡しでwininetにスルーしています。
多くのアプリは動作するのですが、IEが動作しません。
IEを起動するとアクセスを行い実際にコンテンツを表示する段階でurlmon.dllが例外を吐きます。
例外時のスタックは kernel32->MSHTML->urlmon でした。
InternetSetStatusCallbackがクサいのですが、例外発生までコールバック関数は1度だけ指定され、
コールバック関数自体は何度か正常に通過しているようです。
スルーで渡すときの注意点なんかないでしょうか?
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNGオリジナルのwininetをリネームして、LoadLibraryしてます
このへんも上手い処理の仕方があればいいんですが、
起動時にwininet読まれちゃうんで…
0761デフォルトの名無しさん
NGNG0762758
NGNGAPIのフックとかそちらの方で対処できそうです。
ありがとうございました
0763デフォルトの名無しさん
NGNG手作業でラッピングしてるなら、なおさら。
0764デフォルトの名無しさん
NGNGMessageBox や Dialog 関数のパラメーターで親ウインドウのハンドル
をNULLにできるのでしょうか?
なんか機械によっては、旨く動かなかったりするので。
0765デフォルトの名無しさん
NGNG>なんか機械によっては、旨く動かなかったりするので。
できないんだろ。
0766752
NGNG逝ってきます。
0767はぐれ
NGNG仕事で作れっていわれたアプリで
システムフック、グローバルフックを使って全マウスクリックをフックする必要がありそうなんですが
どーにもWIN32わけわかんないっす(泣)
いろいろ調べてみてるんですが
どこかにサンプルソースとか落ちてるところないでしょうか
ご存知の方あれば是非・・・
0768はぐれ(767)
NGNG0769デフォルトの名無しさん
NGNGSetWindowsHookExでぐーぐってみるとか?
0770デフォルトの名無しさん
NGNG(・∀・)猫イケ→ ttp://kumei.ne.jp/c_lang/sdk2/sdk_162.htm
0771デフォルトの名無しさん
NGNGできるよ
0772デフォルトの名無しさん
NGNG接続状況を示すアイコンが表示されます。
アイコンをダブルクリックすると、その接続が開始されてから転送されたデータ
(ダウンロード / アップロード) のバイト数が表示されますが、
外部プログラムからリアルタイムで特定のダイヤルアップ接続の転送量を
取得することはできないでしょうか?
0773デフォルトの名無しさん
NGNGNT,2000系 →HKEY_PERFORMANCE_DATA
95,98,me系→HKEY_DYN_DATA\PerfStats
0774デフォルトの名無しさん
NGNGXP では HKEY_PERFORMANCE_DATA が存在しないようです
0775デフォルトの名無しさん
NGNGロボット型サーチエンジンって、ただHyperLinkをたどっているだけなんでしょうか?
なんか、勝手にディレクトリを下がっていって検索しているような
気がするんですが、そーいう関数が見あたらないんです。
(FTPでディレクトリを見るのはわかるけど・・・・)
いったい、どんなプロトコルを使っているんでしょうか?
winInetでおままごと程度のサーチエンジン作れますか?
0776デフォルトの名無しさん
NGNGディレクトリの中身を見れない設定ならたどる手段は総当たりしかない
0777775
NGNGうはっ、やっぱりLinkたどっているだけっすか。
そんなこと出来たら、セキュリティー的にまずいとはおもうけど
そんなもんなんですね。勉強になりましたです。
スリーセブンGet!!
0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNG何をいつから監視すればいいんですか?
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG> GetRandomRgn(hDC, rgn, SYSRGN);
で特定のウィンドウハンドル(hDCの元)のリージョンを取得できたのですが、
クライアント領域(?)になってしまうようです。
タイトルバーやメニューも含めて取得する方法はないですかね?
0782デフォルトの名無しさん
NGNGGetDIBitsが遅いのでCreateDIBSectionが使えないかと思ってるんだが。
ぐぐるしても表示に関する事ばかりで見当たらない。
駅スパートの方々教えてください。おながいします。
0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGマウスからパソコンに送られて来る
波形を表示させるといったことはできるでしょうか?
特に何に使うというわけでもなく、興味本位なのですが。
良かったら教えてください。
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNGGetGlyphOutlineでビットマップ作るんだが
win95の時に定数GGO_GRAY2_BITMAPいれると戻り値にエラー値が
戻ってくるんだがどうしてで?
CGO_BITMAPでは普通にビットマップとれるのだが
おすえてください
0787デフォルトの名無しさん
NGNG「ファイルを開く」ダイアログとは別物なのでしょうか?
MFCでのやり方はわかるのですが
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGGetSaveFileName
0790デフォルトの名無しさん
NGNG> hDC が GetDC した DC だったり、ってことはないですよね。
初心者で何の事か分からなかったのですが、
GetDCExでDCX_WINDOWを指定してDCを取得したところ
思ったようになりました。
ありがとうございました。
0791デフォルトの名無しさん
NGNG変更したいのですが、うまく行きません。
(環境は Visual C++ 6.0 / Service Pack 入れてないまま 汗)
普通のファイルの場合は CreateFile でハンドルを取得して、
GetFileTime & SetFileTime で問題なく行えたのですが、
ディレクトリに対して CreateFile を使うと
アクセス拒否と言うエラーが出て失敗します。
Windows95/98 でディレクトリのハンドルを取得するには
どうやったら良いのでしょうか?
プラットフォームSDKを読む限りだと、
NT では FILE_FLAG_BACKPUP_SEMANTICS を指定すると
うまく行くようなのですが、95/98 の場合について触れていません。
95/98 では無理と言う事でしょうか?
その場合、他にディレクトリのハンドルを取得する方法は有るのでしょうか。
「ディレクトリ ハンドル CreateFile」で検索かけてみたのですが、
具体的にこれでディレクトリを開いてる話を見かけなかったので
こちらでお聞きしました。どうかよろしくお願いします。
0792デフォルトの名無しさん
NGNGま、そういうことだ。あきらめな。
0793デフォルトの名無しさん
NGNGマジですか?(汗)
鬱だ。数日無駄に過ごした。
ではディレクトリの更新日時とかを 95/98 で
変更するのって不可能なんでしょうか?
ともかくお答えありがとうございました。
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGディレクトリのタイムスタンプの変更のためにそこまでする価値があるかは激しく疑問だが。(w
0796デフォルトの名無しさん
NGNG一瞬だけSetSystemTime()で日付変更してディレクトリを作ったら元に戻す
素人にはお薦め出来ない
それはそれとして256色画面での正しいRealizePalette()の使い方しりませんか?
いろいろサイトを回っても諸説紛々で動いたり動かなかったりするんですが…
特にPC-9821の256色専用マシンだと正常に表示されないことが多いです
0797デフォルトの名無しさん
NGNGなにかありますか?なにかキーが入力されたらEventをセットしてくれるような
API(DirectInput以外で)を探しているんですが。
0798デフォルトの名無しさん
NGNGpviewが動いてるからあると思うんだが…
>>791
16ビットDLL書いてサンクダウンして
DOSファンクション71xxhを呼び出すのが唯一の公式な方法
>>796
まずは「諸説」をここに書いてみれ
0799デフォルトの名無しさん
NGNGキーボードメッセージ
つーか何がしたいんだ?
0801デフォルトの名無しさん
NGNGキーボードフックして、自分でイベントをセットするなりすれば?
0802デフォルトの名無しさん
NGNGありがとう。やってみます
0803デフォルトの名無しさん
NGNG皆さん、お答えありがとうございました。
当方素人なので Win32API でサックリ出来ないようですし、
どうも諦めっぽいですね。
0804デフォルトの名無しさん
NGNGそうか、サンクという方法もあったか。
問題は 16bit コンパイラをどうやって入手するかだが、WinME DDK を DL すれば OK だな。
int 21h, AX=7143h を使えばいいわけだが、>>796 の場合とは微妙に結果が違ったりする。
0805デフォルトの名無しさん
NGNGそれで、ACPIを使用して「何かのキーを押下した時にShutDownする」ような仕組みを
組み込みたいのですが、ACPIの内部関数(?)及びその使用方法等をご存知ありませんか?
Win2K,VC++6.0(SP5)で作っているのですが...
よろしくお願いします。m(_ _)m
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNGExitWindowsEx
つーかACPIなんて使うか?
0808805
NGNGいや、普通に電源を落としても面白くないんで、
ちょっと変わった事をしてみようかと思いまして...
ACPIの内部関数等が判れば面白いコトが出来るかなぁと
0809デフォルトの名無しさん
NGNGインターネットの設定の信頼済みサイトや危険なサイトを、
プログラムで編集するにはどうしたらよいでしょうか。
0810デフォルトの名無しさん
NGNGレジストリをいじれば?
専用APIがあるかもしれないけど
0811デフォルトの名無しさん
NGNGC++プログラミングレッスン応用編へようこそ。
0812デフォルトの名無しさん
NGNG自分もそう思って検索してみたんだけど発見できず。
知ってたら教えてちょうだい。
0813デフォルトの名無しさん
NGNGPerlいじっててください
0814デフォルトの名無しさん
NGNGHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains
0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNGalt+スペースとかも使わないんであれば、いいんじゃねーの。
0817デフォルトの名無しさん
NGNGWM_KEYDOWN系は普通に送られてくる。
0818デフォルトの名無しさん
NGNGありがとう。
0820デフォルトの名無しさん
NGNGレジストリの見れんマシンってどんなのよ?
0821関係なくてごめんなさい
NGNG「あなたに憑依しました」って出てきたんすけどなんか問題アリですかね?
0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNGいま使ってるやつ制限かけられててregeditが起動できない
0824API学くん
NGNGレバーコントロールを作っているのですが、レバーコントロールの幅を指定する
ことはできないのでしょうか?
レバーコントロールを作成するとツールバーのように上に左端から右端まで全部
占めてしまいますよね。それを右端だけ常に空けるようにしたいのです。
レバーコントロールをCreateWindowEx()で作成した時に、これの引数でウィンドウの
幅を指定する場所があるのですが、ここで指定しても無効みたいです。
どなたか教えて下さい。よろしくお願いします。
0825デフォルトの名無しさん
NGNG0826API学くん
NGNGありがとうございます。もう少し詳しくお願いします。
レバーを二つ作ったとして、この二つを座標で指定する事は出来るの
ですか?
もしできるなら指定方法をおしえてください。お願いします。
0827デフォルトの名無しさん
NGNG○現在のページ
○ページ指定 [ ]
が網掛けになってしまうのですが、何ででしょう?
pd.Flags は
PD_ALLPAGES | PD_CURRENTPAGE |
PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE
って感じなんですが。。。
ちなみにプラットフォームは Windows 2000 です。
0828デフォルトの名無しさん
NGNGWindowのWndProc書き換えるにはどうしたら良いですか?
FindWindowでキャプションからHWND取得して
SetClassLongとかSetWindowLongではダメでした。
0829デフォルトの名無しさん
NGNGフックを仕込んでその中で置き換えるとか
0830828
NGNGプロセスにコード潜り込ませる場合は
そのプロセスのソースコードレベルで潜りこませるということですか?
派生する側のプロセスのコードはいじれないので
フックで何とかやってみようかとも思っていたのですが、
特定のWindow宛てのメッセージだけ置き換えるにはどうすればよいでしょう?
プログラム本体からフック用DLLにHWNDを渡してやっても、
フック用DLLのフックProcではHWNDが設定されなくて
HWND同士の比較が出来ませんでした。
自分で作った子プロセスなのに。はがゆい。
0831828
NGNG0832デフォルトの名無しさん
NGNG>ソースコードレベルで
ちゃう。
対象プロセスのメモリを書き換える。
kageがやってるから参考に汁
>プログラム本体からフック用DLLにHWNDを渡してやっても、
きちんと共有メモリにしてるか?
フックで刷り込まれたdllは、当然対象のメモリ空間で動作する。
0833デフォルトの名無しさん
NGNGなるほど。DLLの方は普通にグローバルに宣言すると、
それぞれでメモリとっちゃうんですね。
>対象プロセスのメモリを書き換える。
ってのも、ちょっと勉強してみます。ありがとうございました。
0834デフォルトの名無しさん
NGNGnMinPageとnMaxPageメンバが同じ値にセットされてないか?
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGそうみたいでした。どもサンクスコです。
んで、「現在のページ」が網掛けなのは PrintDlg() では致し方ないことなのですね?
0837デフォルトの名無しさん
NGNG今、
IniRgnion()でリージョンハンドラを初期化し、その後
SetRegion()でリージョンを設定し、画面を変形後、ソフトの終了時
DelRegion()でリージョンを開放しています。
関数内部で使用されているhRgnEye[], hRngEyeIn[], hRgnEyeOut[], hRgnWinIn, hRgnWinOut
はグローバル変数です。
リージョンハンドラはグローバル変数で宣言しており、SetRegion()が呼ばれる前に
必ずIniRegin()で初期化しているのになぜ個々の関数内で改めて初期化しなおさねば
ならならいのでしょうか?
0838837
NGNGBOOL SetRegion( HWND hWnd, RECT *EyesWin, BORDER *Border)
{
SetRgnEye( hWnd, Border);
if( SysConfig.ResizeWindow){// ここは常にfalseとしている
SetRgnWnd( hWnd, EyesWin);
CombineRgn( hRgn, hRgn, hRgnWnd, RGN_OR);
}
SetWindowRgn( hWnd, hRgn, TRUE);
return TRUE;
}
HRGN SetRgnEye( HWND hWnd, BORDER *Border)
{
int i;
//RECT Rect;// これと
//SetRectEmpty( &Rect);// これのコメントアウトをはずすとうまく行く
/* リージョン設定*/
hRgn = CreateRectRgnIndirect( &Rect);
for( i = 0; i < 2; i++){
//hRgnEye[i] = CreateRectRgnIndirect( &Rect);// このコメントも
hRgnEyeOut[i] = CreateEllipticRgn( /*略*/);
hRgnEyeIn[i] = CreateEllipticRgn( /*略*/);
CombineRgn( hRgnEye[i], hRgnEyeOut[i], hRgnEyeIn[i], RGN_DIFF);
}
CombineRgn( hRgn, hRgnEye[0], hRgnEye[1], RGN_OR);
return hRgn;
}
0839837
NGNGHRGN SetRgnWnd( HWND hWnd, RECT *WinEyes)
{
long Width, Height;/* Window 枠サイズ*/
POINT Polygon[20];/* Window 飾り枠*/
//RECT Rect;// これと
Width = WinEyes->right - WinEyes->left;
Height = WinEyes->bottom - WinEyes->top;
/* Window飾り枠リージョンデータ設定*/
Polygon[ 0].x = 10; Polygon[ 0].y = 0;
// 長くて投稿できないので略します
Polygon[19].x = 10; Polygon[19].y = 5;
/* リージョン設定*/
//hRgn = CreateRectRgnIndirect( &Rect);// これのコメントをはずすとうまく行く
hRgnWndIn = CreatePolygonRgn( Polygon, 20, WINDING);
hRgnWndOut = CreateRectRgn( 0, 0, Width, Height);
CombineRgn( hRgnWnd, hRgnWndOut, hRgnWndIn, RGN_DIFF);
return hRgnWnd;
}
0840API学くん
NGNGCreateToolbarEx()で二つのツールバーを作ったのですが2列にならずに
一列に重なってしまいました。
位置を指定するメッセージか何かを探したのですが見当たりません。
レバーコントロールを使えば実現できますが、使わなくてもツールバー二列は
このような単純な方法で実現可能かどうか知りたいです。
よろしくお願いします、
0841API学くん
NGNGMoveWindow()でツールバーを移動させようとしましたが、全く変化しません。
もしかしてツールバーは移動不可ということなのでしょうか?
0842デフォルトの名無しさん
NGNGOpenProcessでプロセスハンドルを開いてから
セキュリティAPIでゴニョゴニョ
>>836
nMinPageとnMaxPageを違う値にすればいいんでないの?
>>837
838はRectの定義をコメントアウトしたままではコンパイルエラーになると思うが?
839のhRgnWndはどこで定義されてるの? 長くて省略の中?
>>840-841
レバー以前のツールバーはそのような複雑な使用方法を
まったく想定していない。
0843837
NGNGうまく動作しないときは
hRgn = CreateRectRgnIndirect( &Rect);
の行もコメントアウトです
hWndWndはインクルードしているヘッダファイルにグローバル変数として宣言しています。
ヘッダでは同じ変数を多重宣言しないように
#if !defined( hoge)
#define hoge
// 宣言いろいろ
#else
// extern 宣言いろいろ
#endif
のようにしています。
0844837
NGNG・リージョンハンドラはグローバル変数で宣言している
・リージョンの初期化は初期化関数を用意して最初に初期化している
・リージョンの設定は設定関数を用意して初期化後設定している
・リージョンはソフトの終了直前に開放している
と言うプログラムで、
・設定関数内でCombineRgn()関数を使うとCombineできない(Combine後のリージョンハンドラは当然初期化済)
・設定関数内でCombineRgn()関数を使う前にCreateRgnRect()などで初期化するルーチンを追加するとCombineできる
と言う問題がある。
これは何故か?ということです。私のCの知識ではどちらも同じ挙動を示す(正しくCombineできる)はずですが、
前者ではCombineできません。HRGNなる型はMicrosoftの特例による制限があるのでしょうか?
0845デフォルトの名無しさん
NGNGPRINTDLGEX構造体を使う
0846デフォルトの名無しさん
NGNGSetWindowRgnしたリージョンハンドルはシステムの管理下に
おかれるから以後勝手に使っちゃだめ。まずMSDNをちゃんと探せ。
> After a successful call to SetWindowRgn, the system owns
> the region specified by the region handle hRgn. The system
> does not make a copy of the region. Thus, you should not
> make any further function calls with this region handle.
あとハンドルとハンドラはぜんぜん意味が違うから
ちゃんと使い分けろ
0847デフォルトの名無しさん
NGNGずっと使いまわしてもぜんぜん問題ない。別にHRGNだけが
特別なわけではない。似たような例としてはSetClipboardData
に渡すHGLOBALがある。
こういうのは特別な例だからMSDNを読めばちゃんと書いてあるよ。
0848837
NGNG>おかれるから以後勝手に使っちゃだめ。
そのSetWindowRgnする前に(SetRgnEye関数)既にうまくいかないのですが・・・
0849デフォルトの名無しさん
NGNGないと確認したのか説明せよ。まさかSetRegionは
アプリケーション全体を通じて1回しか呼ばれないのか?
とりあえずサンプルコード一式どこかにうぷしてみろ。
お前の回りくどい説明聞くより100倍分かりやすそうだ。
どうせそんなわけのわからんグローバル変数の使い方
してるくらいだからくだらんバグでも入れてんだろ。
0850デフォルトの名無しさん
NGNG問題個所はすでに起動しているアプリケーションの強制終了方法です。
CreateProcess で実行したアプリなら簡単なんですけど、既に動いている *****.exe を他のアプリから強制終了させたいんです。
お力お願いします。
0851デフォルトの名無しさん
NGNGそれって 2000 より上ですよね?
95 とか 98 でもオッケーなんでしょうか?
プラットフォームは 2000 と書きましたが、
開発プラットフォームという意味でした。
ターゲットは 95 とかも含みなのです。。。
0852MMIO
NGNGって Create していないのに Open で成功するんですか?
0853API学くん
NGNGそう言えば昔のソフトはみんな一列でした。
0855837
NGNGhttp://members.tripod.co.jp/TeamZiang/hoge.lzh
にソースとヘッダを上げました。
私の冗長な説明は不要でしょうからこれを見て問題点を説明してください。
0856デフォルトの名無しさん
NGNG9x系の印刷ダイアログに「現在のページ」はなかったと思うが。
2000/XPのときだけ使いたいなら、処理分けれ
0857デフォルトの名無しさん
NGNGもうないぞ
0858837
NGNGhttp://members.tripod.co.jp/TeamZiang/hoge.LZH
拡張子が大文字でした
0859デフォルトの名無しさん
NGNG特定のメッセージを止めてしまいたいのですが、どのようにすればよいでしょうか。
CallNextHookExの返し値を返さず0を返しても素通りでした。
0860デフォルトの名無しさん
NGNG受け取ったメッセージをWM_NULLに書きかえる。
0861859
NGNGなるほど。と思ってやってみたのですがダメでした
↓こんな感じで、0返しても素通りでした。
LRESULT CALLBACK HookProc(int code, WPARAM wp, LPARAM lp) {
if ( code == HC_ACTION ) {
CWPSTRUCT *pcwp = (CWPSTRUCT *)lp;
switch ( pcwp->message ) {
case WM_CLOSE:
if ( MessageBox(0, "ウィンドウを閉じます", "", MB_YESNO) == IDNO ) {
pcwp->message = WM_NULL;
}
}
}
return CallNextHookEx(hhook, code, wp, lp);
}
0862デフォルトの名無しさん
NGNG無理。
CallNextHookEx は「次のフックプロシージャ」を呼び出すだけ。
フックプロシージャ内で何をどうしようと、
次のフックプロシージャが呼ばれようと呼ばれなかろうと、
本来のウィンドウプロシージャは、何事もなかったように元々の引数で呼ばれる。
・・・というふうに、リファレンスには書いてあるように読めた。
たぶんSetWindowLongでウィンドウプロシージャを置き換えるとかしないと駄目なんでわ?
0864デフォルトの名無しさん
NGNGWH_CALLWNDPROC と WH_GETMESSAGE では捕まえられるメッセージの種類が
違うだろ
0865デフォルトの名無しさん
NGNG高速(秒間50回とか)でInvalidateRect(hwnd, NULL, FALSE)を呼ぶと
画面がチラチラします。
ウインドウのクライアント領域しか再描画されていないはずなのに
デスクトップのアイコンやタスクバーまでチラチラするのはなぜですか?
また、これはDirectXというのを使わなくては駄目でしょうか。
良ければ教えてください。
0866デフォルトの名無しさん
NGNGゲームでもつくってんの?
0867デフォルトの名無しさん
NGNG説明不足ですみません。
ウインドウズのプログラミングは全然初心者なのですが
マウスの上下(y軸方向)の変位を検出して、
それをリアルタイムでグラフにするようなプログラムを作っています。
うまく説明できないのですが
どんどんグラフが右から左に流れていくというか・・
0868デフォルトの名無しさん
NGNGhwndにNULLが入っているタイミングが無いか?
常に有効なhwndが入っているか確認汁
0869デフォルトの名無しさん
NGNGレスありがとうございます。
確認してみたところ、やはり有効なhwndは入っています。
念のために if(hwnd!=NULL) と書いてNULLじゃないときっていうように
やってみましたが、結果は変わっていないようです。
0870デフォルトの名無しさん
NGNGマウスの移動メッセージが1秒間に50回以上処理されていなければ
無意味じゃないの?
0871デフォルトの名無しさん
NGNGはい、それで20ミリ秒ごとに(一秒50回)
GetCursorPos関数を呼んでマウスの位置を取得し
その後描画を行なっているのですが
取得した値は連続して変わっているので、1秒間に50回以上は
処理されているのかなと思います。
0872デフォルトの名無しさん
NGNGWM_PAINTって優先順位低くない?
0873デフォルトの名無しさん
NGNGXORで描いて消したら?
0874デフォルトの名無しさん
NGNGすみません、素人なのでよく分からないのですが、
優先順位っていうのはなんでしょう?
どのメッセージから先に処理していくかっていうことでしょうか。
だとスバ、その順位を上げるにはどうすればよいでしょうか。
質問ばかりになってしまい申し訳ありません。
0875デフォルトの名無しさん
NGNG他のメッセージがあるうちはWM_PAINTは取り出されないと思う。
グラフが1本しかないのなら、XORで描けば画面をクリアしなくて
済むよ。
0876デフォルトの名無しさん
NGNGありがとうございます。
よく考えたら、WM_PAINTを呼ばないと描画できないと思ってたんですが
別にどこでLineToを呼んでも線は引けるんですよね。
勘違いしていました。
ありがとうございました。
0877デフォルトの名無しさん
NGNGそんな風なの作ってみたけど...要りますか?
...って、もう解決したのかな
MDIで質問があります
子ウィンドウを一斉に最小化しようと思い
列挙した子ウィンドウに直接WM_SIZEで
SIZE_MINIMIZEDをSendMessageしてみましたが
メッセージが受け取られているが、その通りの動作はしませんでした
どうすれば良いのでしょうか?
0878デフォルトの名無しさん
NGNG0879877
NGNGShowWindow使ったらあっさりできてしまいました
お騒がせしました
0880デフォルトの名無しさん
NGNGあ、やっぱ 9x 系にはないんすね。じゃーあきらめるっす。
ちなみに SDK だけ(MFCとか使わずに)で印刷プレビューとかって簡単に実装できるもの?
ヤパーリ自前でゴリゴリ書かないとダメ?
0881デフォルトの名無しさん
NGNGを表示させるプログラムで文字列を一行追加するたびに
iLine = Edit_GetLineCount(hMainEdit);
for (i = 0; i < iLine; i++) SendMessage(hMainEdit, EM_SCROLL, (WPARAM)SB_LINEDOWN, 0);
といった処理を行って画面をスクロールさせてその時点で最後のログが表示されるように
してあるんですが、この方法だと行を追加するたびに最初からスクロールしているのが気になります。
行数が増えるとちらつくのも気になるんですが良い方法ありませんか?
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885865
NGNG遅レスすみません。
>そんな風なの作ってみたけど...要りますか?
ということですが、もしよろしければ参考にしたいので
頂けないでしょうか?
もしOKということでしたらメアドを取って参りますので
その旨書き込んでいただけると幸いです。
よろしくお願い致します。
勘だが、DebugActiveProcessでプロセスにアタッチして、
止めたいタイミングでSuspendThreadして、
GetThreadContextで現在のIPを取ってきて、
そのアドレスにint3をWriteProcessMemoryして、
FlushInstructionCacheして、
ResumeThreadするみたいな感じでどうかね?
0887デフォルトの名無しさん
NGNGもちろんあらかじめアタッチしておく必要はあるけど
0888デフォルトの名無しさん
NGNG漏れの環境ではコメント部分があろうがなかろうが
結果は変わらなかったが。
少なくともお前の書いてる部分が問題ではないし
SetWindowRgnしたハンドルをグローバル変数に持ち続けるのは
明らかに間違いだからやめれ
0889877
NGNGメール送るの面倒なので...
http://members.tripodasia.com.hk/rune187/api/q.txt
違ってたらゴメンね
0890デフォルトの名無しさん
NGNG良い方法はありませんか?
0891デフォルトの名無しさん
NGNGその都度描き直す。これ最強。
0892890
NGNGその都度って、どの都度ですか?
Timer使ってってことですか。
0893デフォルトの名無しさん
NGNG0895865
NGNGありがとうございます。
なるほど、今までの画面をBitbltで一ドットずつ次々に左に転送しているんですね。
大変ためになりました。
どうもありがとうございました。
0896855
NGNG>漏れの環境ではコメント部分があろうがなかろうが
>結果は変わらなかったが。
どう変わりませんでしたか?
あなたは質問者を罵倒するだけ罵倒して解決法を示さないのですか?
能力があり、解決するならばあなたの傲慢な態度も甘んじで受けましょう。
しかし、それをしないでおまえはダメだと言うだけなら誰でもできますね。
0897デフォルトの名無しさん
NGNGhttp://members.tripod.com/~masapico/doc_ApiSpy.html
は参考になるかも。
0898デフォルトの名無しさん
NGNG何も考えずに作ったら、画面の配色変えたらグレーの背景になっちまいましたが。
0899デフォルトの名無しさん
NGNGの本ってないでしょうか?本屋とかで易しそうな本見るとたいていMFCでの
プログラミングの本なんですが。
0900デフォルトの名無しさん
NGNG猫でも見たら?
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGじゃ、ATLの本でも……
0903デフォルトの名無しさん
NGNGアクティブの時に、WM_MOUSEWHEELをゲトしたいんですが、出来ますか?
スクロールバー無しのリストボックスです。
0904デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGすみません。
char a[]="なんらかの文字列";
という長さ・内容不定の文字列があり、始めから1文字づつTextOutでウインドウに表示したいのですが、
たとえば”あ”と”a”ではバイト数がちがうので、
int i=0;///グローバル
mainloop(){
TextOut(hdc,0,0,a,i);
i++;
}
なんてやるとローマ字はちゃんと表示されますが”あ”などの日本語になるとゴミになってしまいます。
かといってi+=2とやると今度はローマ字のところがおかしくなります。
この違いを自動認識するにはどうすればよいのでしょう。
0907デフォルトの名無しさん
NGNG1文字ずつ出力するんなら、出力前に全角文字の1バイト目かどうか
自分で判定すればいいじゃん。
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG文字コード表と睨めっこしてきなさい。
0910デフォルトの名無しさん
NGNGCharNextとか、自前判定とか、方法はいくらでもあるだろ
0912デフォルトの名無しさん
NGNGShift-JISなら1バイト目が
0x81から0x9F、または0xE0から0xEFになるんじゃないの?
0913三瓶
NGNGありがとうございました。
0915デフォルトの名無しさん
NGNG_mbclen使うといいんじゃないのかなーとか言ってみるテスト。
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNGなんつったって八百万の神々の国ですから
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNGビルマ奥地の寒村に伝わると言う、
世界を記述するとも呼ばれた方程式の謎を追い、
我々川口探検隊は以下略。
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNGディレクトリならGetCurrentDirectoryで取得できます。
「プログラムが起動された」の意味によっては
GetModuleFileNameのほうかも。
0927デフォルトの名無しさん
NGNG教えてくれて、ありがと!助かったヨ
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGあるライブラリがファイルに直接書いてしまうので。
メモリーディスクのようの物を作成してそこに書かせたいのですが
どのようにすればよいのでしょうか?
よろしくお願いします
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/winnt/hardware/se168218.html
0932デフォルトの名無しさん
NGNGカウントされるだけなんですか?
10個並べてEnterCriticalSectionしたのに、ちっとも無限ループに陥りません。
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNGJavaのsynchronized文はそんな感じだな。
そうじゃないとマルチスレッドアプリで再帰が使いづらいのかもな。
0935デフォルトの名無しさん
NGNGそーです。そのとおり。
> Once a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution.
> This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.
0936デフォルトの名無しさん
NGNGあらかじめファイル名を表示させたいのですが、
どのようすればいいのでしょうか?
0937デフォルトの名無しさん
NGNGhttp://216.239.39.100/search?q=cache:9iw1A3FdPVEC:www-ctp.di.fct.unl.pt/~jcs/cg1/commdlg3_1hma.htm+%22Pointer+to+a+buffer+that+contains+a+filename+used+to+initialize+the+File+Name+edit+control%22&hl=ja&ie=UTF-8&inlang=ja
これ?
0938デフォルトの名無しさん
NGNGlpstrFileTitleに文字列入れとけばできるかと思ったのですがダメみたいだし
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNG0941936
NGNGどうもありがとうございました。
0942デフォルトの名無しさん
NGNGって使った方います?
使用方法がわかりません。
0943899
NGNGここもあった
0944デフォルトの名無しさん
NGNGそこにprintfかcout使って文字を吐きたいんだけど、どうすればよいの?
0945デフォルトの名無しさん
NGNGSetStdHandleして_ioinitを呼ぶ
0946944
NGNGできたデス。
さんくす。
0947デフォルトの名無しさん
NGNG追加しない分プログラムのサイズが小さくなると思ったのですが、
実際に作ってみるとどちらも40KBほどで同じサイズでした。
リソースってプログラムのサイズとは関係ないのでしょうか?
0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNGリンカの設定によっては実行ファイルのサイズはアラインされるから小さな差が出ない事があるよ
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNGhttp://www.asahi-net.or.jp/~kh4s-smz/spi/note/minispi.html
0952デフォルトの名無しさん
NGNG良いのでしょうか? spy++で追っかけると、いきなりDESTROYが飛んでるよ
うですが・・・
0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNG>>953が正解。なんで、IDCANCELを受けないようにすればいい。というと、
「右上の×で閉じないんですが」と言われそうなので、そのときは、
WM_SYSCOMMAND捕まえて、wParamがSC_CLOSEだったら終了処理にすれば、
終了させられる。
0955952
NGNG0956デフォルトの名無しさん
NGNGどのような方法がありますか?
0957デフォルトの名無しさん
NGNGHWND_TOPMOST
でぐぐれ
0959JPEG特許問題
NGNGMFCでいうSetPictureDispatch等がSDKで使えるのなら解決しそうなんですが、
やり方が分かりません。
OleLoadPictureFileがSDKで使えないならIJG・・・・鬱。
SDKでOleLoadPictureFileを使う方法を教えて頂ければありがたいです。
よろしくお願いします。
0960デフォルトの名無しさん
NGNGこんな漏れは逝ってよしですか?
0961デフォルトの名無しさん
NGNG1と6は赤
2と5は赤と青
3と4は青に塗られています。
今サイコロを転がして赤が出ました。 裏が赤の確率は?
0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNGwhy?
0966デフォルトの名無しさん
NGNGWhat?
0967デフォルトの名無しさん
NGNGwhere?
0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNGはぁ?
0970デフォルトの名無しさん
NGNGテキストボックスは Windowsの用意してるコントロールを使っています
もしテキストボックスを使う事で何か問題があるなら、Windows上のほぼ
全てのアプリに問題がある事になるでしょう
なお、一般的にはクライアントアプリで脆弱性を云々しないと思います
0971デフォルトの名無しさん
NGNGおぃおぃ。。
今、赤が出たなら、目は 1 か 6 か 2。
その中で裏側も赤の場合は 1 か 6 だから、2/3 だろ?違うのか?
0972デフォルトの名無しさん
NGNGOleLoadPicturePath() で検索しる
0973デフォルトの名無しさん
NGNG現在のハードウェアプロファイルの内容を取得するAPIはあったのですが(GetCurrentHwProfile)、
HWプロファイルの一覧を取得したいのです。
レジストリから直接でもいいのですが、HWプロファイル名が見つかりませんでした。
どなたか、よろしくおながいします。
0974デフォルトの名無しさん
NGNG下記の方法で大丈夫でしょうか?
一応「表」フォルダを作って試してみて、ちゃんと\は付いたのですが
他に気をつけることはありますか?
void AddBackslash(LPTSTR lpszPath)
{
if(IsDBCSLeadByte(lpszPath[lstrlen(lpszPath) - 2]) ||
(lpszPath[lstrlen(lpszPath) - 1] != '\\')){
lstrcat(lpszPath, TEXT("\\"));
}
}
0975デフォルトの名無しさん
NGNGIsDBCSLeadByteでは「2バイト文字の2バイト目ではない」ことが保証できないから、
ちゃんと頭から調べないとダメよん。
っつか、そのコードだと "a" とか与えたら吹っ飛びそうだが。
0976デフォルトの名無しさん
NGNGこの場合は保証されなくてもよくない?
0977デフォルトの名無しさん
NGNGすると 「も\」 が 「も\\」 になってしまうがよろしいか?
0978デフォルトの名無しさん
NGNGWindowsのフォルダ名に\はつけられんよ。
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNGホットトラッキングは、SystemParametersInfo の SPI_GETHOTTRACKING で取得できるンですが…
0981デフォルトの名無しさん
NGNGコーディングの初期条件である
>パスの最後に\をつける(すでに付いていたら何もしない)
を満たさなくなるってことだろ?
0982デフォルトの名無しさん
NGNGえ?なんで満たさなくなるの?
0983デフォルトの名無しさん
NGNGPathAddBackslash使わん理由は?
0984デフォルトの名無しさん
NGNG次スレよろ
0985デフォルトの名無しさん
NGNGカチャ
;y=ー( ゚д゚)・∵. ターン
\/| y |)
0986デフォルトの名無しさん
NGNG仮に C:\も\ というパスがあったとすると、
> IsDBCSLeadByte(lpszPath[lstrlen(lpszPath) - 2])
で「も」の2バイト目がチェックされて偽となり、次に
> lpszPath[lstrlen(lpszPath) - 1] != '\\'
でパスの最後が \ だからこれも偽となり、結局何もせずに
リターンするから C:\も\ はそのままでは?
0987デフォルトの名無しさん
NGNGはじかれてしまった…
0988デフォルトの名無しさん
NGNG「も」のShiftJISコードは 82 E0 で
IsDBSCLeadByte(0xE0) は TRUE。よって、
lstrcat(lpszPath, TEXT("\\"));
が実行されるだろ?
やるなら、
if (CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1) != '\\')
lstrcat(lpszPath, TEXT("\\"));
とかだろ。
最近、Win32API書いてないから CharPrev の引数あってるか自信ないけど(w
0989デフォルトの名無しさん
NGNGそれくらい実際にコンパイルすりゃ判るだろうに
>>983
shlwapi.dll が入ってない環境のことは考えないのか?
漏れなら GetFullPathName() 使うよ
0990デフォルトの名無しさん
NGNGWin32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
0991デフォルトの名無しさん
NGNG埋めちゃえ〜
0993デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0994デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0995デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0996デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0997デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
0998デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。