(・ω・`)乙
やっと立ったか
もうちょっと頭を冷やす時間を取った方がスレを大事にする気持ちが出て
来るかも知れないね。
CreateDIBSectionで作成したビットマップを
メモリDCにSelectObjectして描画しています。
このあとにこのビットマップをクリップボードに入れたいのですが、
CF_BITMAPではなくCF_DIBを使わないといけないようで、
そうなると渡すのはHBITMAPではなくなるようです。
その情報はHBITMAPからどうやって作成すればよいのでしょうか。
13 :
デフォルトの名無しさん:2008/09/15(月) 17:34:10
GDIPlusの質問もここでよろしいのでしょうか?
GDI+で描画した画像を保存したいのですが、
上手く保存できません。
Bitmap.Save で 'image/png'を指定したGUIDを渡して、
ファイルにPNGで保存しようとするのですが、
Statusが Invalid Parameter が帰ってきて保存ができないです。
ファイルから読み込んだものをそのまま保存することはできるのですが、
編集したら保存できないようです。
どのようにしたら編集したものを保存できるのでしょうか?
>>12 CreateDIBSectionしたときに、ビットマップへのポインタってもらえるだろ。
それとCreateDIBSectionにBITMAPINFO渡しただろ(無くしていたらGetObjectが使える)。
その2つの中身を新しくGlobalAllocで確保した移動可能なメモリにコピーする。
そして、そのメモリハンドルをSetClipboardDataでCF_DIBとしてセットする。
15 :
13:2008/09/15(月) 18:33:26
自己解決しました。
GDI+のBitmap生成時に、他の画像のWidthとHeightを指定していたのですが、
どうやら、Width,HeightがUnsigned Integerのために、
overload されている別のBitmapの生成子を呼んでいました。
PixelFormat32bppARGBなどを全部引数を指定したら、
無事に他のエラーがなくなり、保存することができました。
しっかり、Bitmap.Save以前の生成時のエラーも見ておくべきだった・・・
エスパーでないとわからない質問でスマソ
16 :
デフォルトの名無しさん:2008/09/15(月) 18:40:49
GetCharWidthABC関数はどのような時に使うのですか?
LR_ とか CS_ みたいなで始まる定数が何の略なのかが載ってるサイトありませんかね?
MSDN
ちょっとお尋ねしたいのですが、DelphiとかwxWidgetsとかが、richeditを使わない独自のテキストコントロールを実装していたりするのは、richeditにいろいろ問題点があるからなんでしょうか??
もしそうだとすれば、どういうところが問題点なのでしょう??
詳しい方いらっしゃいましたら教えて頂けると幸いです。
バージョンがいろいろあって、
しかも新しいのは古いWindowsで使えないし、古いのは新しいWindowsで使えず、
しかも互換性もろくにないことかな。
WebBrowserコントロールの方がまだましな気がする。
21 :
19:2008/09/16(火) 03:00:04
なるほど・・ありがとうございますm(_ _)m
どういたしまして。
>>13 Win95以降(だと思うけど)なら、CF_BITMAPでHBITMAPを渡せばシステム側でCF_DIBに変換して
一緒にクリップボードに入れてくれる。
逆もしかりで、CF_DIBでDIB入りHGLOBALを渡せば、CF_BITMAPも作って入れてくれる。
色変換とかにシビアにならないならその程度の使い方で困ることは基本的にない
>>23 クリップボードに入れるときに変換するのではなくて、
貼り付けるアプリ側から要求が来たときに変換するんじゃないの?
質問させてください。
Windowsプログラミングの知識があまりないため、
これまで自作のアプリでfopen→fgetsでファイルの内容を読み込み内部処理ということをやっていました。
これをCreateFile→ReadFileに変更したいのですが、
ReadFileしたバッファから一行ずつ読み出すようなAPIはありませんでしょうか?
fopen/fgetsでいいだろ
わざわざCreateFileに変更する理由など無い
28 :
26:2008/09/16(火) 16:06:48
>>27 もともとの動機は、ファイル名をソース上で記述しているため、
違うファイルを開くために毎回コンパイルしていたので、
コモンダイアログボックスで指定できるようにしたかったのです。
他にいい方法がありますでしょうか?
>>28 コモンダイアログとCreateFileは関係ないと思うが。
GetOpenFileNameで得られるファイル名はLPTSTRだから、
Unicodeビルドの場合は注意が必要。
>>25 実際のデータ変換をいつするかはプログラマでもあまり考えなくていいかと
少なくとも形式列挙すれば両方入ってるわけだし
つかXP以降は特にファイルオープン関連はunicodeAPIでないと普通に開けない
ファイル等(ショートネームがない上にshiftjis範囲外の文字を利用したフォルダなど)が出てくるんで
unicode関数使いたいってのはわからんでもない話だがな
まぁそれにしても_wfopenか_wfopen_sを使えば良い話ではあるが
リードラインする普通のWin32APIってのは存在しない
まぁ車輪の再発明になるだろうがこれを気に自分でテキスト読み込みストリーム関数作ってみるのもいいんじゃない?
実際そんなに難しいものじゃないし
streambuf作ってiostreamに渡せばええんちゃう?
>>30 お前がプログラマとしてド素人だということはよく分かった
>>33が何にご立腹なのかわからんが、
>>12の答えとしては
「気にしないでCF_BITMAPでHBITMAPを放り込め」
あの程度でご立腹てw
2ちゃん初心者かよ
自作の動画プレイヤーにボリュームコントロールを付けたいと考えています。
auxSetVolumeを使えばWAVEやCDプレーヤーの出力音量は調整できると思いますが
この自作プレイヤー独自の音量を変更したいです。
アプリケーション独自の音量を調節するような方法はありませんでしょうか。
どうやって動画再生を実装しているか知らないけど、
音量調整用のインターフェース位付いていると思うのだが。
完全自前でやったとしても、DirectSoundやCoreAudioで音量調整できるし。
waveストリームを渡す時に、音量を下げてサンプリングして渡す
Windows Media Format SDK 11で実装しました。
リファレンスが完全英語なので見落としたのかもしれませんが
音量調節のインタフェースはなかった気がします…。
40 :
12:2008/09/16(火) 21:53:01
>>40 MSのサンプルを見たら、CF_BITMAP/CF_DIBの両方をSetClipboardDataしていた。
で、CF_BITMAPではわざわざDIBSectionをDDBに変換していた。
多分クリップボードAPIの設計が古いとかで、DIBSectionには対応してないんじゃないの?
同じHBITMAP型でも内部的には違う物だし、Win16時代には無かったし。
c++のtry〜catchでapiのエラーもキャッチできるんでしょうか?
tryがどんな原理で動いてるのか考えれば容易にわかること
tryがどんな原理で動いてるのか考えてもわかりません
おしえて
できないよ
知らないならレスしないでくださいうざいです
だったらしても構わないよね
>>48 知らないならレスしないでくださいうざいです
だったらしても構わないよね
知ってるならレスしないでくださいうざいです
たまに例外をスローするやつがあったような
APIのエラーは戻り値見りゃいいだろ
>>52 構造化例外処理の実務はコンパイラ依存なんじゃねーの?
ポインタ渡し系 API で不正アクセスが発生 → そいつをトラップできた というだけの話のような・・・
>>54 つ HeapAlloc
つ InitializeCriticalSection
>>55 Win32例外とC++の構造化例外は別物です
>>56 HeapAllocが出す例外 = 構造化例外
C++標準の例外 = 実装依存、VC++では構造化例外を使用
advanced windows には VC++ だと C++の構造化例外を実装するのに
(Win32)SEH も利用してるっぽいことが書かれているな (改定4版 p.818)
大抵SEH使ってるだろ
throw付近でRaiseExceptionが呼ばれる
CreateProcessでコンソールアプリを起動しているのですが
そのアプリが出力した標準出力の文字列を取得するには
どうすればよいでしょうか?
CreatePipe
CreatePipeでも取得できない事があるのですがその場合はどうすればいいのでしょうか?
1.標準エラー出力のほうだった
2.直接コンソールAPIで出力していた
ここでお約束のAPIフック
フック・・・ワクワクしちゃう・・・
CreatePipeで取得しようとするとコンソールアプリが終了してしまいます。
リアルタイムに1% 2%・・・と画面が書き換わるアプリだからでしょうか?
この場合はどうすればいいのでしょうか?
そんな書き方しかできないならエスパースレにでも行った方がいい。
AttachConsole
ReadConsoleOutputCharacter
69 :
デフォルトの名無しさん:2008/09/18(木) 08:35:45
質問です。
Findwindowで取得できるハンドルを、EXEの実行ファイル名から取得はできませんでしょうか?
Findwindowは使わないやり方が知りたいのですが、ありましたらご教授おねがい致します。
とりあえず
EXEのファイル名からプロセスIDの取得
はできます。どうかお力をおねがいします。
70 :
:2008/09/18(木) 09:00:56
Win32APIって64ビットWindowsでも使えるの?
>>69 CreateToolhelp32Snapshot -> EnumThreadWindows
72 :
デフォルトの名無しさん:2008/09/18(木) 10:02:48
レスありがとうございます。
いま外出中なので、帰宅次第やってみようと思います。
またお世話になるかもしれませんが・・・
では失礼致します。
@携帯
73 :
、:2008/09/18(木) 12:06:31
質問です。Daemonを任意のタイミングで起動したりできるでしょうか?もし、できるとして起動するためのAPIはありますでしょうか?
実行はCreateProcess
ATとかcronみたいな機能を期待しているのかよくわからんな
timeGetTime + timeBeginPeriod/timeEndPeriod の使い方なんですが、
timeGetTimeを呼び出すごとに、timeBeginPeriod/timeEndPeriodではさむのか、
アプリケーションの開始と終了時にそれぞれ呼べばいいのか、どちらなのでしょうか。
どっちかといえば後者
ありがとうございます。できるだけ範囲を絞った上で、大域的にtimeBeginPeriod/Endするという感じでやってみたいと思います
79 :
デフォルトの名無しさん:2008/09/18(木) 14:44:23
>>71 使い方がさっぱりですが、
CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST,PID);
をやって、HANDLEが返ってきますが、
function EnumThreadWindows(dwThreadId: DWORD;
lpfn: TFNWndEnumProc;
lParam: LPARAM): BOOL; stdcall;
がさっぱりで・・・。
まさかヒープリストを取得するとは
82 :
デフォルトの名無しさん:2008/09/18(木) 15:12:41
指定したフォルダ内のファイル情報について取得するAPIはありますか?
ファイル数やそのファイル名を取得したいのですが。
FindFirstFile,FindNextFile
85 :
83:2008/09/19(金) 14:06:42
>>84 ありがとうございます!
とても助かりました。
86 :
デフォルトの名無しさん:2008/09/19(金) 15:17:11
いま、指定したフォルダの全サブフォルダにあるファイルを求める関数を
作っているところ暇だったら待っててくれ
待つ
89 :
デフォルトの名無しさん:2008/09/19(金) 16:53:59
C/C++で順にファイル名を受け取れるやつってこと
boost::filesystem::directory_iterator
91 :
デフォルトの名無しさん:2008/09/19(金) 17:58:54
長さやコードの違いで動くか判らないで自分でつくるよ
他人の作った糞コードなんか信用できないから、全一ハカーの俺が全部自作してやんよ
全一君?
最近自分の作ったコードの方が信用できなくなってきた
クラスのインスタンスってどこで宣言するのが適切なの?
このスレと無関係な話を振るその間抜けな脳味噌を何とかする方が先決
べつにmallocでもいいよね?
特定のレジストリエントリの値が変更されたことを検出したいのですが、
どなたか良い方法をご存じないでしょうか?
もっとも単純?なのは
定期的にそのレジストリを参照して値が変更されているか確認するという方法だと思いますが、
そうではなくて、メッセージなどで変更が通知されたら良いなと思って調べています。
RegOpenKeyEx()の引数にKEY_NOTIFYを設定すると、
「変更の通知(キーに変更が加えられたときに、そのことを通知するよう要求)を許可します。」
という記載があったのですが、どう使用してよいかわかりません。
どなたかご存知の方はいませんか?
イベントハンドルでも渡しておけばsigunaruされるんじゃないの
RegNotifyChangeKeyValue
ごめん、typoだorz...
sigunal です。
sigunal(笑)
typoじゃなくて英単語知らないだけだろバーカ
知らないならレスしないでくださいうざいです
107 :
デフォルトの名無しさん:2008/09/20(土) 14:19:52
GetTextExtentPoint32関数を使わずに文字列幅を求めたいのですが
そのような場合はどの関数を使えばいいですか?
実際に書いて色の違いで取得とかだめ?
なんでGetTextExtentPoint32を使いたくないんだ?
>>109 使いたくない、という訳ではありません。
ただ他の方法も知っておきたいと思って質問しました。
ではGetTextExtentPoint32使ってください。
GetCharABCWidthsでそれぞれの文字の幅を取って、自前で足すとか?
「走行中の車の向きを変えたいんですが、ハンドル操作以外に方法ありますか?」みたいな質問するなよ。
113 :
デフォルトの名無しさん:2008/09/20(土) 14:51:08
あとわからないなら黙っててください
MeasureText
Uniscribeにもそういう機能無かったっけ?
>>112 サロゲートペアとか右から左に書く言語とかどうすんだよ
無知は黙ってろ
119 :
デフォルトの名無しさん:2008/09/21(日) 04:48:08
リストビューのレポートで選択された行を上下に移動する方法はありますか?
矢印キー
121 :
119:2008/09/21(日) 04:56:58
削除して挿入
123 :
デフォルトの名無しさん:2008/09/21(日) 05:26:26
>>122 やっぱりその方法しかないですか?
どもでした
GetImageConfigInformation()が必ず失敗する
でもエラーコードは0
誰か成功経験ある?
>>124 こんなもん数行のコードで同等のことが出来るだろ
くわしく
PEヘッダの仕様書でも読め
知らないならレスしないでください
いつもの事がだが、凄く意味の無いスレだよな。。。
教えろ→自分でやれ→終了 の流れ
>>129 「自分でしろ」という事を教えてるんだろうが
コード書いてるのは質問している当人なのだから、結局は自分でする事になるだろ
「〜するプログラム(ソース)を書いてくれ」と言うならそもそもスレ違い
教えたいなら教えてください
知らないならレスしないでください
デバッガ作りたいんだけど、
デバッグ実行中のプロセスの一時停止を一発でできるapiってある?
プロセスの全スレッド列挙してSuspendThreadするか、
Get/SetThreadContextで適当なスレッドにトラップを設定するしかない?
DebugBreakをプロセスIDかハンドル指定で呼べる感じのやつってない?
133 :
デフォルトの名無しさん:2008/09/21(日) 18:46:17
HFONT hPrev;
hPrev = SelectObject();
SelectObjectしたら元のオブジェクトを保存して使い終わったら戻すべきであるという決まりがあるようですが、
そのような決まりがある理由を教えて下さい
自分でしろって言う奴は単に自分も知らないだけw
ということにしたいのですね。
知らないならレスしないでください
もうだめだこのスレ
138 :
デフォルトの名無しさん:2008/09/21(日) 19:30:40
すみません。別スレから誘導されてきました。
C言語の文法書2冊とWinAPIの本を2冊読みました。そこで
以前から私が作りたかった、ショートカット作成プログラムをぜひとも作りたいのです。
でも、やり方とかMSDNを調べてもわかりません。具体的に手順を書かせていただきますと。
1.コンソールアプリから2つフォルダのフルパスを入力する。
2.WindowsAPIで書いたショートカット作成関数を呼び出してお互いのフォルダにお互いのフォルダの
ショートカットを作成する。
そこで、ショートカット作成のWindows32APIのMSDNの調べ方もしくは
関数そのものを教えて欲しいのです。すみませんが、教えてください。よろしくお願いします。
140 :
132:2008/09/21(日) 19:45:54
自己解決。英語版MSDN調べてたらまんまDebugBreakProcessってのがあった。
141 :
138:2008/09/21(日) 19:47:57
>>139 どうもありがとうございます。知りたい情報が載っているみたいです。
なんとか解読してがんばってみます。本当にありがとうございました。
こんなんググりゃ即効で出てくんだろうが
どんだけゆとりなんだよ
>>140 XP以降はそんなのあるんだな。
BoundsCheckerの中の人がWin2kのときに書いた本では、
デバッガのスレッド優先度を最大にしてから被デバッグプロセスの
全スレッドをSuspendThreadしてブレークポイントを挿入するという
まどろっこしいことをしていた。
ホントゆとりしか居ないのなw
荒れるからおっさんは黙ってろw
ID出ないので、ここで荒らして遊んでます。許して下さい。
許します。
148 :
デフォルトの名無しさん:2008/09/21(日) 23:33:56
> 〜という決まりがあるようですが、
> そのような決まりがある理由を教えて下さい
ゆとり丸出しな質問だな
わからないならレスしないで下さい
Windowsを作った人たちがそうしなければならないように作ったからです。
理由はここにいるような下っ端な人には知らされていませんから、
レッドモンドにお問い合わせください。
戻せばDeleteObjectするかしないか気にしないでいいだろ
最終的にはストックオブジェクトになるから消さなくてすむ
決まりごとに理由を問うてるのがそもそも馬鹿
そういう馬鹿ほどいちいち余計なことを気にするからいつまでも馬鹿のまま
うるせーばかどっかいけ
わかったどっかいってくる
樹海に行ってくる
祝ってやる
お前ら一生うらやんでやるからな
> "衆愚の鑑" に一致する日本語のページ 3 件中 1 - 3 件目
新しい流行語でも作りたいのか?
165 :
デフォルトの名無しさん:2008/09/22(月) 14:56:39
WindowsAPIでVBみたいにテキストを入力できるタイプのメッセージボックスってないんですか?
>>164 何でまとめて検索するんだ?
「衆愚」は衆愚政治とかで使うし、「〜の鏡」って表現も普通にあると思うんだが
ちなみに
>>162ではない
ゆとりは語彙が少ないからしょうがない
本来の用途ではないが GetOpenFileName
>>166 まとめて検索して出ないような表現は無いのと一緒
例えば「蝿の鑑」なんて言葉無いだろ
↑馬鹿
↑馬鹿
アニメーションしてるウィンドウの上に別のウィンドウを重ねて
重ねたほうのウィンドウを透明にしてその上に絵を描きたい
NULLブラシを使ったところアニメーションが反映されません
レイヤードウィンドウを使うことによって解決できましたが
レイヤードウィンドウを使わない通常の描画処理で同じことをできないでしょうか?
>>175 2000やXPではできません。
というかできないからレイヤードウィンドウのAPIが追加されたのです。
VistaではAero有効ならできたような
別のスレッドで(メインスレッドとは関係ない)メモリDCに対してHALFTONEモードでStretchDIBitsするとメインスレッドの描画処理が遅くなってしまう。
スレッドの優先度下げてもメインスレッドに影響するからもしかしてGDI系の関数って競合を防ぐために内部的にクリティカルセクション使ってたりするのかな。
自前で補間拡大実装しますかね。
つDirect3D
>>179 今度1から書き直すからそのときはD3Dも検討してみるよ。
今のPCならGDI+でも割と余裕かも。
結局DIBに直接描画するだけだから、競合とかは関係無い筈。
ああっ、そこっ、かんじちゃうの
だめっ、ああっ、かんじちゃう〜〜〜
ボケェ平仮名や言うとるやろが!
187 :
デフォルトの名無しさん:2008/09/24(水) 00:14:21
文字幅テーブルを使う事にはどんな利点がありますか?
なんで自分で調べないの?ゆとり?
>>187 欠点しか思い浮かばない
・サロゲートペアは?
・カーニングは?
>>189 サロゲートペアの時のみGetTextExtentPoint32()を使うのはどうでしょうか?
文脈によって字形が変わる場合もあるんだから無理だろ。
例えばアラビア文字のyは語末と語頭に来た時(正確な言い方ではないが勘弁)で
幅が全く違ってくるな。
単独
ي
語頭
يط
語尾
طي
語中
طيط
じゃぁどうやったら確実に文字幅を計る事が出来るのでしょうか
どうやってもできない
半透明ブラシを作るには?
COLORREFでα値設定できたらなあ
つ GDI+
WM_PAINTの処理が増えてきたので
別のソースファイルにpaint用の関数を書いて
hdcを渡したのですがうまくいきません
なぜでしょうか?
↓のようにしたいのですが・・・
hdc = BeginPaint(hWnd, &ps);
PaintFunc(hdc);
EndPaint(hWnd, &ps);
>>199 うまくいってないのは WM_PAINT で再描画する領域外だったりしないか?
問題ない部分だけみせてなぜと聞かれても
wchar_t buf[2];
buf[0] = 0xD844;
buf[1] = 0xDE3D;
TextOutW(hdc,0,0,buf,2);
■■こんな感じに表示されてしまうのですが、正しく表示させるにはどうすればよいでしょうか
WM_PAINT内にそのコードを書いたときは、大丈夫ってことだよな
エスパーさん出番ですよ
>>202 それはL"TEST"とかだと問題ないって前提なんだよな?
それなら選択されているフォントに対応する文字がないだけじゃね?
VistaでGetStockObject(DEFAULT_GUI_FONT)で得たフォントを
選択して描画してみたらきちんと表示されたぞ。
>>205の言うとおりだとおも。
適当にやって表示されなかったのは、サロゲート文字だからだろうな。
207 :
デフォルトの名無しさん:2008/09/25(木) 00:04:06
WM_POWERBROADCASTのメッセージでスタンバイ移行時の
PBT_APMSUSPENDのところの処理がvistaだとうまくいかないんだが、
どうすりゃいいでしょうか?
208 :
デフォルトの名無しさん:2008/09/25(木) 00:12:47
Win32のGUIアプリケーションの標準出力を、そのアプリが立ち上げたcmd.exeの標準出力へ出す方法って
どなたかご存じないでしょうか?
OpenProcess等で別プロセスを立ち上げて、その標準出力の結果を本アプリへ戻す、
という方法はパイプを使って紹介されているのですが、
今回のような逆のパターンって見かけないですね。
同じだろ
>>199 どう上手くいかないのかを書いてくれないと・・・
コンパイル通らないならエラー内容を。
212 :
デフォルトの名無しさん:2008/09/25(木) 00:56:17
213 :
デフォルトの名無しさん:2008/09/25(木) 01:29:30
Vistaのコンパネの[ネットワークと共有]で
ネットワーク探索が有効かどうか知る方法ってあるんかな?
レジストリを探るしかないんだろうか。
>>208 AllocConsoleとかAttachConsoleでは駄目?
っていうか、ちょっとググっただけで、いっぱい例が出てきたが。
AttachConsole
GetStdHandle
CreateCompatibleBitmapとか、Win95/98だとビットマップのサイズは16MBを超えられないと書いてありますが、
DDBのサイズってどういう計算になるんでしょうか。
デバイス依存なので、デバイスによって異なるから、ピクセル数からサイズを求めることは不可能だったりしますか。
>>216 色数は32bitが最大だから横×縦×8だと思う
世の中には、
power of 2でなければならないとか、
縦横が同じでなければならないだとか、
貧弱なのもあるらしいぜ。
DDBでそこまでパフォーマンス優先な実装は流石にないだろ。
あっても、水平方向のアラインが16bytesとかそれ位じゃね?
そういえば前にGDI+で縦横が同じでないアイコンを読み込んだらメモリアクセス違反で落ちてたな
さすがにもう修正されてるとは思うが
221 :
sage:2008/09/25(木) 08:23:05
ありがとうございます。
>>211 これも起動した相手プロセスの標準出力を起動要求した側へ戻すためのパイプ例ですよね。
>>214 こちらの方法も試したのですが、コンソールウィンドウを×で閉じると、
GUIのウィンドウの方も強制的に終了されてしまうので、見送っています。
ハンドラを設定して、CTRL_CLOSE_EVENT が送られてきたときに、TRUEを返却するようにしたのですが、
OSから、このプログラムを強制終了するか否かのダイアログが出てしまうので、見送ったのです。
(なにも言わず無視するようならば良かったのですが)
今テスト中ですがやりたいのは、
・メインのアプリAから cmd.exe を別プロセス実行
・そのcmd.exeに割り当てられた標準出力にAの標準出力を表示。
乗っ取ると言うよりは、寄生みたいな感じで。2つのプログラムの標準出力結果がミックスされるような。
相手がcmd.exeである点だけがくせ者だったりします。
もし自前プログラムだったら、割り当てられている標準出力のハンドルを呼び出し元に通知したり、
それこそパイプでつないで、自分の標準出力に改めて出すようなコードを書くのですが。
>>214 >>215 XPからはAttachConsoleというものもあるんですね。
こちらちょっと調べてみようと思います。
lWidth * lHeight * sizeof(RGBQUAD)
昔はプレーン4枚のVRAMとかあったしなあ
だから?
>>225 長くなるから、年寄りの話に相槌打つときは「ふーん」だけにしときなさい。
>>225 わからないなら、「教えてくださいお願いします」だろ
WinMain内でMutexを使って2重起動防止するようにしたら
WndProc内のcase WM_SETFOCUS:が機能しなくなりました。
カーソルでウィンドウの大きさを変えてcase WM_PAINT:を機能させた後なら
機能するようになります。
一体何が問題だと考えられますか?
>>229 どこかのcaseにbreak書き忘れたとか、そういうショボいミスだろう。
Mutexは関係ないかと。
>>231 いえ、Mutex以外書き換えてない状態で起きるんですよ…
>>229 >一体何が問題だと考えられますか?
↓
>WinMain内でMutexを使って
そのMutexの部分だけコメントアウトしたらその症状は出なくなるの?
>>229 >一体何が問題だと考えられますか?
君の書いたコード。
DESUYONE-
238 :
178:2008/09/25(木) 19:35:55
自前で画像を拡大するルーチンを書いて使ってみたところ、全くメインスレッドに影響が出なかった。
やっぱGDI関数はマルチスレッド非対応か。
でも拡大にStretchDIBitsの2倍時間が掛かるという…
>221
teeみたいな感じのプロセスを挟んで、
そいつには別口のパイプでデータをやりとりするとか。
240 :
デフォルトの名無しさん:2008/09/25(木) 22:35:31
>>211 改めて確認してみました。
こちらは、cmd.exeを起動し、それに対してパイプを作っているようです。
そして、この標準出力からの結果を、TCPで接続してきたクライアントに返すもののようでした。
これを利用して、ログ出力みたいなことを実現するのは可能、だと思いました。
この方法で済ませてしまうのもありと思います。
>>214 >>215 AllocConsoleやAttachConsoleも調べてみました。
やはり別プロセスでcmdを作り、それをAttachしてみても変化はなく、
そのコンソールを閉じると、本体までもが終了してしまいました。
一応、ハンドラを次のように設定してみて、即終了は無くなるのですが、
OSから警告を言われてしまいます。これを封じることが出来ればよいのですが。
BOOL WINAPI handler( DWORD ctrlChar ) // ハンドラ例
{
if( CTRL_CLOSE_EVENT == ctrlChar )
{ // X押された
return TRUE; // 次のハンドラへ処理渡さない
}
return FALSE;
}
スクロールバーを持つプログラムを作ったのですが、
バーをクリックしたまま移動させてもSCROLLINFOの値が変化しません。
case WM_LBUTTONDOWN:
PostMessage(hwnd, WM_VSCROLL, wp, lp);
return 0;
これではだめでした。
どうすれば良いのでしょうか。
>>241 メッセージ送らなくても、バー操作したらWM_VSCROLLにメッセージ飛んでる
WM_VSCROLLで何にもしてないんじゃない?
243 :
241:2008/09/26(金) 15:36:03
今日見直すと
SB_THUMBPOSITION と SB_THUMBTRACK を勘違いしていました。
ごめんなさい。
質問です。
親ウィンドウの真ん中に子供ウィンドウを作っています。
親ウィンドウに描画しようとすると、何故か描画できない部分がありました。
おかしいなと思い、PatBltで親ウィンドウのサイズを黒色で塗りつぶそうとすると、
http://www.dotup.org/uploda/www.dotup.org4944.jpg この画像のようになりました。
赤で囲っている部分だけが子ウィンドウの領域のはずなのですが、何故こうなるのでしょうか?
親ウィンドウのウィンドウスタイルにはWS_CLIPCHILDRENを入れていません。
1.Spy++で、本当に子ウィンドウがその範囲か確認
2.塗りつぶす時の範囲がクライアント領域全体になっているか確認
>>245 どちらも原因ではありませんでした。
どうデバッグしていいかが分からない;
実はchildウィンドウじゃなくてownedウィンドウになってるとか
すみません・・・。原因はしょうもないミスでした。
バックバッファを作る関数の中身に子ウィンドウのサイズの定数を使っていました。
考えてくれた方ごめんなさい。
やはり俺の予想通りだったな
むしろ
>>246の判断をどうやってしたのか気になる。
鼻くそほじりながら「そんなわけねーだろ」とかいいながらレスしたのか
鼻くそ占いでどちらも原因ではないと出たのでそう判断しました。
自分で書いたプログラムなら占いに頼らずちゃんとデバッグしろ
でも実行するときはどこぞの神様にお祈りしちゃうんだよな
hbrBackgroundをBLACK_BRUSHにしちゃえばいいんじゃないかと思う俺は
きっといつまでたってもデバッグ出来ないダメな子に育つんだろうな
255 :
デフォルトの名無しさん:2008/09/28(日) 18:22:01
LPSTRって「Stringへのロングポインタ」って聞いたんだけど、
ロングポインタって何?ポインタは普通4バイトだけど8バイトあるとか、そういうこと?
16bit時代のshort pointerに対応する用語。いまどきの人はポインタは全部ロングと考えておk。
大昔は2バイトのポインタもあって、そっちが普通だったんだよ
258 :
255:2008/09/28(日) 18:38:42
>>256-257 おお!どうもありがとうございました。それなら合点がいきますね。
胸のつっかえがとれた。。本当にありがとう。
今からnearとfarとhugeでおっさんトークしようと思ったら話題が終わってた
全然知らんゆとりだけど、
LPTSTR lp;
PTSTR p;
lp = p; // OK
p = lp; // Error
なの?
int i;
&i; <- これはnear/far/hugeどれになるの?
FARPROCのFARって、もしかしてこのfarなの?
32ビット環境にはnear/far/hugeの区別はないよ
FARPROCのFARの由来はそのfarだけど今となっては意味なし
262 :
デフォルトの名無しさん:2008/09/28(日) 20:56:06
LPCTSTR
のLPはLong Pointer
STRはSTRing
でTは一体何の略なの?
Tantanmen
とらんすなんとか
OFN_NONETWORKBUTTONが全然意味なさないんだけどなんで?
昔あったネットワークボタンを消すだけなんじゃないかな
64bitだと
LLPSTR
になるのか?
A long time ago,so long ago that memories did not exist.
Love was not wide spread among the people and
it was magic or might that ruled the lands.
There were men that set out on precarions adventures
in order to test their strength and courage.
People called these men........__int64.
そもそもLがあったのは16ビットと32ビットのアドレスが混在していたから。
現在のプログラムは32ビットと64ビットのアドレスが混在出来ないから、
そんな表記の必要性は無い。
RECTLとSMALL_RECTも16ビットの時の名残?
ReleaseDC()した後のDCハンドル使ってGetTextExtentPoint32()とか呼び出したらまずい?
うん
マリガトウ
くそ。何でいちいち解放せにゃならんのだ
わけもわからずやってるのか。
なぜってメモリが有限だからだろう
解放せずに確保ばっかりしていては、そのうち使い切ってしまう
「使ってないのはGCしてくれるのが当然」
そう思っていた時期(ry
いや、プログラムの最初でGetDC()しといて描画にはそのHDC使って最後にReleaseDC()に何故しなかった
と言いたいんだ。
ウィンドウが1枚きりならそれでもいいけど、
たくさんのウィンドウがあって、それぞれに専用のDCを常時確保しておくというやり方は、
今ならともかく、16ビット時代のWindowsには厳しかったんだ
現在でも描画リソースの制限は結構厳しいから、節約しようね
GetTextMetrics()出失敗してたからGetLastError()したら返り値が183(既にあるファイルを作れません)だった。
どうすりゃいいんだ・・・orz
既にあるファイルを作るのをやめるんだ
ファイルは作ってないんです(´Д⊂
パラメータは?直前にSetLastErrorで0を設定したら?
エディットを持ったダイアログを作ったときに、すぐそのエディットにフォーカスを持たせたいです。
エディットコントロールスタイルにそれらしいものが見つからなかったので、
case WM_INITDIALOG:
SendDlgItemMessage(hdlg, IDC_EDIT1, EN_SETFOCUS, wp, lp);
こうしてみたのですが、上手くいきませんでした。
どうすれば良いのでしょうか?
SetFocus(GetDlgItem(hdlg, IDC_EDIT1));
return FALSE;
EN_SETFOCUSのENってEdit Notifyだぞ
どうでもいい
どうでもいいことあるか。
そういうメッセージをエディットコントロールに送るということがおかしいということに気づけ。
>>291はそういった自分で考えることができないかわいそうな人なんだからほっとけ。
GetLastError()したら「パラメータが間違っています」
どのパラメータがどう間違ってるのか教えてくれ。。
その前に何したのか
レジストリのキーの名前を変更したいのですが、
それにはRegReplaceKeyとかを組み合わせてやるんでしょうかね?
どなたかご教授願います
直接にはできないみたい。元のサブキーから新しいサブキーに必要に応じてコピーして、元のサブキーを
削除する、という方法しかないようです。
299 :
デフォルトの名無しさん:2008/10/01(水) 00:55:36
TabbedTextOut関数で出力した文字列の水平スクロール量はどう求めればいいですか?
タブ幅は64、8文字分で、
今はsi.nPage=文字列幅/(TEXTMETRIC tm.tmAveCharWidthの)一文字の平均幅
にしているのですが
>>299 ごめんなさい
描画に問題がある事がわかり、解決しました。
教えてください
スクロールバーをCreateWindowから作ってるんだけど
nMax, nMin, nPageとかの処理を既定のスクロールバー(WM_VSCROLL)
とまったく同じ挙動にしたいんだけど
どういう処理してるんでしょうか
302 :
301:2008/10/01(水) 02:15:42
変なこと言ってました
既定のスクロールバーっていうのは
リストボックスとかのLBS_VERTで付くスクロールバー等のことです
>>303 大丈夫じゃないだろ
LBS_VERTなんて存在しないフラグを指定してるぐらいだからな
インターフェースを列挙して同じ動作をするようにすればいいではないか。
GetClientRectとかって、RECTのポインタを引数に取っていますが、
RECTを戻り値として直接返すようになっていないのは
なにか理由があるのでしょうか?
構造体やクラスを返す関数はあまりよろしくないのでしょうか?
結果の成否を返す必要があったとか
昔のマシンだとRECT程度のコピーでも馬鹿にならなかったとか
他言語との兼ね合いとか
そんなとこじゃないの
APIのGetClientRectはBOOLを返してました。失礼しました。
エラーなどの情報まで返す必要がなければ、わざわざポインタを経由しなくても、
自作の構造体やクラスを直接返して特に問題無いですよね。
推奨されていないような情報があれば指摘してもらえると嬉しいです。
Windows1.0の頃、構造体を返せるCコンパイラなんて無かった。
というか、K&R第一版Cの仕様
__stdcallじゃ32bitの値しか返せないんじゃないの?
そもそもGetClientRectがRECTを返す仕様だと第一引数のHWNDが無効だった場合にエラーを示せない
知らないならレスしないでください
ログイン中のユーザーが制限付きユーザーじゃないか確かめるAPIってありませんかね?
Windows XPです。
使いたい権限を有効しようと試みて、失敗したら、それはお前の言う制限のあるユーザじゃね?
インストーラでも作ってるんじゃね?
そういう用途ならIsUserAnAdminで事足りるけど。
だいたい権限なんてローカルポリシーでどうとでも変えられるし
Home系にはローカルポリシー無かったと思うが
319 :
301:2008/10/01(水) 18:06:25
>>305 LBS_VERTとか変なことを・・・WS_VSCROLLの間違いです
標準スクロールバー付きリストボックスのとなりにおいて比べてみたけど
サム?(つまみ)の大きさが違うんですよ
リストボックスの場合、nPage = (nMax+1)/リストボックス表示可能行数
かなと思ったんだけど間違ってますかね?
>>308 マシン語がどうなるか知れば答えがわかるよ
いまどきマシン語なんてありえないです><
>>319 その計算式だとページサイズじゃなくてページ数が出てこないか?
あと、最後までスクロールしきった時に
最終行は一番上にくるべきだ派と一番下だよ派があるが君はどっちだ?
それによって最大値の計算が変わる。
>>320 マシン語というか、アセンブリで書くならxmmレジスタ1個でRECTが返せる
325 :
301:2008/10/01(水) 23:19:37
>>322 ありがとうございます!
一番下だよ派です!標準スクロールバーも下にくるので
よければ正しい計算式を教えてくださいませ
GetTextExtentPoint32の誤差はどうすれば無くなるんだああああああああああああああああああ!!!1
>>325 nPage=表示可能行数でnMax=全行数-nPage
>>327 お前またフォント選択するの忘れただろ
329 :
301:2008/10/02(木) 00:58:07
>>328 どうもです、ほんとにありがとう
比べてみたら標準のと同じ挙動になりました
あやうくGPL感染するところだった
あぶなかったよ
現時点で治療が不可能に近い難病だからな
そういや転職前の会社で見たり書いたりした場合はどうなるんだ。
権利は前の会社のものだよな。
ソースコードは著作物だが、アルゴリズムや考え方・発想は著作物でないからGPLに感染することはない。
>>335 著作権とライセンスの話がごっちゃになってないか?
ライセンスは法には勝てないからな。
いかにGPLとて、たとえば合衆国内では、フェアユーズの範囲内で自由に使えるわけだ。
あるいはソフトウェアには権利を認めていない法律の国では役に立たん。
だがそんな言い訳は通用しないのがGPL信者だ
339 :
デフォルトの名無しさん:2008/10/02(木) 13:33:37
DWORD dwProcessId = ...;
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, TRUE, dwProcessId );
でプロセスのハンドルを得ようとするのですが、
エラーコード6: アクセスが拒否されました
とでるんですが何が原因でしょうか?
エラーコード5ですね すいません
PROCESS_ALL_ACCESS
VistaのKnownDLLsのリストどっかにない?
PROCESS_TERMINATEのフラグにしても同じくエラーコード5なんですよ
どのプロセスでもそうなのか、特定のやつだけなのかは?
iexplore.exeってやつが自動で勝手に起動するんで
自動でプロセスを殺すやつを作っているんですよ
GoogleUpdate.exeは殺せたんですけど
iexplore.exeってやつだけはハンドルが取得できないんですよ
・・・
色々調べてみましたが 実行ユーザー名が自分のプロセスは殺せますが
勝手に起動するユーザー名がSYSTEMだと殺せませんね
そいつあ特権が必要だ
タスクマネージャから手動では殺せるんですけどね
どうやったら特権で取得できるんですかね?
パソコン一人しか使っていないもんで特に不都合はないのです
>>349 OpenProcessToken()
LookupPrivilegeValue()
AdjustTokenPrivileges()
この辺で。時刻かえるときなんかも使う。
日本語のMSDNにはのっていないようですね
ありがたやありがたや
てかiexplore.exeってIEの実行ファイルじゃん
SYSTEMユーザーで勝手に起動するって、ウイルスとかに感染してないか?
そうですね、Spybotでスキャンしたのですがだめでして、
プロセスが勝手に動くだけのようでして、自動で閉じるツールを
つくろうかなと思った次第ですよ
ファイルが消えたりとかはないみたいなんですよ
iexplore.exeを自作プログラムに書き換えて挙動を調べろよ
>>353 そもそもiexplore.exeでググればウイルスに関連した情報も見つかるだろ
お前が呑気にプログラム書いたり2ちゃんに投稿してる間にもウイルスが人様のPCに迷惑かけてるかも知れんのだ
辛口なのは分かりましたが
な〜んの役にもたちませんね
>>355 >>356 消えてください
そもそも他人に迷惑をかけているとか
勝手に捏造しないでください
しね
こういう奴のPCがゾンビPCになってMSのサーバや政府機関にアタックかけてるんだな…
まったくもう…
だから 何か確かな根拠でもあるんですか
速やかに死んでください
まったくもうw
なぜ1個人のパソコン程度でMSのサーバーが落ちるんですか?
なぜ1個人が政府機関などにアタックかけるんですか?
ゾンビPCとは何ですか?
マスコミの影響受けすぎじゃないんですか?
精神病院行った方がいいですよ?
終了
>>361 まったく同感だ
病院で診てもらったほうがいい
いや終了
知ってはいたがあえて聞いたのだよ
まぁそれもわからないのでしょう
リンクを貼ることからしてまぁ、現場で突然質問されても
な〜んにも答えられないのでしょうね
そのようなあなたからレッテルを貼られたくありませんね
ちゃんちゃん
駄目だこいつ
最近、質問した人を装ってスレが荒れるような発言する奴が粘着してるようだし
質問する人はトリップ付けた方がいいぞ
伸びてると思ったら何なのこれ。
あんまりね
政府とかのね
サーバーにね
攻撃とかをね
しているとね
マイクげふげふ
('∀`)<あなたを、犯人ですとかね
勝手にシャうぉっほん
まぁね
あんまりよい子はね
マネしちゃね
ダメだね
え?私の方が精神病院に行った方がいい?
まぁ、どうなんでしょうかね
よく分かりません
いや、つまんないから。
てゆーかね
そのくらいのね
技術がね
あればね
こんなところでね
質問してねーぞバカヤローってことですよ
いや、つまんないから。
374 :
デフォルトの名無しさん:2008/10/03(金) 02:13:31
ウインドウズの OSは アルタボックスからきているらしい アルタボックスは
軍事用に開発されたらしいので 開発費がたくさんかかったらしい。
plaoaluta
begin
alutabocx
code2 end_roop_END_roop\roop_pasemode2_pasemode2_pasemode_pasemode_2_pasemode2
if then else####KINOKO?NOKIA####endrollPLUUBACKtome####TOME
digital####digital####endrollws
cant_pupupuuupupuuupupuuupupuuupupuuupupuuupupuuupupuuupupuuupupuuu
wao
375 :
デフォルトの名無しさん:2008/10/03(金) 07:56:26
ある通信コントローラを、ノートPC(WindowsXP SP3)のUSBポートに接続して
使用しているのですが、
自作アプリケーションから、それがUSBに接続された、抜き取られたという
判断をしたいのですが、そのようなことを実現するAPIはありますでしょうか?
>>375 WM_DEVICECHANGE とか飛んでこない?
RegisterDeviceNotificationで通知は受け取れる。
ただ、渡すパラメータ等はWindowsDriverKitを参照しないと判らないかも。
378 :
デフォルトの名無しさん:2008/10/03(金) 08:39:10
質問です。
ゲームに未既読をスキップという機能がなかったので、ツール作って自動化させようと思っているのですが、
そういう場合はウィンドウ見つけてSendMessageでボタンを押すでよろしいのでしょうか?
一応コードさらします。ちなみにうまくいきません。@Delphi
var
hcal :HWND;
h5 :HWND;
begin
hcal :=FindWindow(nil, 'Aster Version 1.05');
if hcal =0 then
begin
ShowMessage('Error');
exit;
end;
SetForegroundWindow(hcal);
h5 := 984180;
if h5 <>0 then
begin
SendMessage(h5, WM_LBUTTONDOWN, 0, 0);
Sleep(100);
SendMessage(h5, WM_LBUTTONUP, 0, 0);
end
else
begin
ShowMessage('Error');
exit;
end;
end;
SendInput
うん、いいよ
そのゲームがどうやっているかによるし
送り先があっているかとかあるが
まず、そのメッセージのwparamやlparamはだめだろう
SendInputでいいと思うけどね
レスありがとうございます。
さっそく帰宅次第やってみようと思います。SendInputというのをはじめて聞いた私は勉強不足なんでしょうね。
携帯から失礼しました。
携帯からそんなに打ち込むワキャねーだろボキャ!
と思ったのは俺だけですか?
いまやAtom搭載でWindows Vistaの動く携帯だってあるんだぜ。
QWERTY配列のUSBキーボードを利用していないと、どうして断定できようか。
いやー、だとしてもDelphiのソース手打ちはねーべww
便利な世の中ね
387 :
デフォルトの名無しさん:2008/10/03(金) 12:50:06
GetTextExtentPoint32でテキストの表示サイズを測る場合、対象のHDCを
CreateCompatibleDCで互換のある複製をとってこいつに元のHDCのフォントを設定しても
同じ値は取れますか
やってみりゃいいじゃない
MM_TEXTならどれも変わらんのでは
勘違いさせる文章ですいません、ソース載ってるレスはPCで、ありがとうと言ったのは携帯からです・・・まだ帰宅できず試せませんが・・・。
>>389は偽者です。現代人ならこれぐらいのソースは携帯で打てますよ。
別にどっちでもいいが
そういうのいいから
さあいったい誰が嘘を付いているでしょう
俺俺。
俺だよ俺
400 :
382:2008/10/03(金) 19:01:39
そのゲームが、ウィンドウメッセージでなくDirectInputでマウス拾ってたら、
いくらメッセージ送っても無駄だし・・・
やってみてはどうだ。
まあどのゲームかわかったから、体験版で試してもいいが・・・
403 :
デフォルトの名無しさん:2008/10/03(金) 19:20:42
まあそれは
FindWindow(nil, 'Aster Version 1.05');
でググってわかったんだけどなw
吹いた
406 :
デフォルトの名無しさん:2008/10/03(金) 19:50:56
LPCSTRって何の略?LP=ロングポインター STR=Stringだと思うんだけど
Cって?
const
408 :
406:2008/10/03(金) 20:00:42
constっすか。どうもありがとうございます(;^_^
前からずっと疑問だったんで。。
多謝っす。
ウィンドウにWM_PAINT着てない状態でGDIつかって何かしら描く
とそのウィンドウにWM_PAINTって発行される?
WM_PAINTのときに描くと重くなってウィンドウの別の処理できないから、
WM_PAINTきたら、SetEventしてとりあえず描画は別スレッドでまわしてたら、
CPUほぼ独占状態になって結局重いんだが・・・
今はとりあえずsleep入れて落ち着かせてるorz
WM_PAINTで描画以外の事をするな
411 :
409:2008/10/03(金) 20:36:18
>>410 WM_PAINT以外で描画のことじゃなくてWM_PAINTで描画以外のこと?
ダブルバッファリングすればよいかもしれない
そういう時はBeginPaint/EndPaintだけ呼んで、
無効化領域の有効化だけしておけばいい。
後で描画するつもりなら、その瞬間はグチャグチャのまま放置でも全然問題無いし。
414 :
409:2008/10/03(金) 20:55:43
とりあえずダブルバッファリングでググっていってみる
>>413 BeginPaintとEndPaintをWM_PAITで呼び出すでおk?
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetEvent(hoge);
EndPaint(hWnd, &ps);
break;
みたいな?
415 :
409:2008/10/03(金) 21:20:50
続けていろいろすまん
CreateCompatibleDCで確保したデバイスコンテキストハンドルは解放するべき?
解放するときってReleaseDC使えばおk?
417 :
409:2008/10/03(金) 21:22:08
CreateにはDelete、GetにはRerease
>>407 ずっとCharだと思ってた。サンクス。
>>418 あぶねえw416見て今まで書いたソース全部書き直そうかと一瞬思ったw
>Rerease
り、りれぇぁす(巻き舌で)
ていうかMSDN読めよ
422 :
409:2008/10/03(金) 22:46:23
423 :
409:2008/10/03(金) 22:52:35
VS付属のMSDNしか見なかったけどCreateCompatibleDCで検索しても
CDC::CreateCompatibleDCしかなかったからとりあえずこっちで聞きました
424 :
デフォルトの名無しさん:2008/10/03(金) 23:54:22
結構バカ多いね、ここ。
うん、お前がその筆頭。
WM_PAINTでSetEventとか馬鹿だろ
メニューバーが表示されないんですが
menu.res作って
winc.lpszMenuName = "menu";
って書くだけじゃ駄目なんですか?
VCならWin32プロジェクト作ったときに
メニュー付きのウィンドウが作られるからそのソース参考にするといい
伝わるか分からんが一応書いとく
#define IDC_MENU 100
wc.lpszMenuName = MAKEINTRESOURCE(IDC_MENU);
結構アホ多いね、ここ。
うん、お前がその筆頭。
結構ソース多いね、ここ。
うん、そーす。
___
,,r''"´ `"''-,,
/ ノ ヽ、 \
/ ( ● ) ( ● ) ヽ ヽ
i゛ :::⌒(__人__)⌒::: ヽ ゛i
l |r┬-| l ノ そーなんすかwww
! | | | レ'
l l | | | l , l
| l `ー'´ | l l
! l ,! | l
l ゛i / l i゛
゛i ヽ / / /
ヽ,__,,,ゝ く ノ /
ヽ ゛" / __
_ ) 、(二"'''ー'"ー'__゛゛ヽ
r'  ̄  ̄ヽ,)‐-,,_ ´┴'ノ
ヽ__,,-──-、__,ノ
ムwwwカwwwツwwwクwwww
そのリソースに文字列で名前をつけたなら
>>427でいいし
数字で指定したのなら
>>428 リソースファイルで""でくくってあれば文字列。
学校では当たり前のごとく、これでゲーム作らそうとしてくるけどさ
ライブラリ何も使わずに、Win32APIだけで本格的なゲーム作った事ある人っている?
本格的の定義は、3万ステップ以上で、ちゃんと遊べるようなゲームとしとく。
ゲームならDirectX使うだろjk
マインスイーパは本格的だしちゃんと遊べると思う
>>438 学校では本格的なゲームを作らしてる訳ではないと思うので
聞くだけ不毛じゃないかと
>>440 あれはミニゲームだと思う
>>441 学校じゃなく、趣味でも本格的なの作る人は、いないのかなーって
ゲームとミニゲームは何が違うんだよ
↑ステップ数で規模を語る馬鹿
>>443 ゲームの最中に気晴らしにやるのがミニゲームだ
ちょっと納得してしまったので困る
>>445じゃあ爆裂カブトムシはそれだけで一日潰れるからミニゲームじゃないな・・・・
燃えるねえ。あれ。
マリオは最高
おまえらマインスイーパが気晴らしとかマジかよ・・・あれだけで3ヶ月は遊べるだろ
それはない
上級二分以内目指して毎日やってるよ
昔は100秒切ったんだけどねえ。
今は200切るのもやっとだ。寝ながらトラックボールじゃ限界かな。
マウスの左右同時押し+EscってXPのマインスイーパでは出来ないのか
WinAPIでタイピングゲーム作ってたけど、今時のPCでも処理速度に不満があるからDirectXに移行する予定。
今は画像処理にAPI使わずにアセンブラ+MMXで高速化してしのいでる。
PentiumVは今時のPCじゃないよ?
今時のPCならSSE4まで使えよ
今時のCPUは、MMXの実行速度が意外と遅かったりする罠。
使うならSSE以降にしておいた方が良い。
3DNow!でおk
と思ってたけど、ドキュメント読んでたらそうでもなかったかもw
単に128bit幅のXMMレジスタが効率的に処理されるってだけで、
64bit幅だから二つ同時って訳にもいかないから、相対的に遅いだけか。
>>460 それはないw
やっぱりSSE使った方が速いんだろうしなあ。
>>461 それがねぇ、CPUによっては分割して実行してんじゃねーのかってぐらいSSEが遅いってことがあるらしいんだよね。
まあスレ違いだ。
ダンゴさんのレスが望まれるところだな。
>>463 インテルならCoraMA、AMDならphenomになるまではSSEは分割。
Pen4以外だとMMXがSSE2より速かったりもした。
API使う場合対応してる最新の拡張が使われるだろうけどあんま気にする必要はないかな。
OpenClipboardって引数にウィンドウハンドルを渡すようですが、
これはどのような目的で関連付ける必要があるのでしょうか。
MSDNには「NULLを指定すると現在のタスクがクリップボードを開きます」
と書かれているのですが、明示的にウィンドウハンドルを渡すのとNULLを渡すので
なにか挙動が変わってくるものなのでしょうか。
クリップボードは排他的だから、閉じ忘れても後始末できるように、じゃないかなあ。
WM_RENDERFORMATの送り先では?
スタンバイや休止に入る事を検出する方法はあるでしょうか。
自己解決しました。
自己解決しません。
自己解決しそうです。
またこれか
知らないならレスしないでください。
知っていてもレスしないでください。
わかりました
Ctrl+CapsLock でカナ入力とアルファベット入力を切り替えることができますが、
現在、カナ入力かアルファベット入力かを調べるにはどうすれば良いですか?
なんだそれ
ImmGetConversionStatus ?
任意のアプリケーションの任意のメニュー項目のテキストを取得するには?
アプリの実装次第
シミュレーションゲームの移動処理についてです
キャラのBMPをドラックアンドドロップさせて移動させてみたいんですが
検索してもファイルを開く処理しかヒットしません
どうやればいいんでしょうか
何がやりたくてどこまではできるの?
マウスの処理とか画像の表示とか
よその会社で作ったDLLをソフトを使って解析したら
呼び出し形式と戻り値を得ることが出来ました。
これからどうすればこのDLLを使えるでしょうか?
ちなみにその会社はもう潰れて解散しています。
LoadLibrary()とGetProcAddress()使って呼び出すか、
インポートライブラリ作ってリンクする。
インポートライブラリは環境によってやり方が違う。
>>484 そんな得体の知れないAPIなんて使うなというのが正解だと思う。
引き数にワケワカメな構造体とか使われたり、
複数のAPIに呼び出し手順とかあったらまずまともに使えないだろw
ソースコードもあるんならまだ解析できるが、DLLしか無いんならそんなものは捨ててしまえ
ブラックボックスじゃ品質保証出来ないぜ
そもそもライセンスとか著作権的にどうなんだ?
質問です。
リソーススクリプトで定義してあるダイアログを
CreateWindow[Ex]で作成したいのですが、可能なのでしょうか?
よろしくお願いします。
つCreateDialogIndirect()
491 :
489:2008/10/09(木) 18:43:01
>>490 お答えありがとうございます。
上位クラスの実装が WNDPROC での実装のため、
CreateDialog[Indirect][Param] では問題があるのです。
WNDPROC を DLGPROC へ強引にキャストしても
問題ないのでしょうか?
ダイアログテンプレートを使ったうえで、DefWndProcを呼ぶウィンドウプロシージャを使いたいってこと?
んー、、、
493 :
489:2008/10/09(木) 19:33:34
>>492 static LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp );
というメソッドが上位クラスにあるのですが、
それをプロシージャとして使いたいのです。
ただ、すべてのコントロールを CreateWindow() で作るのは
望ましくないため、リソースエディタでコントロールを配置し、
それを使用したいのです。
そのダイアログリソースにウィンドウクラス名を書いておけばいいんじゃないかな
>>462 組むものによもるが3DNow!で十分だと思う
αブレンディング多用するようなコードはクリティカルな部分がメモリ転送になりがちで
一例になるがP3 1GHzでrep movsdで8msec程かかる800x600x24bitの単純転送が
MMX&SSEの場合(プリフェッチ命令だけ使用、この場合3DNow!と命令セットの互換性がある、使用可不可のチェックだけ別)
5.4msec程になる、うまくすれば全連続メモリ転送について大体3割程の高速化が可能
さらにP4とかだとプリフェッチをきちんと使うと確かに倍速にはなるんだが
元々FSB400で2.7msecだったのが1.4msecになっても効果のほどは?
遅い機種のためのチューニングにはそれなりの意味があるんだがなぁ
一番意味がないのはP4のSSE2、一度にSSEの倍のデータを扱える代わりに2倍の時間がかかる
ちなみに最近のcoreduoとかだと巨大な2次キャッシュに入りきってしまう場合はrep movsdの方が連続処理において速いが
キャッシュに入らないようだとプリフェッチ命令を使う方がP3世代と同じように大体30〜40%程速くなる
例えばキャッシュに入らないと仮定された800x600x24bit転送がcore2duo FSB1333で0.7msecが0.5msecになる
αブレンドの多用はFSBにかなり支配的になるのでエロゲとかがFSBに支配されてるのとおなじだな
この場合3DNow!以降で実装されたプリフェッチ命令を使用してメモリ転送部分を書くだけで3割ほどの高速化が可能
496 :
489:2008/10/09(木) 20:29:59
>>494 リソーススクリプトのダイアログの記述部に
以下の一行を加えてみました。
CLASS "IDD_FILES"
その後、上記の文字列を
WNDCLASSEX::lpszClassName に設定したり、
CreateWindow[Ex]() の (LPSTR)ATOM の変わりに
設定したりしてみましたが変化がないようです。
そもそも VC2003 のリソースエディタ上の
ダイアログプロパティ内 ClassName には
反映されていないようです。
やり方が間違えているのでしょうか?
>>496 1) 自分のウィンドウプロシージャを適当なウィンドウクラス名で登録する
2) そのウィンドウクラス名をダイアログリソースにも書いておく
3) CreateDialogなんちゃらでダイアログを作成すると、リソースで指定したウィンドウクラスが使われる
4) 結果、その名前で登録しておいた自分のウィンドウプロシージャが呼ばれる
5) ウィンドウハンドルからクラスを検索するなりなんなりして、その自分のウィンドウプロシージャから上位クラスの実装とやらを呼ぶ
498 :
489:2008/10/09(木) 21:30:35
>>497 指定のプロシージャが呼ばれるようになりました。
ありがとうございました。
C++言語で、GDI+を使って画像に文字列を書き込んで保存したいのですが、
どうすればいいですか?
Bitmapで読み込んで、Graphics->DrawString で画像の上に文字列は出せますが
bitmap->Save しても画像自体にはかかれてないので。
500 :
デフォルトの名無しさん:2008/10/10(金) 00:39:40
API仕様 ってどういう意味ですか?
>>499 GraphicsとBitmapオブジェクトを生成してる部分のコード書いてみ
>>500 漠然としてるな
APIの利用方法、性能諸元
GetMenuってもしかして別プロセスのメニューハンドルは取得できない?
503 :
デフォルトの名無しさん:2008/10/10(金) 02:37:37
はなくそがうまい。
本を買ってC++&VC++の勉強とWIN32APIの勉強をするとしたらどっちが先でどっちが大事ですか?
505 :
デフォルトの名無しさん:2008/10/10(金) 05:31:22
C++ → VC++とWIN32API
タブ弄ってるとswitch (((NMHDR *)lp)->code) でエラーがでてしまいます。
中の処理のせいかと思って
switch (((NMHDR *)lp)->code) {
case TCN_SELCHANGE:
int TabNumber=TabCtrl_GetCurSel(hTab);
}
return TRUE;
だけにしてもやっぱりエラーでてしまう。なんで?
エラーの内容まで詳しく書いてくれないとエスパーしか出来ないぜ
((NMHDR *)lp)->code 自体がアクセス違反かなにかになってるのなら、
そこへ分岐する条件を疑うべきじゃないか
>>507 エラーの内容まで詳しく書ける人は、こんなショボい質問しないけどなw
デバッガ使えば一発で分かりそうなもんだが。
同じWndProc内に
switch (LOWORD(wp)){
メニューバー関係
switch (LOWORD(wp)){
ボタン関係
と書いたら問題あります?
ないよ
CRITICAL_SECTIONオブジェクトを複数初期化して、それぞれに対してEnterCriticalSectionを呼び出した場合、互いにブロックしないでしょうか。
そんな仕様だったらクリティカルセクションの意味ねーだろ
スレッドがA,B,Cとあって、AとB、BとCで使う変数ab、bcがあったとして、
Aでabを参照するときに、スレッドCまで処理を中断するのは無駄だと思うんですが
オブジェクト違うんだったらブロックするわけねーじゃん
バカ?
^^
お前らは何でそう短気なんだよwww
>>514 それは注意して実装しないとデッドロックを引き起こすから、
Cまでブロックした方が安全ではある。
>>520 ん、俺も同様の意見なんだけどな。
abはAとBでだけ、bcはBとCでだけ同期処理を行ってるってことだろ?
だったらAでbにアクセス中にCからもbにアクセスしたらデッドロックが起きても文句言えん。
A動作中にCを中断するだけでなく、C動作中にAを中断することも行うべき。
522 :
デフォルトの名無しさん:2008/10/10(金) 21:36:48
523 :
デフォルトの名無しさん:2008/10/10(金) 21:55:28
すみません。WindowsAPIを使って間もないんですが、次のことがわかりません。
CreateWindow関数でウィンドウを最初に作るときに、7番目の引数に親ウィンドウのハンドル
を書くと書いてありますが、たとえば、子ウィンドウの汎用クラスというかオブジェクトを作成して、
それを色々なプログラムの親ウィンドウから使用するということはできるんですか?
要するにこの7番目の引数さえ変えれば、色々なプロジェクトから子ウィンドウを共有できますか?
よろしくお願いします。
共有の意味がよくわからんが、、ウィンドウクラスとかRegisterClass()調べてみ。
>>521 514ですが変数はab、bcの二つという意味でした。
AとBで共有だからabって書いたんですけど、わかりにくくてすいません。
526 :
523:2008/10/10(金) 22:20:04
>>524 どうもありがとうございます。調べてみます。私の言っている共有とは
いくつも起動している自作プログラムから子ウィンドウを共有するという意味ではなく
いくつもプロジェクトを作成するとして、そのソースをそのまま親のハンドルを変えれば
そのソースが使えるかという意味で各プロジェクトで共有という言葉をつかったんですが、
よくかんがえれば、使えるに決まってた。。
お世話になりました。使えないわけがない。。どうにかしてました。ありがとうございました。
527 :
デフォルトの名無しさん:2008/10/10(金) 23:38:35
Windowsエクスプローラの右クリックメニューで出て来る「新規作成」の機能を
シミュレートしようと思っています。
その場合、可能であればですが、エクスプローラが使っているDLLか何かの
ファイルを横から使うことでも実現できるものでしょうか?その場合、DLL内の
APIを使うために必要な知識としてはどんなものがあるでしょうか?
また、もし自分で全部作るとすると レジストリーから行うことになりそうですが、
例えばXpだと、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew
という、途中の Discardable なるやっかいな代物を扱う必要がありそうでした。
このキーはときどき何かの事情で削除されてしまう場合があるもののようで、
無いときは自分で作成しなければならないようでした!この場合、そうしたこと
を実際にしないといけないでしょうか?もし何かうまい別法があるようでしたら
教えて戴けないでしょうか、よろしくお願いします!
アプリケーションを終了させた後に削除が出来なくなることがあるのですが
原因はどういったことがあるでしょうか?
ハンドル等のクローズ失敗とか
タスクマネージャーのプロセスには残ってません
何を削除ができないの?ゆとり君
まず質問の仕方を勉強しなさい。
すみません、実行ファイルそのものが削除できなくなります
そのファイルを開いているプログラムが存在しているから。
難しく考えないことだ。そしてそのファイルを開くプロセスがどんなものがあるか考えれば答えは見つかるだろう。
529,531全然答えになってねぇなお前 ストレス発散ならよそでやれ
その実行ファイルを使っているプロセスがどこかで走ってるんだよ
見に覚えがないならOSの内部のほうか
完全に終了までに少しラグがあるのかもしれない
場合によってはアレの可能性があるから
ちょっとネットワーク遮断してから削除試してみ・・・
なんだその中途半端な回答はwwラグてww
まぁ
>>531で十分だわな。