Win32API質問箱 Build32
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/28(土) 18:17:09やさしいお兄さんたちが答えてくれるかも。
∧_∧
( ´∀`) < 0x20
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0002デフォルトの名無しさん
2005/05/28(土) 18:18:52Build31:http://pc8.2ch.net/test/read.cgi/tech/1114762194/
Build30:ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29:ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html
0003デフォルトの名無しさん
2005/05/28(土) 18:18:560004デフォルトの名無しさん
2005/05/28(土) 18:20:23http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.google.com/
Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/
■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
>>3
プッ
0005デフォルトの名無しさん
2005/05/28(土) 18:37:070006デフォルトの名無しさん
2005/05/28(土) 18:46:290007デフォルトの名無しさん
2005/05/28(土) 19:05:450008デフォルトの名無しさん
2005/05/28(土) 19:17:450009デフォルトの名無しさん
2005/05/28(土) 19:18:370010デフォルトの名無しさん
2005/05/28(土) 19:19:530011デフォルトの名無しさん
2005/05/28(土) 19:34:250012デフォルトの名無しさん
2005/05/28(土) 20:06:460013デフォルトの名無しさん
2005/05/28(土) 20:14:040014デフォルトの名無しさん
2005/05/28(土) 20:15:180015デフォルトの名無しさん
2005/05/28(土) 21:11:410016デフォルトの名無しさん
2005/05/28(土) 21:15:10http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
0017デフォルトの名無しさん
2005/05/28(土) 21:15:41自分専用のクリップボードフォーマットの番号をOSから頂いたんですが、
この情報はレジストリに登録されるのでしょうか?
それとも、一時的なもので、再起動してRegisterClipboardFormatすると
再度割り当てが行われるものなのでしょうか?
(極力レジストリは汚したくないもので・・・)
0018デフォルトの名無しさん
2005/05/28(土) 21:23:490020デフォルトの名無しさん
2005/05/28(土) 22:07:21わろた
0021デフォルトの名無しさん
2005/05/28(土) 22:07:320022デフォルトの名無しさん
2005/05/28(土) 22:30:340023デフォルトの名無しさん
2005/05/28(土) 22:35:48ShellExecuteの2番目の引数をTEXT("properties")にしたらいけるんじゃない?
0024デフォルトの名無しさん
2005/05/28(土) 23:06:43起動時に読み込んでMoveWindowで位置を復元してみたところ
xyともに+3pixずれてるんですがそういうもんなんでしょうか。
0025デフォルトの名無しさん
2005/05/28(土) 23:12:190026デフォルトの名無しさん
2005/05/28(土) 23:12:20WM_MOVEはクライアント領域で、
MoveWindowはウィンドウ全体の座標ですよ。
0027デフォルトの名無しさん
2005/05/29(日) 00:35:31キャレットが表示されたら処理を行いたいのですが
キャレットが表示された、されない、の識別方法が解りません。
ウィンドウに左右されない
キャレットの状態を監視する方法がさっぱりです・・・。
どうすればいいのでしょうか?
002824
2005/05/29(日) 00:46:010029デフォルトの名無しさん
2005/05/29(日) 00:46:070030デフォルトの名無しさん
2005/05/29(日) 01:39:51レジストリが気になるなら、れぐもんでも使って変更点調べてみ。
0031デフォルトの名無しさん
2005/05/29(日) 01:44:44もしくはDCに書き込めるフリーの3Dライブラリ無いでしょうか?
ワイヤーフレーム、球、半透明、程度の機能でいいんですが、、、
(独自ウインドウに書き出すようなのはいくつか見つけました)
0032デフォルトの名無しさん
2005/05/29(日) 01:51:27003331
2005/05/29(日) 02:08:13あまり大層じゃなくやりたいので、、、
0034デフォルトの名無しさん
2005/05/29(日) 02:21:480035デフォルトの名無しさん
2005/05/29(日) 03:22:140036デフォルトの名無しさん
2005/05/29(日) 03:48:20大層なものじゃなくてもDirectX使ったほうが楽な結果に終わることもあるよ
GDIのみ→GDI+→DirectXと結局作り変えてる俺
ご利用は計画的にorz
0037デフォルトの名無しさん
2005/05/29(日) 04:11:540038デフォルトの名無しさん
2005/05/29(日) 04:21:38MoveToEx();
LineTo();
0039デフォルトの名無しさん
2005/05/29(日) 11:54:24FormatMessageの様な便利なAPIは用意されてないのでしょうか?
0040デフォルトの名無しさん
2005/05/29(日) 12:26:090041デフォルトの名無しさん
2005/05/29(日) 13:23:03ないよ
windows.hのWM_〜部分を全部持ってきて
Cならマクロで値と文字列のテーブル作るのが簡単
#defile WM_DEF(msg) {msg, #msg},
struct {
UINT msg;
const char *msg_str;
} msgtbl[] = {
WM_DEF(WM_CREATE)
WM_DEF(WM_DESTROY)
WM_DEF(WM_COMMAND)
:
};
で
struct {
UINT msg;
const char *msg_str;
} msgtbl[] = {
{WM_CREATE, "WM_CREATE"},
{WM_DESTROY, "WM_DESTROY"},
{WM_COMMAND, "WM_COMMAND"},
:
};
というのができる
0042デフォルトの名無しさん
2005/05/29(日) 13:23:48MBCSかどうかをチェックするAPIがあったはずですが、
忘れてしまいました。
今Googleで調べてますが、ご存知な方がいらっしゃいましたら、教えていただけないでしょうか?
よろしくお願いいたします。
0043デフォルトの名無しさん
2005/05/29(日) 13:28:29IsDBCSLeadByte()
あとCharNext()とCharPrev()もある。
0045デフォルトの名無しさん
2005/05/29(日) 15:01:34Windows95などでは使えないみたいなんです。Hookする以外に方法は無いでしょうか?
0046デフォルトの名無しさん
2005/05/29(日) 17:22:55ありがとうございます。
Spy++等で表示されてるのを見てひょっとしたらと思ったのですが用意されてないのですね。
てきとーに置換してテーブル作ることにします。
0047デフォルトの名無しさん
2005/05/29(日) 18:08:57ここのスクロール量の正規化について疑問があるので、教えてください。
>dy = max(-1 * si.nPos, min(dy, si.nMax - si.nPos));
なのですが、外側のmaxが必要になるケースが思いつかないのですが、どんなときですか?
0048デフォルトの名無しさん
2005/05/29(日) 18:16:400049デフォルトの名無しさん
2005/05/29(日) 18:20:44↓このアプリのように、トレイに表示されているアイコンに対して、外部からクリック操作をするには
どのようなAPIを使えばいいんでしょうか?
http://www.forest.impress.co.jp/article/2005/05/24/traycommand.html
0050デフォルトの名無しさん
2005/05/29(日) 18:23:590052デフォルトの名無しさん
2005/05/29(日) 18:29:25たしかハリウッドで。
0053デフォルトの名無しさん
2005/05/29(日) 18:30:20ありがとうございます、でも分かりませんでした。
外側のmaxはスクロール後の位置がマイナスにならないように正規化するためのものですよね。
でも、SetScrollInfoはオーバーフローとアンダーフローを自動的に補正してくれます。
また、内側のminでの計算でnPageが考慮されていないのでオーバーし放題です。
0054デフォルトの名無しさん
2005/05/29(日) 19:04:27[hoge]
hage=100,200,300
という感じで一つのキーに複数の整数パラメータがあるiniファイルで
二つ目以降のパラメータを整数型で取得する方法は無いのでしょうか?
GetPrivateProfileIntは試してみたけど一つ目のパラメータしか取れないみたいだし、
GetPrivateProfileStructは文字コードのまま構造体に放り込むだけだし・・・
やっぱりGetPrivateProvileStringで文字列から整数に変換するしか方法はないんでしょうか?
0055デフォルトの名無しさん
2005/05/29(日) 19:08:00API だけだと無理だと思う。素直に解析しましょう。
あるいは、ini ファイル側の仕様を変えて
[hoge]
foo1=100
foo2=200
foo3=300
みたいにするか。
0056デフォルトの名無しさん
2005/05/29(日) 19:23:09005754
2005/05/29(日) 20:41:08やっぱり無理なんですね(´・ω・`)
作ろうとしているのが他の人が作ったソフトのiniファイルを編集するツールなので
iniファイルの仕様を変えることができないので素直に解析するようにします。
>>56
「へぇ〜そんな関数があるのか」とMSDNライブラリを見てみたけど
MSDNライブラリに載っていなかったのでぐぐったらあっさり見つけました。
これなら希望通りの動作をしそうですね。
今回はMFCを使わないのですが、MFCを使うことがあれば利用したいと思います。
もう一つ質問なんですが、
文字列を整数型に変化するにはatoiなどの標準ライブラリの関数を使うしかないのでしょうか?
初歩的な質問ばかりで申し訳ないですがよろしくお願いします。
0058デフォルトの名無しさん
2005/05/29(日) 20:52:52っ[ 文字コード表 ]
0059デフォルトの名無しさん
2005/05/29(日) 20:54:57StrToInt
0060デフォルトの名無しさん
2005/05/29(日) 22:24:32APIでなくてもいいならsscanf()
0061デフォルトの名無しさん
2005/05/29(日) 23:52:26Spy++でメッセージを拾うとか、
ApiMonで呼んでいるAPIを見るとか。
0062デフォルトの名無しさん
2005/05/30(月) 01:00:11使えない奴は答えるなよ、ボケ
006354=57
2005/05/30(月) 03:36:45初心者丸出しの質問に答えてくださった皆さんありがとうございました。
・・・もっと勉強しなきゃ・・・sscanfも知らなかったし(;´д`)
0064デフォルトの名無しさん
2005/05/30(月) 05:18:19www.autohotkey.com
オープンソースらしい.
0065デフォルトの名無しさん
2005/05/30(月) 08:17:320066デフォルトの名無しさん
2005/05/30(月) 08:54:04カラム幅を制御して横スクロールバーのいらない寸法を維持する。
0067siokosho
2005/05/30(月) 09:00:34お願いします。
0068デフォルトの名無しさん
2005/05/30(月) 09:12:000069デフォルトの名無しさん
2005/05/30(月) 09:58:56WM_SIZEを乗っ取ってカラム幅とウインドウのクライアント幅を同じにしました。
ウインドウの縦サイズを調整して、縦スクロールバーがない状態からある状態にすると縦&横スクロールバーが出現するので、
カラム幅をクライアント幅に一致するように縮めスクロールしないでも収まるようにしたのですが、
それが横スクロールバーに反映されないので困っています。もう一段階サイズを変更すると消えるのですが・・・。
0070デフォルトの名無しさん
2005/05/30(月) 12:19:05DRV_CLOSE
と同様の機能らしいAPIが二つあるのですが
使い方の違いですか?
0071デフォルトの名無しさん
2005/05/30(月) 17:04:140072デフォルトの名無しさん
2005/05/30(月) 17:31:18後から変更することは出来ない。
が、改めてオープンしなおすことは出来る。
CreateFile(TEXT("CON"),
0073デフォルトの名無しさん
2005/05/30(月) 18:25:12それは標準入力ではない。
>>71
ファイルハンドルを複製せよ。
0074デフォルトの名無しさん
2005/05/30(月) 18:42:49経験者の方はおられますか?
0075デフォルトの名無しさん
2005/05/30(月) 21:52:130076デフォルトの名無しさん
2005/05/31(火) 00:00:36リパースポイントを使いたいのですが、
マイクロソフトと何か契約を結んだりしないとダメですか?
0077デフォルトの名無しさん
2005/05/31(火) 00:59:00CreateEventをリモートで実現するにはどうしたらいいでしょう?
ソケットとか使わないとダメ?
0078デフォルトの名無しさん
2005/05/31(火) 02:52:03ttp://msdn.microsoft.com/library/en-us/fileio/fs/fsctl_set_reparse_point.asp
0080デフォルトの名無しさん
2005/05/31(火) 13:10:46SetTimerは内部でメッセージ使ってるようなので‥‥
0081デフォルトの名無しさん
2005/05/31(火) 13:30:550082デフォルトの名無しさん
2005/05/31(火) 13:44:00Sleepで実装したりもした、と聞く。
0083デフォルトの名無しさん
2005/05/31(火) 13:46:430084デフォルトの名無しさん
2005/05/31(火) 13:55:240085デフォルトの名無しさん
2005/05/31(火) 14:05:510086デフォルトの名無しさん
2005/05/31(火) 14:09:250087デフォルトの名無しさん
2005/05/31(火) 14:18:29作っている(MFC無し)のですが、英語版NT4(GlobalIME IE4)環境下にて、
日本語が文字化けします。どなたかうまく表示させる方法をご存知ではない
でしょうか?
以下はソース抜粋です。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void SetTxtMsg(LPCTSTR lpTxtMsg)
{
LOGFONT lf;
memset(&lf, NULL, sizeof(lf));
lf.lfCharSet= SHIFTJIS_CHARSET;
lf.lfOutPrecision= OUT_OUTLINE_PRECIS;
lf.lfClipPrecision= CLIP_STROKE_PRECIS;
lf.lfPitchAndFamily= DEFAULT_PITCH | FF_SWISS;
lstrcpy(lf.lfFaceName, TEXT("MS Gothic"));
hFont = CreateFontIndirect(&lf);
msg_hWnd = CreateWindowEx( NULL,
"STATIC", TEXT(lpTxtMsg),
WS_CHILD | WS_VISIBLE | SS_CENTER,
WNDMSG_X, WNDMSG_Y, WNDMSG_WIDTH, WNDMSG_HEIGHT,
hWnd, NULL, hInst, NULL);
SendMessage(msg_hWnd, WM_SETFONT, (WPARAM)hFont, TRUE);
}
0088デフォルトの名無しさん
2005/05/31(火) 14:24:590089デフォルトの名無しさん
2005/05/31(火) 15:08:370090デフォルトの名無しさん
2005/05/31(火) 15:09:32timeSetEvent() とか SetWaitableTimer() とかは?
0091デフォルトの名無しさん
2005/05/31(火) 21:12:03正確なのがほしけりゃマルチメディアタイマー使ったら
0092デフォルトの名無しさん
2005/05/31(火) 21:40:110093デフォルトの名無しさん
2005/05/31(火) 21:42:220094デフォルトの名無しさん
2005/05/31(火) 21:56:30適当に解像度を落としてから解像度を戻すと
Windowの配置が目茶目茶になるので
EnumWindowsとGet/SetWindowPlacementで処理したは良いが、
なぜか最大化しているWindowがタスクバーの下にえぐれてしまうのです。
タスクバーに適当にメッセージでも流せば戻るのかと思ったんですが
試した限りでは駄目でした。
タスクバーのエッジをクリックするとか、何か新しいWindowでも開くと直るのですが
何とかする手立ては無いんでしょうか。
ちなみにWindows2000上でしか試していませんので他の環境では分かりません。
0095デフォルトの名無しさん
2005/05/31(火) 22:23:20アクセラレータのメッセージが親ウィンドウに来ないで
そのときフォーカスのある子ウィンドウに行くようになってしまったのですが
私は何をしてしまったのでしょうか。
0096デフォルトの名無しさん
2005/05/31(火) 22:24:450097デフォルトの名無しさん
2005/05/31(火) 22:59:43何か思い当たる事ないか
0098デフォルトの名無しさん
2005/05/31(火) 23:16:210099デフォルトの名無しさん
2005/05/31(火) 23:23:42ReadEventLog関数を用いて1つずつレコードの内容をファイル等に書き出して
いくしかないのでしょうか?
もし書き込み用関数やサンプルソース等がありましたら教えて頂きたいので
よろしくお願いします。
0100デフォルトの名無しさん
2005/05/31(火) 23:24:31えぐれる?
0101明日のために
2005/05/31(火) 23:30:460102デフォルトの名無しさん
2005/05/31(火) 23:53:51TranslateAccelerator( HWND hWnd, HACCEL hAccTable, LPMSG lpMsg );
このHWNDに、呼び出すその時のMSG構造体のHWND渡してるとかじゃないか?
010394
2005/06/01(水) 00:00:420104デフォルトの名無しさん
2005/06/01(水) 00:05:18復帰したときはなぜかタスクバーを無視して最大化されてしまうってこと?
0105デフォルトの名無しさん
2005/06/01(水) 00:12:150106デフォルトの名無しさん
2005/06/01(水) 01:21:58まずsystemアカウントでutilman.exeが起動して、その子プロセスとして
現在ログオンしているユーザーの権限でutilman.exeが実行されているのですが、
どうやってパスワードなしで現在のユーザーのトークンを得ているのでしょうか?
010794
2005/06/01(水) 01:27:27そんな感じですかね。SetWindowPlacementすると
最大化していたWindowがタスクバーの下に滑り込んでしまいます。
>>105
一応タスクバーはBottomに置いてあります。
今確認したところ左と上の時はいい感じですが、
右と下だとやっぱりタスクバーを無視した感じのサイズになるようです。
0108デフォルトの名無しさん
2005/06/01(水) 02:15:02BackupEventLog()じゃダメ?
リモート接続ならリモート先にしか保存できないという素敵な関数さんだけど
情報メッセージとかちゃんと変換して吐き出すなら
1レコード読み込んで吐き出すしかないと思われ
010995
2005/06/01(水) 03:35:46その通りでした。
「猫でも〜」を見て作ったときは
TranslateAccelerator(hWnd, hAccel, &msg)
としていたのですが、VCにひな形を作ってもらうと
TranslateAccelerator(msg.hwnd, hAccelTable, &msg)
このように作るようです。
どうもありがとうございました。
0110デフォルトの名無しさん
2005/06/01(水) 04:16:01WANIPを取得できるような関数ってありますか?
0111デフォルトの名無しさん
2005/06/01(水) 05:51:38残念ながらOSが管理してる情報じゃないのでそんなAPIはありません
0112デフォルトの名無しさん
2005/06/01(水) 06:21:20DDNSで登録しといて、Winsockでgethostbynameするとか
0113デフォルトの名無しさん
2005/06/01(水) 08:57:15UPnPに対応しているルータならUPnPで取れる
0114110
2005/06/01(水) 12:19:53とても参考になりました。
0115デフォルトの名無しさん
2005/06/01(水) 12:21:300116デフォルトの名無しさん
2005/06/01(水) 13:41:10・MSでそれっぽいSDKが出てないか探してみる
0117デフォルトの名無しさん
2005/06/01(水) 19:13:50スクリーンセーバーを作りたいのですが、
外部シンボル 'WinMain' が未解決
とエラーがでてしまいます。
ソースは「猫でも〜」のコピペなので間違いはないと思います。
コンパイラはBCCで開発環境はBCCDeveloperです。
原因があるとすればどこでしょうか?
0118デフォルトの名無しさん
2005/06/01(水) 19:22:10猫にはscrnsave.libを使うと書いてあるだろうが、これはVC++の本当のライブラリで、BCCには存在しない。
DLLのインポートライブラリではないからimplibで解決できるわけでもない。
0119デフォルトの名無しさん
2005/06/01(水) 19:37:13写したから間違いは無いと思うその思考がまず間違い
人間とは間違うはずの無いところで間違うもの
何よりも、間違いが無いならエラーが出るわけがない
エラーが出るということは間違っているということ
0120デフォルトの名無しさん
2005/06/01(水) 19:52:01�dクス ( ノД`)゚・。
0121デフォルトの名無しさん
2005/06/01(水) 19:56:16http://homepage2.nifty.com/tenk/prog/scrnsvr.htm
0122デフォルトの名無しさん
2005/06/01(水) 20:25:41クスコ
0123デフォルトの名無しさん
2005/06/01(水) 20:33:55レスくれてありがとうございます。
BackupEventLog関数でファイルそのものを
バックアップすることはできるのですが、
1レコード読み込んで、そのメッセージ内容を
dllから読み込み変換、ファイルに出力という事を
やろうとしています。
そういう処理は、LoadLibrary、ReadEventLog、FormatMessage等を
駆使してやるしかなさそうですね。
数少ないながらもネット上にサンプルがありまして、
参考にして何とか実装することができました。
Windowsのイベントビューア上で、「ログファイルの名前を付けて保存」と
同じ事をしたいわけですが、どういう実装になってるか予想できますか?
(それ使えばいちいち作らなくてもいいわけですが…)
0124デフォルトの名無しさん
2005/06/01(水) 20:59:33プラットフォームSDKにサンプルがあったような希ガス。
0125デフォルトの名無しさん
2005/06/01(水) 21:26:57Platform SDKではないですが、サンプルがあっさりと見つかりました。
英語の本家サイトもきちんとチェックするようにしないといけませんね。反省。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/reading_the_event_log.asp
自分が作成したものとは全く違うわけで…。
自分の場合は、ログのレコードを格納するためのバッファのサイズを
取得するために、ReadEventLog関数を2回呼び出すようにしていました。
0126デフォルトの名無しさん
2005/06/02(木) 02:41:30現在、テキストエディタを制作しているのですが、
保存処理で詰まっています。
CreateWindow()で生成したエディットコントロールから文字数を
取得してmalloc()でその分のバッファを用意します。
そのバッファにエディットコントロールの内容をコピーして、
WriteFile()でファイルに書き込む、という感で作りたいのですが
どうすればエディットコントロール文字数を取得できるのか
がわかりません。どうすればいいのでしょうか?
0127デフォルトの名無しさん
2005/06/02(木) 03:19:19コントロールはウィンドウの一種だ。
Windowsは1個のウィンドウに対して一つの名前(文字列)を付けることが出来、
その名前を操作するためのAPIを提供している。
タイトルバーのタイトル文字列はメインウィンドウの名前を表示している。
そして、コントロールはこの名前(文字列)をスタティックコントロールの文字列や
エディットコントールの編集しているテキストとして扱っている。
0128126
2005/06/02(木) 03:30:46ありがとうございます。
GetWindowText()ってことですよね?
GetWindowText()でバッファに文字列を格納する前に
malloc()でバッファを作りたいのですが・・・
0129デフォルトの名無しさん
2005/06/02(木) 03:32:590131デフォルトの名無しさん
2005/06/02(木) 05:20:500132デフォルトの名無しさん
2005/06/02(木) 07:20:410133デフォルトの名無しさん
2005/06/02(木) 10:32:13最初はとっつきにくい感じはある。空の window で文字列があるのは title bar
だけだから text はそこしかないが、多くの window にはあちこちに text が
あるように「見えて」そんなことは最初は分りにくい。
dialog には GetDlgItemText() が用意されているが、GetEditControlText() や
GetTitleBarText() とかあると直感的には分りやすいと思う。
マクロ定義で済むのにね。
0134デフォルトの名無しさん
2005/06/02(木) 11:01:070135デフォルトの名無しさん
2005/06/02(木) 13:43:04Edit_GetText()
0136デフォルトの名無しさん
2005/06/02(木) 17:09:060137デフォルトの名無しさん
2005/06/02(木) 20:25:44hIcon = LoadImage(hInst, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
としてロードしたものを
ImageList_AddIcon(hIList, hIcon)
として利用可能でしょうか?
0138デフォルトの名無しさん
2005/06/02(木) 20:48:460139デフォルトの名無しさん
2005/06/02(木) 20:49:400140デフォルトの名無しさん
2005/06/02(木) 21:04:56何も表示されません
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
for(i = 0;i > 256;i+=64) {
BitBlt(hdc , i , 0 , 64 , 64 ,
hMem2 , 0 , 0 , SRCCOPY);
BitBlt(hdc , i , 0 , 64 , 64 ,
hMem1 , 0 , 0 , SRCCOPY);
}
EndPaint(hWnd , &ps);
break;
原因を教えてください。お願いします。
0141デフォルトの名無しさん
2005/06/02(木) 21:06:480142デフォルトの名無しさん
2005/06/02(木) 21:10:56それはWindowsのWindowの構造が理解できてないからだ
>>137
LoadImageでIMAGE_BITMAPで何が返って来ると思う?
てか似たような質問前スレにもあったぞ
>>140
まずhMem1とhMem2の出所を教えてくれ
0143140
2005/06/02(木) 21:18:55static HDC hMem1 , hMem2;//メモリデバイスコンテキスト
PAINTSTRUCT ps;
HBITMAP hBmp;
int i;
case WM_CREATE:
hdc = GetDC(hWnd);
hBmp = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("BASE")
);
hMem1 = CreateCompatibleDC(hdc);
SelectObject(hMem1 , hBmp);
DeleteObject(hBmp);
hBmp = LoadBitmap(
((LPCREATESTRUCT)lp)->hInstance ,
TEXT("BASE_M")
);
hMem2 = CreateCompatibleDC(hdc);
SelectObject(hMem2 , hBmp);
DeleteObject(hBmp);
ReleaseDC(hWnd , hdc);
break;
小出しスマソ。
マスク画像を表示するプログラムにしようと思ってます。
0144141
2005/06/02(木) 21:26:300146デフォルトの名無しさん
2005/06/02(木) 21:30:57スマソ。よく分かりません。。。
0147141
2005/06/02(木) 21:35:28~~~~~~~
0148デフォルトの名無しさん
2005/06/02(木) 21:39:24最初のインスタンスハンドルはリソースを読み込むときに使うものだから、
LR_LOADFROMFILEを指定するときにはNULLで良い。
0149デフォルトの名無しさん
2005/06/02(木) 21:40:33神様ありがとう。馬鹿だ漏れ。。。
0150デフォルトの名無しさん
2005/06/02(木) 21:48:27もつっこんどいてやったほうが親切?
0151137
2005/06/02(木) 21:58:46NULLですね・・すんません;;
で、やはり .bmpを読み込んで
ImageList_AddIconに渡しても-1が戻ってだめぽ、なんで
何らかの解決方法ってないですかね・・
bmpを読み込んで動的にiconに変換させるとか
そのままiconとして扱えるとか、お手軽なAPIとか手法はないものでしょうか?
おとなしくiconファイルに変換したものを渡した方が無難でしょうか・・・?
0152デフォルトの名無しさん
2005/06/02(木) 22:27:070153デフォルトの名無しさん
2005/06/02(木) 22:56:280154デフォルトの名無しさん
2005/06/02(木) 22:58:04最終的に書き込むサイズが(だいたい)わかっている場合ヒントを与えるような仕組みってないですか?
0155デフォルトの名無しさん
2005/06/02(木) 22:59:560156デフォルトの名無しさん
2005/06/03(金) 00:01:02SetFilePointer
SetEndOfFile
0157149
2005/06/03(金) 06:56:48ごめん、気になるから教えて神様。
>153
グローバルにすればいいですか?
0158デフォルトの名無しさん
2005/06/03(金) 07:06:21必要な時に宣言するという思考は無いのか?
0159デフォルトの名無しさん
2005/06/03(金) 07:25:03case の中でも、{ } でくくればブロックの先頭で変数の宣言できるよ
0160デフォルトの名無しさん
2005/06/03(金) 07:48:360161デフォルトの名無しさん
2005/06/03(金) 09:25:270162デフォルトの名無しさん
2005/06/03(金) 10:07:15USBメモリ等のリムーヴァブルメディアの
とりはずし操作
# 物理的なとりはずしではなく,
# 前もってOS上でやる「安全なとりはずし」
が行われたらそれを検知したいのですが,
方法はありますか?
0163デフォルトの名無しさん
2005/06/03(金) 10:41:49WM_DEVICECHANGEはどう?
0164162
2005/06/03(金) 10:54:46いまドキュメントを読んでも
要領をえないんですが,
WM_DEVICECHANGE
が実際にメディアを抜いたときにくる
メッセージなんですか?
OS の「ハードウェアの取り出し」操作を
キャッチしたいのですが,
このメッセージでできるんでしょうか?
0165デフォルトの名無しさん
2005/06/03(金) 10:56:040166163
2005/06/03(金) 11:25:38『OS のハードウェアの取り出し操作をキャッチ』というのは
ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?
今試したらWM_DEVICECHANGEが来たぞ。
何かLPARAMに値がセットされてたが、それは面倒なので調べてないが。
(調査にはWin2000&WTLを使用)
0167164
2005/06/03(金) 12:31:29> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?
まさにそれです
> 今試したらWM_DEVICECHANGEが来たぞ。
ならばいけそうです
0168デフォルトの名無しさん
2005/06/03(金) 12:54:48time()やGetSystemTime()などでは時刻の設定をされたり「Windows Time
サービス」がSetSystemTimeAdjustment()をしていたりするので、正しい
経過時間が不明です。ハード的な誤差はあってもよいがソフト的な設定
による影響を避けたい。
0169デフォルトの名無しさん
2005/06/03(金) 13:16:250170149
2005/06/03(金) 13:45:23亀レスですが、よく分かりません。
詳細キボンです。
0171デフォルトの名無しさん
2005/06/03(金) 13:55:11こういうことかと思われ
×な例
case WM_PAINT:
int a;
○な例
case WM_PAINT:
{
int a;
}
0172デフォルトの名無しさん
2005/06/03(金) 14:04:41PAINTSTRUCT ps; が戦先頭にあったもんでね。
WM_PAINTでしか使わないようなこういうのは、
case WM_PAINT:
{
PAINTSTRUCT ps;
・
・
break;
}
とかね
0173デフォルトの名無しさん
2005/06/03(金) 14:04:57な〜る。�dクス
0175デフォルトの名無しさん
2005/06/03(金) 15:28:11hDCにSELECT中のhBmpをDeleteObjectしてどーすんの
0176デフォルトの名無しさん
2005/06/03(金) 15:31:41望みどおりのことができました。ありがとうございます。
0177164
2005/06/03(金) 15:54:25このメッセージなんですが
> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?
のときにたしかにくるんですが,
当然,USBメモリをさしたときとか
CD をぬきさししたときにもきます.
このメッセージがきたときに
> ハードウェアの取り外しダイアログで[停止]ボタンを押したときのことか?
かどうかを判定し,どのドライヴ文字にわりあてられていた
記憶装置かを知ることはできますか?
0178デフォルトの名無しさん
2005/06/03(金) 16:05:21PlaformSDK or MSDN LibraryのWM_DEVICECHANGEの説明嫁
0179149
2005/06/03(金) 16:29:04�dです。
つまり二番目のビットマップをロードする前に
Deleteする必要ないってことですか?
0180デフォルトの名無しさん
2005/06/03(金) 16:35:38おそらくそのDeleteObject失敗してるよ。
戻り値調べてごらん。
DeleteObjectするときは、hDCを使わなくなったときに
別のhBmpをSelectしたときに返ってくるhBmpを使うか
しないとね。
hDCにSelectされた状態でDeleteするなって書いてなかったか?
0181180
2005/06/03(金) 16:53:120182デフォルトの名無しさん
2005/06/03(金) 16:59:05とりあえずおまいはMSDNをよーく読め
0183180
2005/06/03(金) 17:09:39かつ表示はできてたな、、、、
まあやっちゃいけないことではあるが
0184149
2005/06/03(金) 17:18:27色々と�dクス。
何となく理解できますた希ガス。
0185デフォルトの名無しさん
2005/06/03(金) 19:52:24プログラムから操作したいのですが、
API の宣言を、C 言語のヘッダーではなくて、
XML などの扱いやすい形式で入手することはできないでしょうか?
0186デフォルトの名無しさん
2005/06/03(金) 19:55:180187デフォルトの名無しさん
2005/06/03(金) 19:58:54マルチは芯でいいよ(´・ω・`)
0188デフォルトの名無しさん
2005/06/03(金) 20:07:39可能
0189デフォルトの名無しさん
2005/06/03(金) 20:10:52既に出来上がってる関数の宣言を弄って何をしようと言うのだ・・・
0190デフォルトの名無しさん
2005/06/03(金) 20:17:45とある言語で、Win32 API を使いたくて、
すべての宣言をコンバートしたい。
0191デフォルトの名無しさん
2005/06/03(金) 21:39:03入ったファイルがついてたけど今は無いのかな
0192デフォルトの名無しさん
2005/06/03(金) 21:41:060193デフォルトの名無しさん
2005/06/03(金) 23:19:43もちろん、プロトタイプが必要だよ。
構造体のサイズとかアラインメントとかも。
0194デフォルトの名無しさん
2005/06/04(土) 01:59:140195デフォルトの名無しさん
2005/06/04(土) 02:30:04持たないアプリケーションがあってそのアプリケーション上で
ふつうにキー入力をする分には認識しますがプログラムで
メインウィンドウにWM_CHARを送っても認識していません。
恐らくそのアプリケーションでそういったことを対策してると思うのですが
どういったトリックを使ってるのでしょうか?教えてくださいお願いします
0196デフォルトの名無しさん
2005/06/04(土) 02:33:21WM_CHAR 以外でキー処理してるんじゃねーの?
0197デフォルトの名無しさん
2005/06/04(土) 02:33:39明らかにメインウィンドウのほかにも別のコントロールが存在してると
思うのですがEnumChildWindowsでは検出できませんでした。
0198デフォルトの名無しさん
2005/06/04(土) 02:34:08馬鹿はすっこんでろボケ
0199デフォルトの名無しさん
2005/06/04(土) 02:52:42煽り口調でレスされると中身とは無関係にとにかく煽り返さないと気が済まない人ですか?
0200デフォルトの名無しさん
2005/06/04(土) 02:55:450201デフォルトの名無しさん
2005/06/04(土) 03:59:150202ボク
2005/06/04(土) 04:12:06ボクとは誰でしょうか?
0203デフォルトの名無しさん
2005/06/04(土) 04:15:310204デフォルトの名無しさん
2005/06/04(土) 05:23:140205デフォルトの名無しさん
2005/06/04(土) 08:59:57普通キー入力の処理はKEY_DOWN
DirectXアプリならDirectInput使ってる可能性もある
0206デフォルトの名無しさん
2005/06/04(土) 09:32:17この値は本当の値なのでしょうか、それとも例外ハンドラに引っかかってでたらめな値になっているのでしょうか?
ページテーブルを取得する方法があったら教えて下さい。
0207デフォルトの名無しさん
2005/06/04(土) 10:05:320208デフォルトの名無しさん
2005/06/04(土) 12:25:10鯛焼き屋さんのおじさんに捕まっちゃった。
今まで盗った鯛焼き代払えって放してくれないんだよ。うぐぅ。
今すぐ口座に100万円振り込んでよ、
ねえ、アッコさん。
0209デフォルトの名無しさん
2005/06/04(土) 13:13:590210デフォルトの名無しさん
2005/06/04(土) 16:08:59C++で作成したdllやlibを、Cで作成したプログラムから使用することはできるのでしょうか?
(クラスを使用するとしてもライブラリの中だけで使用して、exportは行いません。)
0211デフォルトの名無しさん
2005/06/04(土) 16:14:02extern "C" でCリンケージを指定すれば、その関数は普通にCから使えるよ
0212デフォルトの名無しさん
2005/06/04(土) 17:55:02志村、逆! 逆!
0213デフォルトの名無しさん
2005/06/04(土) 18:03:31デバイスドライバ書いてください。
0214デフォルトの名無しさん
2005/06/04(土) 19:51:49逆じゃないだろ。
C++で作成するライブラリの外に見せる部分を
extern "C" {
}
で囲うのが正解。
Cからextern "C++"を使うのは邪道。
0215デフォルトの名無しさん
2005/06/04(土) 19:53:42よく嫁よ
0216デフォルトの名無しさん
2005/06/04(土) 20:08:49extern "C++"やるよりかは、C++の方直してやったほうが良いと思うに一票
ってかWinAPIと関係ねぇw
0217デフォルトの名無しさん
2005/06/04(土) 20:13:25された名前でCから呼ぶしかなくなるが、あれってCシンボルとして
つかっていい文字以外とかも使われてるからダメかもな。
試したことないからわからんが。
0218デフォルトの名無しさん
2005/06/04(土) 20:54:49単に、Cで書いたobjファイルとC++で書いたobjファイルをリンクすればいいだけのような気もするが。
0219デフォルトの名無しさん
2005/06/04(土) 21:19:17それは今回の問題にはあまり関係がないけどな
どっちみちリンケージ指定は必要だし
0220デフォルトの名無しさん
2005/06/04(土) 22:09:36!
0221デフォルトの名無しさん
2005/06/04(土) 23:44:230222デフォルトの名無しさん
2005/06/05(日) 00:01:03ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_manamemo.asp
0223デフォルトの名無しさん
2005/06/05(日) 05:01:07ネットワークケーブル(LANケーブル)が接続されているかどうかを検出するAPIってありますか?
0224デフォルトの名無しさん
2005/06/05(日) 05:52:360225デフォルトの名無しさん
2005/06/05(日) 05:52:52あります。
0226デフォルトの名無しさん
2005/06/05(日) 09:42:08あるというなら提示してみろ。
0227デフォルトの名無しさん
2005/06/05(日) 09:51:510228デフォルトの名無しさん
2005/06/05(日) 11:14:08もちろんあるが、今、出先だから思い出せない。
ところで対象OSは何?
0229デフォルトの名無しさん
2005/06/05(日) 13:27:350230デフォルトの名無しさん
2005/06/05(日) 14:14:410231デフォルトの名無しさん
2005/06/05(日) 14:43:22最近は凄く説明がいい加減になっているのは何故ですか?
もうAPIという物を無くしたいのかなM$は('A`)
0232デフォルトの名無しさん
2005/06/05(日) 14:54:200233223
2005/06/05(日) 16:55:17MibIfRowのdwOperStatusで5だったら接続されてて0だったら切断されてるっぽいです。
それ以外のステータスがよくわからない・・・orz
0234デフォルトの名無しさん
2005/06/05(日) 17:10:14Blogや掲示板が増えている。
0235デフォルトの名無しさん
2005/06/05(日) 17:56:49日本語ドキュメント作るのマンドクセ(M$談)
0236デフォルトの名無しさん
2005/06/05(日) 19:14:360237デフォルトの名無しさん
2005/06/05(日) 19:25:150238デフォルトの名無しさん
2005/06/05(日) 19:31:490239デフォルトの名無しさん
2005/06/05(日) 19:32:32(CreateThread()や_beginthreadex()を実行)するたびにディスクへのアクセスを行うようです。
おそらく、ライブラリを検索しているんだと思うのですが(違っていたらご指摘ください)、
この(FDへの)ディスクアクセスを抑制する方法がありましたらご教示ください。
0240デフォルトの名無しさん
2005/06/05(日) 19:33:560241デフォルトの名無しさん
2005/06/05(日) 19:34:350242デフォルトの名無しさん
2005/06/05(日) 19:50:27ありがとうございます。早速試してみたのですが、残念ながらだめでした。
どうやらカレントディレクトリを調べているというわけではなさそうです。
ちなみに、リストビューのアイテムを最初にクリックしたときも >>239 と同じ現象が見られるんですよね…。
0243デフォルトの名無しさん
2005/06/05(日) 21:08:20何かがあった気がする
0245デフォルトの名無しさん
2005/06/06(月) 00:30:36たまたまAdvancedWindowsのメモリ管理のページ読んでたら、
それ関連の記述があった。リンク時に/SWAPRUNなんとかってオプション付けると、
実行時にメモリ上に実行イメージ全てを読み込むらしい。
98や2000だと、FDから実行した場合は標準で/SWAPRUNな動作になるらしいんだが、
それだと>>239みたいな動作にはならなさそうだよな。標準動作が変わったのかね?
0246デフォルトの名無しさん
2005/06/06(月) 01:48:17よそうだけど、SWAPRUNが影響するのは、
.exeとそれに暗黙にリンクされたdllだけだろうし・・・
0247デフォルトの名無しさん
2005/06/06(月) 02:20:240248239
2005/06/06(月) 02:36:47Advanced Windows を持っているのにそのあたりは読み飛ばしていました_| ̄|○
>>243 さんがおっしゃっているのは、どうやら /SWAPRUN のことみたいですね。
試していなかったのですが、Windows 98 と 2000 ではFDへのアクセスは発生しないようです。
しかし、リンク時に /SWAPRUN を付けてもXPだとやはりFDへのアクセスが発生してしまいます。
>>246 >>247
そうですね…「.exeのあるフォルダ」の情報を上書きするAPIでもあると
一気に解決するのですが、それも見つからないので困ってしまいます。
0249デフォルトの名無しさん
2005/06/06(月) 12:37:02ユーザーに色を選ばせる様なポップアップ
またはダイアログを表示したいんだけど、
VBのプロパティのBackColorで出てくるような
ポップアップとかChooseFontみたいな便利な
関数ってありますか?
やさしいお兄さん教えて
WinXPpro、VC++6.0
0250デフォルトの名無しさん
2005/06/06(月) 13:27:540251249
2005/06/06(月) 13:40:41ありがとう!的中しました。
いや〜ChoseFontは知ってたんだが、
Colorバージョンもあったなんて
目から鱗のクラッカー
愛してるよ
0252デフォルトの名無しさん
2005/06/06(月) 14:48:302000 で起きなくて XP で送るなら、漏れなら manifest を疑う。
0253デフォルトの名無しさん
2005/06/06(月) 16:46:24どうして新参者が6.0を持ってるんだろう?
それも決まって6.0だ。5.0じゃない。
どうなっているのか?
0254デフォルトの名無しさん
2005/06/06(月) 16:49:430255デフォルトの名無しさん
2005/06/06(月) 17:03:460256デフォルトの名無しさん
2005/06/06(月) 17:12:16俺もそろそろIDE買い換えたいなぁ…。最近のは関数毎にテキストを畳めるらしいな…。
0257デフォルトの名無しさん
2005/06/06(月) 17:19:33デバッガは我慢して使ってるが、
それ以外はコマンドライン+makefileに逆戻りしたよおかげさまで。
0258デフォルトの名無しさん
2005/06/06(月) 17:23:432003に移行した人から貰ったんじゃないの?
0259デフォルトの名無しさん
2005/06/06(月) 17:25:05新参者なら最近開発環境購入したはずなのだからVC++6.0であるはずがない、
ということでしょ。
>>257
確かにVC++6.0やVB6.0あたりとは軽さが圧倒的に違うね。
でも、インテリセンスつきのエディタとデバッガはやはり欲しいから、IDEから離れられない。
0260デフォルトの名無しさん
2005/06/06(月) 17:44:02( ・∀・)人(・∀・ )ナカーマ
0261デフォルトの名無しさん
2005/06/06(月) 17:44:290262デフォルトの名無しさん
2005/06/06(月) 17:44:29プログラマとして新参者でも、最近開発環境購入したとは限らんだろう
0263デフォルトの名無しさん
2005/06/06(月) 18:04:440264デフォルトの名無しさん
2005/06/06(月) 18:15:01質問ですが
リストビュー(リストコントロール)に挿入されてるカラムの数を取得したいのですが、
そのAPIを教えていただけないでしょうか。
アイテムを取得するAPIはわかったのですが、どうしてもカラムの数がわかりません。
0265デフォルトの名無しさん
2005/06/06(月) 18:47:29三角関数とか行列とかでてきた。
図形の回転。。。XFORM構造体。。。
やはりこれは高校の教科書なの、だろう。
0266239
2005/06/06(月) 19:14:50manifestって、XPスタイルにするための.manifestファイルのことでいいんですよね?
とりあえず、次の2つを試してみました。
・設定をクラシックスタイルに変更して実行
・.exeファイルのリソースにmanifestを埋め込んで実行
やっぱりどちらもスレッド作成時にFDをアクセスしに行きます…もうだめぽ
0267デフォルトの名無しさん
2005/06/06(月) 19:26:11ヘッダーコントロールに対して HDM_GETITEMCOUNT とか Header_GetItemCount() とか
0268デフォルトの名無しさん
2005/06/06(月) 20:56:47一時的にハードディスクにコピーして実行するのが簡単だと思うよ
0269239
2005/06/06(月) 22:20:26そうですね…確かに現時点ではそれが最も手っ取り早い解決方法かもしれません。
まあ、そもそもいまどきFDから起動するという状況自体がレアケースなので、
無視してもどうということはないのですが…あまり気持ちのいいものではないですよね。
0270デフォルトの名無しさん
2005/06/06(月) 22:44:57大したことをやっていない、というのもあるけどね。
ちなみに会社では今だにVC4.2
0271デフォルトの名無しさん
2005/06/06(月) 23:12:05別でダイアログでもうひとるウィンドウみたいなのができますよね。
これをウィンドウとあわせたりできますか?
0272デフォルトの名無しさん
2005/06/06(月) 23:16:58ってなんだ?
0273デフォルトの名無しさん
2005/06/06(月) 23:19:53RegEnumValueでキー名がFilterClassesとか出て値が得られないんだけど、
これらを得る方法はありますか?
例えば
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network
以下にあるキーとか。
0274デフォルトの名無しさん
2005/06/06(月) 23:25:09/* 島津印のマーカーを、出す */
void Marker(LONG x, LONG y, HWND hwnd)
{
HDChdc;
hdc = GetDC(hwnd);
MoveToEx(hdc, (int)x - 10, (int)y, (LPPOINT)NULL);
LineTo(hdc, (int)x + 10, (int)y, (LPPOINT)NULL);
MoveToEx(hdc, (int)x, (int)y - 10, (LPPOINT)NULL);
LineTo(hdc, (int)x, (int)y + 10, (LPPOINT)NULL);
ReleaseDC(hwnd, hdc);
}
LRESULT CALLBACK MainWndProc(HWND hwnd,
UINT messge,
WPARAM wParam,
LPARAM lParam)
{
/* FIXME: もうねる */
0275デフォルトの名無しさん
2005/06/06(月) 23:42:48漏れは古いソースをコンパイルするときはそのとき使っていたものをずっと使ってる
新しいのでコンパイルし直すだけで古い環境では動作しなくなるらしいから
0276デフォルトの名無しさん
2005/06/06(月) 23:49:16>HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network
>以下にあるキーとか。
サブキーを列挙したいのなら RegEnumKeyEx な。
RegEnumValue はエントリ(値)の列挙。
0277デフォルトの名無しさん
2005/06/07(火) 00:50:04方法を問わなければ、WSHで列挙してテキストファイルに写すってのはどうよ?
たしか、WSHなら制限無く値を得れるはず。(RegEnumValueで制限あるなんて知らなかったが)
指定の値を取れる記述をしたvbsをShellExecuteで呼び出してとかね。
>>276
値が得られないって言ってるんだから、RegEnumValueでいいだろう。
以下のキーの値が得られないって言ってるんだと思う
0278デフォルトの名無しさん
2005/06/07(火) 02:28:190279デフォルトの名無しさん
2005/06/07(火) 02:51:00Get/SetEnvironmentVariable APIがあるけどシステム環境変数は無理っぽいから
レジストリを操作するしかないとおもふ
0280デフォルトの名無しさん
2005/06/07(火) 12:10:05'VK_A' : 定義されていない識別子です。
というエラーになってしまいます。
VK_LEFTやVK_UPなどは大丈夫です。
何故でしょうか?
0281デフォルトの名無しさん
2005/06/07(火) 12:13:420282280
2005/06/07(火) 12:33:05どうしたら使えるようになるんでしょうか?
0283デフォルトの名無しさん
2005/06/07(火) 12:39:34どうしても、その記述が使いたければ自分で定義するしかないんじゃない?
漏れのwinuser.hにはコメントで↓のように書いてあるし
VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
0284デフォルトの名無しさん
2005/06/07(火) 12:54:22単に'A'と書いたら大丈夫だったんで、これでいきます。
0285デフォルトの名無しさん
2005/06/07(火) 12:56:35マウスフック(グローバルフック)を使いたいのですが、うまくいきません。
1回のクリックにつき10回くらい呼び出されてしまいます。
何か対処方法はありますか?
現在下記のようなコードで試しています。
//フックするプロシージャ
LRESULT __stdcall CallWndProc(int nCode,WPARAM wParam,LPARAM lParam) {
if (nCode == HC_ACTION) {
if (wParam == WM_RBUTTONUP) {
//処理
}
}
return CallNextHookEx(g_hHookWnd, nCode, wParam, lParam);
}
0286デフォルトの名無しさん
2005/06/07(火) 16:01:04つかみ直す方法を教えてください
# プログラミングで
0287デフォルトの名無しさん
2005/06/07(火) 16:03:570288286
2005/06/07(火) 16:08:24「USBルートハブ」を無効にして
再度,有効にするとUSB機器が再度認識されます
# USB を物理的にはずすことなく
これをプログラミングでやりたいんです
0289デフォルトの名無しさん
2005/06/07(火) 16:40:07managerもマネイジャと読めよ。
んで、使ったことないけどMSDNのDevice Managementあたりを
みりゃいいんじゃないか?
0290デフォルトの名無しさん
2005/06/07(火) 16:47:220291デフォルトの名無しさん
2005/06/07(火) 16:51:300292デフォルトの名無しさん
2005/06/07(火) 16:53:250293デフォルトの名無しさん
2005/06/07(火) 17:03:340294デフォルトの名無しさん
2005/06/07(火) 17:05:44「ちゃんと定義してある」のか「ただファイル内にそういう文字列があるだけ」なのかが判らんようじゃアプリ開発など夢のまた夢じゃ
0295デフォルトの名無しさん
2005/06/07(火) 17:09:34全てのトップレベルウィンドウのHWNDにちなんだ文字列の
Mutexを順々に検索してヒットしたHWNDに対してメッセージを
投げるという処理をしたいんですが。
0296デフォルトの名無しさん
2005/06/07(火) 17:21:23なんとなくマジレスしたくないけど、マジレスすると
SetupDiGetClassDevs
SetupDiSetClassInstallParamsでDICS_PROPCHANGE
SetupDiChangeState
でいけるハズ
0297デフォルトの名無しさん
2005/06/07(火) 17:31:44関数がわかってるならやってみりゃいいだろ
そんな自分で計測すりゃわかるようなことを聞きに来るな
0298デフォルトの名無しさん
2005/06/07(火) 17:39:340299デフォルトの名無しさん
2005/06/07(火) 17:53:29あくまでも一般論としてだけど、Open〜は反復呼び出しを
想定されているので*比較的*軽いと言える。
>>297,298
分かんないんなら無理して反応すんなよ。
この板は答えられない質問を見かけると、ムキになって
否定して掛かるのがときどきいるな。
0300デフォルトの名無しさん
2005/06/07(火) 18:04:180301デフォルトの名無しさん
2005/06/07(火) 18:17:57↑ コイツは >>297-298 にちがいない^^
0302デフォルトの名無しさん
2005/06/07(火) 18:19:37↑ コイツは>>299に違いない(^ω^)
0303デフォルトの名無しさん
2005/06/07(火) 18:22:170304デフォルトの名無しさん
2005/06/07(火) 18:25:410305デフォルトの名無しさん
2005/06/07(火) 18:35:010306デフォルトの名無しさん
2005/06/07(火) 18:38:010307デフォルトの名無しさん
2005/06/07(火) 18:55:24面白がってるだけだからフォー
0308デフォルトの名無しさん
2005/06/07(火) 19:27:130309デフォルトの名無しさん
2005/06/07(火) 19:29:460311デフォルトの名無しさん
2005/06/07(火) 19:58:59r' ィ=ゝー-、-、、r=‐ヮォ.〈 /
! :l ,リ|} |. } / .や
. {. | ′ | } l
レ-、{∠ニ'==ァ 、==ニゞ< | ら
!∩|.}. '"旬゙` ./''旬 ` f^| |
l(( ゙′` ̄'" f::` ̄ |l.| | な
. ヽ.ヽ {:. lリ |
. }.iーi ^ r' ,' ノ い
!| ヽ. ー===- / ⌒ヽ
. /} \ ー‐ ,イ l か
__/ ‖ . ヽ、_!__/:::|\ ヽ
0312デフォルトの名無しさん
2005/06/07(火) 20:53:560313デフォルトの名無しさん
2005/06/07(火) 20:59:030314デフォルトの名無しさん
2005/06/07(火) 23:36:48「処理」の中で MessageBox() とか呼んでない?
0315デフォルトの名無しさん
2005/06/08(水) 00:15:26nCode < 0 ならCallNextHookExだってばよ
んで改善されないならハンドルみて確認しろや グローバルなんだべ?
0316285
2005/06/08(水) 01:18:16>「処理」の中で MessageBox() とか呼んでない?
あ、呼んでます。フックできてるか確認するために、
とりあえずMessageBox()で確認しているので。
このせいですかね?他の方法で確認してみます。
0317デフォルトの名無しさん
2005/06/08(水) 01:27:24オープンエラーになってしました(GetLastErr では、1801 プリンタ名がおかしい)
長い名前のネットワークプリンタの場合の OpenPrinter はどうやるのでしょうか?
0318にゃこ
2005/06/08(水) 02:57:24WindowsMediaPlayerのように歪んだウインドウをつくるには
どのようにすればよいのでしょうか
0319デフォルトの名無しさん
2005/06/08(水) 03:30:35ウィンドウリージョンの方が難易度は低いと思う。
0320デフォルトの名無しさん
2005/06/08(水) 03:31:08たしかSetWindowRgn
0321にゃこ
2005/06/08(水) 03:48:050322デフォルトの名無しさん
2005/06/08(水) 04:33:040323デフォルトの名無しさん
2005/06/08(水) 09:37:06答えるまでもない質問にいちいち答えるなよ
スレがみにくくなる
0324デフォルトの名無しさん
2005/06/08(水) 10:37:47( ゚д゚)ポカーン
0325デフォルトの名無しさん
2005/06/08(水) 10:54:480326デフォルトの名無しさん
2005/06/08(水) 12:30:48ところが、アプリ側でLVM_SETITEMSTATEを使い、リストビューの項目を選択状態にしても、
WM_DRAWITEM時に、ODS_SELECTEDフラグが立ってくれなくて困っています。
(マウスで普通に項目を選択した場合は、問題なくODS_SELECTEDが付いてます。)
何か解決方法をご存知の方、ひとつよろしくお願いします。
0327デフォルトの名無しさん
2005/06/08(水) 13:44:53あなたの好みは訊いてません
0328デフォルトの名無しさん
2005/06/08(水) 14:01:30じゃあ、君の好みはどうですか?
0329デフォルトの名無しさん
2005/06/08(水) 14:56:250330デフォルトの名無しさん
2005/06/08(水) 18:36:51GetSystemTime(&t);
srand((t.wSecond << 16 | t.wMilliseconds));
0331330
2005/06/08(水) 18:40:420332デフォルトの名無しさん
2005/06/08(水) 18:46:25GetTickCount()なんてのもある。
0333デフォルトの名無しさん
2005/06/08(水) 18:55:000334デフォルトの名無しさん
2005/06/08(水) 19:24:020335デフォルトの名無しさん
2005/06/08(水) 20:43:54ゲーム程度ならそれで十分だが
暗号鍵の作成だったらやめとけとか
0336デフォルトの名無しさん
2005/06/08(水) 21:14:470337デフォルトの名無しさん
2005/06/08(水) 21:58:580338デフォルトの名無しさん
2005/06/08(水) 22:04:11それ俺もなったなぁ
MFCでだけど
0339デフォルトの名無しさん
2005/06/08(水) 23:20:16LVM_SETITEMSTATE送るときにLVITEMのstateMaskを間違えてない?
(ListView_SetItemStateマクロの方なら第四引数のmask)
0340デフォルトの名無しさん
2005/06/09(木) 06:05:43windowsがアプリケーションにメッセージを送る前にメッセージを
フックしたいのですがどうすればいいですか。教えてくださいお願いします。
0341デフォルトの名無しさん
2005/06/09(木) 06:08:550342デフォルトの名無しさん
2005/06/09(木) 10:39:34質問ですが、
タブコントロールのタブ部分につけるテキストのサイズを変更したい場合は、
どのようにすればよいのでしょうか。
0343デフォルトの名無しさん
2005/06/09(木) 11:10:30とりあえず今の時点では、その時に表示中のフォルダのサブフォルダの一つに名前を指定して移動できればいいので、キーボード系のメッセージをフォルダ名の順番に送って最後にエンター送ろうかとも思ったのですが、それだと日本語のフォルダ名に対応できません。
将来的には任意のフォルダにフルパス指定で移動っていうのも視野に入れたいので、何かいい方法があったら教えてください。
0344デフォルトの名無しさん
2005/06/09(木) 11:20:070345デフォルトの名無しさん
2005/06/09(木) 11:40:000346デフォルトの名無しさん
2005/06/09(木) 11:53:410347デフォルトの名無しさん
2005/06/09(木) 13:39:280348デフォルトの名無しさん
2005/06/09(木) 15:31:580349デフォルトの名無しさん
2005/06/09(木) 15:55:200350デフォルトの名無しさん
2005/06/09(木) 15:58:270351デフォルトの名無しさん
2005/06/09(木) 16:06:09手でふきなさい。
0352デフォルトの名無しさん
2005/06/09(木) 16:29:38むしろ拭かなくてよい。
0353デフォルトの名無しさん
2005/06/09(木) 16:44:540354デフォルトの名無しさん
2005/06/09(木) 17:13:36無理
0355デフォルトの名無しさん
2005/06/09(木) 17:28:58つまり、拭き取ってもう一度口から摂取すればいいわけですね。
0356デフォルトの名無しさん
2005/06/09(木) 17:34:17GetProfileString("windows", "device",・・・
でいいんじゃなかったかなあ
0357デフォルトの名無しさん
2005/06/09(木) 17:41:370358デフォルトの名無しさん
2005/06/09(木) 18:14:12よろしくお願いします。
0359デフォルトの名無しさん
2005/06/09(木) 18:31:18FindFirstFile()
FindNextFile()
FindClose()
0360デフォルトの名無しさん
2005/06/09(木) 19:24:210361デフォルトの名無しさん
2005/06/09(木) 20:03:070362デフォルトの名無しさん
2005/06/09(木) 20:07:470363デフォルトの名無しさん
2005/06/09(木) 20:12:15理屈ではSetActiveWindow(GetTopWindow(NULL));
でもXPとかでは勝手に手前に出さないようになった。
0364デフォルトの名無しさん
2005/06/09(木) 20:16:21MicroSoftによると2000、XPは対応で
95,98は未対応とのことだが、
これってMeは未対応ってことですよね。
0365デフォルトの名無しさん
2005/06/09(木) 20:18:40あるラジオボタンがクリックされたときに、そのラジオボタンの領域
の色(これはウィンドウの背景色ですよね?)を変更したいのです。
0366デフォルトの名無しさん
2005/06/09(木) 20:18:520367デフォルトの名無しさん
2005/06/09(木) 20:21:41タイミングとレス内容からして>>364へのレスですよね。
やっぱりそうか。どもです。
0368デフォルトの名無しさん
2005/06/09(木) 20:28:31オーナードロー
0369デフォルトの名無しさん
2005/06/09(木) 20:48:070370デフォルトの名無しさん
2005/06/09(木) 20:49:29なこたないこたぁない
0371デフォルトの名無しさん
2005/06/09(木) 20:55:05ウィンドウをすべての最前面ウィンドウよりも前に置きます。ウィンドウは、 アクティブでなくても手前に置かれます。
0372デフォルトの名無しさん
2005/06/09(木) 20:55:16初心者プログラマです
今後の勉強の仕方に悩んでおり、相談にのっていただけると助かります
Cの入門書が終わり、この後、VC++を購入して
猫でもわかるWINDOWSプログラミング
プログラミングWindows第5版〈上、下〉
Win32API完璧マスタ―Visual C++プログラミング
のどれかの本を購入して勉強していこうと思っております
正直、VC++とかMFC・SDKとかAPIとかについて良く分かっておらず
このような勉強の仕方でよいのか不安があります
私の認識では
・VC++とは、コンパイラ・デバッガ・MFCと呼ばれる各種ライブラリ等が入った
開発環境で、MFCではなくSDKを使いたい人にも便利で、Cをやるなら買っておいた
ほうがよいソフト
・MFCとは、WINDOWS用プログラムを作る際、知らなければならないAPIは命令の数も
多く難しい。VC++では、APIを知らない人でもWINDOWSプログラムが簡単に作れるように
MFCという各種ライブラリがある。一般的にVC++用の初級本では、特にAPI・SDK用と書いていない場合
MFCを中心とした本が多い
・SDKとは、APIを使ってWINDOWSプログラムを作る技術
・APIとは、WINDOWSプログラムを作る際、WINDOWSのOSに命令を渡す方法
こんな認識であってますか?
また、C入門書の後、前記の3つの本でVC++とWINDOWSプログラムを勉強しようと
思っておりますが、これらの中でC++やVC++の使い方を前もって知らないときつい
本はありますか?
このような勉強方法以外に、お勧めの勉強法はありますか?
長くなりましたが、宜しくお願いします
0373デフォルトの名無しさん
2005/06/09(木) 21:11:11パッケージ。SDKだけならVC++はそう便利でもないような。API知らないと
MFCは苦しい。むしろMFCで覚える量は増える。減るのはコーディングの
量だけ。本は「ウィザードで雛形を作りましょう」って感じのが殆ど。コードを
直に書きましょうってのはほとんどない。そしてウィザードの作ったコードの
意味が分からずにドツボにハマる。SDKはSoftware Development Kitの略。
その名の通り、kit。技術ではない。APIは渡す「方法」ではなく、命令(または
その集合)そのもの。
0374デフォルトの名無しさん
2005/06/09(木) 21:13:310375デフォルトの名無しさん
2005/06/09(木) 21:21:44http://e-words.jp/w/Visual20C2B2B.html
http://e-words.jp/w/mfc.html
http://e-words.jp/w/API.html
http://e-words.jp/w/SDK.html
猫でも〜 なら↓覗いてみ
http://www.kumei.ne.jp/c_lang/
俺ならクラスの勉強に移る
0376375
2005/06/09(木) 21:24:330377デフォルトの名無しさん
2005/06/09(木) 21:59:39「オーナードロー」を調べてみました。そして、WM_DRAWITEM がプローシージャにきた時に、
そのまま return 0; するプログラムを書いてみたのですが、ラジオボタンの◎もテキストも
表示されなくなりました。なんだかよくわかりません。ラジオボタンの◎とテキストを返し
てください。
>>369
WM_CTLCOLOR は windows.h で定義されていないようです。コンパイラに怒られました。
0378デフォルトの名無しさん
2005/06/09(木) 22:01:550379デフォルトの名無しさん
2005/06/09(木) 22:07:27オーナードローというのはコントロールの描画をコントロールに任せず自前で描く事。
チェックの状態やテキストは BM_GETCHECK や WM_GETTEXT で取得。
0380デフォルトの名無しさん
2005/06/09(木) 22:11:30GetTopWindowするとうちの環境ではIMEのツールバーが返ってきてしまい
それをアクティブにするとエラーがでてしまいます(成功してもあまり意味ないですし・・・)。
Alt+TABで切り替えられるウィンドウに限定することは出来るでしょうか?
やりたいのはこんなことなんですが
// アクティブウィンドウを裏に回して次のウィンドウに切り替える
HWND h = GetForegroundWindow();
SetWindowPos(h, HWND_BOTTOM, ...);
h = GetTopWindow(0); // <-ここでIMEのツールバーが引っかかる
SetActiveWindow(h);
0381デフォルトの名無しさん
2005/06/09(木) 22:14:200382デフォルトの名無しさん
2005/06/09(木) 22:21:19ということは◎やテキストも自分で描くんですか?背景色を変えたいだけ
なんですけど。今、ラジオボタンの領域の背景はグレーなのですが、
クリックして選択された場合には赤などに(選択されたことを強調する意味)
したいのです。その他の点はまったく同じで。
0383デフォルトの名無しさん
2005/06/09(木) 22:39:11使ったな。ほかにも幾つか捕まえるべきメッセージが
あったはずだけど、それは忘れた。
0384デフォルトの名無しさん
2005/06/09(木) 22:39:170385デフォルトの名無しさん
2005/06/09(木) 22:51:50調べたらMFCがどうたらとか出てきたのですが。。。
このスレMFCはなしでしょ?Win32APIの呼び出しで解決したいのですが。
WindowBackgroundBrushChangeHappy(hMyRadioButton, hMyBrush) みたいな。
0386デフォルトの名無しさん
2005/06/09(木) 22:52:30今は
WM_CTLCOLORBTN、WM_CTLCOLORDLG、WM_CTLCOLOREDIT、...
に分かれている
つかMSDN嫁
0387デフォルトの名無しさん
2005/06/09(木) 22:59:06(^ω^;)そう笑うなよ
0388365
2005/06/09(木) 23:47:44ありがとう。ありました。でもうまくいきません。どなたかソース見てください。
元の質問は >>365 です。
#include <windows.h>
#define IDR_COKE 10001
#define IDR_COFFEE 10002
void OnCreate(HWND hWnd)
{
CreateWindow("BUTTON", "コーラ", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP,
0, 0, 100, 18, hWnd, (HMENU)IDR_COKE, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), 0);
CreateWindow("BUTTON", "コーヒー", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
0, 20, 100, 18, hWnd, (HMENU)IDR_COFFEE, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), 0);
}
0389続き
2005/06/09(木) 23:48:47{
switch (msg) {
case WM_CREATE:
OnCreate(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CTLCOLORBTN:
return (LRESULT)CreateSolidBrush(RGB(0xff, 0, 0));
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
}
0390続き
2005/06/09(木) 23:50:05{
WNDCLASS winclass = {
CS_HREDRAW | CS_VREDRAW, WndProc, 0, 0, hInst, 0, LoadCursor(0, IDC_ARROW),
(HBRUSH)(COLOR_WINDOW+1), 0, "MainWindow",
};
RegisterClass(&winclass);
HWND hWnd = CreateWindow("MainWindow", "test", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0, 0, 0, hInst, 0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (int rt = GetMessage(&msg, 0, 0, 0)) {
if (rt == -1) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
0391デフォルトの名無しさん
2005/06/09(木) 23:51:43どっかにうぷってそのアドレスを貼り付けろ
0392365
2005/06/09(木) 23:53:360393デフォルトの名無しさん
2005/06/09(木) 23:54:410394デフォルトの名無しさん
2005/06/10(金) 01:18:35アフォ
0396デフォルトの名無しさん
2005/06/10(金) 02:14:42WM_CTLCOLORBTN じゃなくて
WM_CTLCOLORSTATIC だ。
0397デフォルトの名無しさん
2005/06/10(金) 02:17:12そういう人、結構いるの?
0398デフォルトの名無しさん
2005/06/10(金) 06:13:590399デフォルトの名無しさん
2005/06/10(金) 06:26:02といいつつ俺も普段は生APIだな。
0400デフォルトの名無しさん
2005/06/10(金) 06:33:160401デフォルトの名無しさん
2005/06/10(金) 07:15:36自分で必要なクラス設計した方が気持ちいい
0402デフォルトの名無しさん
2005/06/10(金) 07:40:40どっちも使っている人少ない……。 ○| ̄|_
0403デフォルトの名無しさん
2005/06/10(金) 07:52:080404デフォルトの名無しさん
2005/06/10(金) 07:55:040405デフォルトの名無しさん
2005/06/10(金) 08:09:240406デフォルトの名無しさん
2005/06/10(金) 08:16:29コンパネにある「サウンドとオーディオ」の
ハードウェアtabにある既定のデバイスを、
ソフト側から変えたい
(たとえばあるソフトを使うときは特定のデバイスを出力対象にしたい)
のですが、APIは何を使えばよいんでしょう?
ボリュームをかえるmixerってのはよく検索にひっかかるんですが、
どうも求めるものじゃなさそうだし・・・
ちなみに開発環境はXPでVB
0407デフォルトの名無しさん
2005/06/10(金) 09:27:16ソース見てどのAPI使ってるかの確認くらい
できないのかねぇ
0408デフォルトの名無しさん
2005/06/10(金) 09:35:210409デフォルトの名無しさん
2005/06/10(金) 10:27:36「ハードウェアの取り外し」ダイアログで
適当な装置に対して取り外し操作がおこなわれたときの
アクションをつくる必要があります
APIドキュメントを読むと
WM_DEVICECHANGE
というメッセージがきて
「取りはずし要求」をしめす
DBT_DEVICEQUERYREMOVE
というイベントをもっている,
ということになっています.
ところが実験してもこのイベントのメッセージがきません
「取りはずし」が終わったことを示す
DBT_DEVICEREMOVECOMPLETE
というイベントはちゃんときています.
ほしいのは「取りはずし」の事前のメッセージなんです
なぜこれが来ずに終わった後のは来るのでしょうか?
どうしたら事前に来るようになるのでしょうか?
0410デフォルトの名無しさん
2005/06/10(金) 11:32:120411デフォルトの名無しさん
2005/06/10(金) 11:34:39熟練者とまで行かなくても使わずに済ませられると思うが
0412デフォルトの名無しさん
2005/06/10(金) 11:43:050413デフォルトの名無しさん
2005/06/10(金) 11:43:100414デフォルトの名無しさん
2005/06/10(金) 12:01:330415デフォルトの名無しさん
2005/06/10(金) 14:18:43ATLはやはりCOM系の開発で使われることが多い希ガス
ATL7+WTLで普通のWindowプログラム書くの、悪くないんだけどWTLは
非標準だしドキュメント不足なので、仕事で使うには二の足を踏んでしまう
まあATL7だけでも、生APIゴリゴリよりはぜんぜんマシだと思うけど。
特にActive X controlのホスティングとか、生APIではやってらんない。
あれと同等のものを作るのは車輪の再発明でしかないよ。
0416デフォルトの名無しさん
2005/06/10(金) 15:20:05WindowsAPI、MFCは標準なのか?
0417デフォルトの名無しさん
2005/06/10(金) 15:32:07MFCとかATL/WTLってどういうもの?
Win32APIをクラスでラップしたものという解釈でいいの?
覚えてみようかとも思っているけど、MFCとATLってどっちがいいのかわからないんですが。
0418デフォルトの名無しさん
2005/06/10(金) 15:58:16MFCよりATLの方がAPIをラップしただけという感が強いと思う。
ATL自体はメッセージクラッカーのような物を持っていない。(W/LPARAMがそのまま渡される)
そこへWTLを使うとメッセージをクラックするのがついてくる。
0419デフォルトの名無しさん
2005/06/10(金) 16:11:21FindFirstFileからWIN32_FIND_DATAに格納される値が必ず"フフフフフフフフフフフフフフフ"となってしまいます。
なぜなのでしょうか。
C言語ソースファイルだけを抽出しようとしています。
ちなみに、指定しているパス名は、
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind=::FindFirstFile("C:\\MySourceFile\\*.c",&FindFileData);
というかんじです。
0420デフォルトの名無しさん
2005/06/10(金) 16:13:02MS的には非標準でしょ
>>417
C++使ってオブジェクト指向でWindowを扱おうとすると
Window class --> C++ class
Window --> C++ object
のように対応付けるのが普通。というかそうしたくなる。
そうすると問題になるのが、グローバル/staticな関数であるWindowProcで、
これをC++クラスのインスタンスメソッド(メンバ関数)にマップしたい訳。
で、その方法は色々あって、一番単純なのはSetWindowLongでC++クラスの
インスタンスのポインタをWindowに設定してしまうことなのだが、
# こうした方法の例はPlatformSDKのCOMサンプルなどに存在する。
ATLのようなライブラリではもっとマシで効率の良い方法が用いられている。
まあC APIのラッパーで基本的には間違ってないんだけど、
上述したように、よりC++的にWindowingできる仕組み・フレームワークを提供している
という点がまあ一番のポイントじゃないかな。
それと、利便性だけで言うなら、COMコンポーネントを使うのは
MFCやATLを使う方がCで直触りするよりずっと簡単。
COMサポートに関しては、ただの「薄いラッパー」をはるかに超える
充実した機能が提供されてるから。
0421デフォルトの名無しさん
2005/06/10(金) 16:15:59関数が失敗してるんじゃね?
戻り値をチェックしる
0422デフォルトの名無しさん
2005/06/10(金) 16:51:23つまり、フフフがセットされたのではなくて
誰もセットしてないってこと。
>>421の言うように失敗してると思われ
0423デフォルトの名無しさん
2005/06/10(金) 17:22:23VirtualAllocVlmのような64bitAPIは抹殺されたの?
英語版のMSDNに載ってないんだけど。
0424デフォルトの名無しさん
2005/06/10(金) 17:29:380425デフォルトの名無しさん
2005/06/10(金) 17:31:110426デフォルトの名無しさん
2005/06/10(金) 17:52:000427デフォルトの名無しさん
2005/06/10(金) 19:03:17このスレでそれを言っちゃおしまいよ
0428デフォルトの名無しさん
2005/06/10(金) 19:03:56ATL にも MFC にも、APIを適当にラップしたクラスと、
アプリケーションやコンポーネントを作るためのフレームワークとの
両方が入ってます(他にユーティリティ的なものもある)。
API をラップした部分ははっきりいってどうでも良いものが大半なのですが、
フレームワークの方は VC++ の独自拡張構文や VisualStudio の支援とも
有機的に結合していて大変結構役に立ちます。
0429417
2005/06/10(金) 19:24:59Win32APIは今までどおり使いたいけど、
生でAPIを使ってGUIを書くと面倒ですし。
といっても、その辺に転がっているGUIの独自なライブラリだと、
自由にできなくて不満だったり。
WindowsのGUIの仕組みって、もう少し簡単にはできなかったのかな。
といっても、現行のメッセージを投げる以上にいい仕組みが思いつかないへたれですがorz
0431デフォルトの名無しさん
2005/06/10(金) 23:48:220432デフォルトの名無しさん
2005/06/11(土) 00:06:430433デフォルトの名無しさん
2005/06/11(土) 01:15:560434デフォルトの名無しさん
2005/06/11(土) 01:18:000435デフォルトの名無しさん
2005/06/11(土) 01:24:040436デフォルトの名無しさん
2005/06/11(土) 01:24:050437デフォルトの名無しさん
2005/06/11(土) 01:24:590438デフォルトの名無しさん
2005/06/11(土) 02:00:02人それぞれ
0439デフォルトの名無しさん
2005/06/11(土) 02:02:34IEやMicrosoft Excelが自分で組めたら達人か?
カーネル書くとかは、Windowsプログラミングとはいえないような気がするな
0440デフォルトの名無しさん
2005/06/11(土) 02:10:45初心者の質問に
迅速かつ丁寧に答えられるようになったらマスターだぜъ( ゚ー^)
0441デフォルトの名無しさん
2005/06/11(土) 02:52:050442デフォルトの名無しさん
2005/06/11(土) 05:21:09これはページ属性のR/Wビット(PTE-b1)を0にしているからだと思うんですが、このビットは486以降の機能だと本に書いてありました。(アスキー出版局「はじめて読む486」P.308)
Windows95や以前のWindowsNTでは386(SX)が最低スペックですよね?
だとするとそうしたマシンではこの機能が実現されてなかった、というわけなんでしょうか・・・?(どのページも書き込めてしまったのか!?)
誰か、386で95やNTを動かしてみた、あるいは現在動かしている、という方、いらっしゃいますかね?
ご存じの方、お教え下さい。
0443デフォルトの名無しさん
2005/06/11(土) 08:18:27スクロールバーを付けていると、水平スクロールバーの
上にステータスバーが表示されてしまいます。
ステータスバーをウィンドウの1番下に表示したいのですが
なにかいい方法はないでしょうか。
0444デフォルトの名無しさん
2005/06/11(土) 08:40:11その子ウィンドウにスクロールバーをつける。
0445デフォルトの名無しさん
2005/06/11(土) 11:12:42スレタイ嫁
0446デフォルトの名無しさん
2005/06/11(土) 12:23:52「質問箱」ですよね。だからここで質問してるのです。
0447デフォルトの名無しさん
2005/06/11(土) 12:45:080448デフォルトの名無しさん
2005/06/11(土) 13:09:34というか他に該当スレ思いつかん
分かるのがいるかどうかは別として
386SXじゃ95はおろか3.1でも実用にならないしなぁ
0449デフォルトの名無しさん
2005/06/11(土) 16:17:33ビットシフトはなんの役に立つのでしょうか?
0450デフォルトの名無しさん
2005/06/11(土) 16:19:230451デフォルトの名無しさん
2005/06/11(土) 16:43:20リソースにあるビットマップファイルをLoadBitmapで読み込むのはわかりますが、
ファイルとしてある.bmpを読み込みHBITMAPへ格納するための手順がわかりません。
簡単で構いませんので、使用するAPIを教えていただけ無いでしょうか。
後は私が調べます。
よろしくお願いいたします。
0452デフォルトの名無しさん
2005/06/11(土) 16:45:250453デフォルトの名無しさん
2005/06/11(土) 16:46:58LoadImage()でLR_LOADFROMFILE指定
0454デフォルトの名無しさん
2005/06/11(土) 16:52:130455デフォルトの名無しさん
2005/06/11(土) 16:55:170456デフォルトの名無しさん
2005/06/11(土) 17:16:48付けようと思えば付けれる
0457デフォルトの名無しさん
2005/06/11(土) 17:31:160458デフォルトの名無しさん
2005/06/11(土) 17:44:00よくやるな
0459デフォルトの名無しさん
2005/06/11(土) 20:19:51是非使いたいのですが。
0460デフォルトの名無しさん
2005/06/11(土) 20:30:45ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_rebar.asp
0461デフォルトの名無しさん
2005/06/11(土) 21:57:59助かりました。
ありがとうございます。
0462デフォルトの名無しさん
2005/06/11(土) 21:59:31それはOfficeで使われてるツールバーとは違いますよ。
0463デフォルトの名無しさん
2005/06/11(土) 22:22:240464デフォルトの名無しさん
2005/06/11(土) 22:57:04Windowsの場合は、ウィンドウでデフォルトが白、ダイアログで灰色ですよね。
0465デフォルトの名無しさん
2005/06/11(土) 23:04:07http://wisdom.sakura.ne.jp/system/winapi/win32/win60.html
0467デフォルトの名無しさん
2005/06/11(土) 23:43:27そのソフトを閉じるときタマに反応が返ってこなくなりOS(XP)の動作もおかしく
なってしまいます。
原因はスレッドのシグナル待ちが考えられるけどそれ以外に原因が思いつきません。
メモリーはリークはしていません。
誰かアドバイスください。
0468デフォルトの名無しさん
2005/06/11(土) 23:45:44そのスレッドのシグナル待ちをどうにかしろよとしか言えない。
0469デフォルトの名無しさん
2005/06/11(土) 23:45:59ソース晒せ
0470デフォルトの名無しさん
2005/06/11(土) 23:46:16諦めろ
0471デフォルトの名無しさん
2005/06/12(日) 00:21:55http://www.bcgsoft.com/bcgcontrolbar.htm
こんなのあるぐらいだから、されてねーんじゃね?
0472デフォルトの名無しさん
2005/06/12(日) 00:54:46デバッグ実行すれば、どこで制御が返って来なくなるかわかるだろ。
0473デフォルトの名無しさん
2005/06/12(日) 01:23:34GetMessageが-1返してるとか
0474デフォルトの名無しさん
2005/06/12(日) 04:47:420475デフォルトの名無しさん
2005/06/12(日) 08:21:32オーナードロー
0476デフォルトの名無しさん
2005/06/12(日) 08:21:55BIOS依存。確かAPIでは無い。
0477デフォルトの名無しさん
2005/06/12(日) 08:43:36VSを適用したときのReBarコントロールの背景を描画したいので
すが、OpenThemeDataでReBarのテーマハンドルを取得し、
DrawThemeBackgroundでRP_BANDを指定したのですが何も描画
されませんでした。
CodeProjectから
ttp://www.codeproject.com/w2k/xpvisualstyle.asp
このようなものをみつけ、RebarのRP_BANDを調べてみたのです
が、どのテーマを調べても何もセットされないことがほとんどでした。
他のパーツなのかと思い、一致するものを探したのですがどうも
同じパーツを見つける事ができません。
Rebar(もしくはToolbar)コントロールの背景はどうすれば描画できる
のでしょうか?
0478デフォルトの名無しさん
2005/06/12(日) 09:56:410479デフォルトの名無しさん
2005/06/12(日) 12:35:090480デフォルトの名無しさん
2005/06/12(日) 13:48:170481デフォルトの名無しさん
2005/06/12(日) 14:09:55このような不具合ってご存知な人はいますか?
case WM_NOTIFY:
{
MSGFILTER *pmf;
TV_DISPINFO *ptv_disp;
int x,y;
if (wp==11000) {
ptv_disp=(TV_DISPINFO *)lp;
if(ptv_disp->hdr.code==TVN_ENDLABELEDIT)
{
tree.SetItem(&ptv_disp->item);
}
}
}
void CWinMyLapTree::SetItem(TV_ITEM* pItem)
{
TreeView_SetItem(m_hWnd,pItem);
}
0482デフォルトの名無しさん
2005/06/12(日) 14:10:3111000というのは、リストビューのIDです
0483デフォルトの名無しさん
2005/06/12(日) 14:12:150484デフォルトの各無しさん
2005/06/12(日) 14:38:58知らねーけど
0485デフォルトの名無しさん
2005/06/12(日) 15:28:32今すぐにwinAPIでのゲーム作りにとりかかるのって無謀ですかね?
0486483
2005/06/12(日) 15:32:40現在、原因究明中です。
0487デフォルトの名無しさん
2005/06/12(日) 15:32:55無謀だと思う。
平仮名覚えたてで小説書こうとするようなもんだ。
0488デフォルトの名無しさん
2005/06/12(日) 15:33:34目標あるのはいいことだ ただ自分の予定してる期間の100倍はかかると思っとけ
ゲームの内容にもよるが
0489デフォルトの名無しさん
2005/06/12(日) 15:44:50やはり無謀でしたか・・・。HPとかみてもチンプンカンプンなわけだ。
出直してまいります。
0490デフォルトの名無しさん
2005/06/12(日) 15:46:310491デフォルトの名無しさん
2005/06/12(日) 16:11:42MFCもマスターしてるし。
今から.NET覚えるつもり。
ただ、そんな俺も、18歳の時に始めてMacintoshのToolboxAPIを見て、「なんじゃこれ!???」と驚いたものです。
あまりの難しさに。
0492デフォルトの名無しさん
2005/06/12(日) 16:13:470493デフォルトの名無しさん
2005/06/12(日) 16:45:21チラシの裏
0494483
2005/06/12(日) 17:13:46ツリービューのエディタ部分って、編集が終わったらマウスのクリックじゃないと終われないんだな。
キーボードのリターンキーだと無反応だわ。
0495デフォルトの名無しさん
2005/06/12(日) 17:19:200496デフォルトの名無しさん
2005/06/12(日) 17:27:21その質問最近どこかで見かけたな
0497デフォルトの名無しさん
2005/06/12(日) 17:28:14>>478
0498デフォルトの名無しさん
2005/06/12(日) 17:55:010499デフォルトの名無しさん
2005/06/12(日) 18:10:57PTEのR/Wビットなら386の時代からあるよ。
その本が変なこと書いてるか、喪前さんが誤読してるかのどっちかだろ。
あと、CPU特化話だから機械語なんとかってスレで聞いた方がいいかと。
>>491
難しいっていうか、面倒臭いんだよな。
WinAPIからDefWindowProc()を取り除いた風って言えばわかりやすいかな。
0500デフォルトの名無しさん
2005/06/12(日) 18:16:160501デフォルトの名無しさん
2005/06/12(日) 18:18:20はじめて読む486にはこう書いてるよ。
>リードライトビット
>0ならば、特権レベル3では書き込みできない
>0ならば、CR0レジスタのWPビットが1のとき、特権レベル2以下でも書き込みできない(486のみ)
要するに一番下の行に書いてあることが\486のみだっていうことだ
0502デフォルトの名無しさん
2005/06/12(日) 19:16:08グローバルフックでWM_APP+100までのメッセージを受け取って
キー入力があったこと自体は判別できたのですがWM_CHARの
wparamのように入力されたキーを判別する方法がわかりません。教えてくださいおねがいします
0503デフォルトの名無しさん
2005/06/12(日) 19:27:44だから、WM_APPでキー入力の判定が出来るというのが、そもそも
そのアプリケーション特有の動作。
0504デフォルトの名無しさん
2005/06/12(日) 22:39:040505デフォルトの名無しさん
2005/06/12(日) 22:41:221クロック命令を1秒間繰り返し実行して、実行した回数を取得する。
0506デフォルトの名無しさん
2005/06/12(日) 22:48:13ビットマップを描き消しするためにInvalidateRectを使っています。
しかし、頻繁に使っているせいでもありますが、ちらつきがよく目立ちます。
なんとかならないでしょうか?
0507デフォルトの名無しさん
2005/06/12(日) 22:49:460508デフォルトの名無しさん
2005/06/12(日) 22:50:21つ DirectX
0509デフォルトの名無しさん
2005/06/12(日) 22:51:48EDITTEXTの部分は
EDITTEXT IDC_EDIT,59,7,60,13,ES_AUTOHSCROLL
となっております。
0510477
2005/06/12(日) 22:56:37CodeProjectのほうでも同じような質問が出てるっぽいし解決法
なしでFAなのかな。
0511デフォルトの名無しさん
2005/06/12(日) 23:00:10おお、早々とありがとうございます。
0512デフォルトの名無しさん
2005/06/12(日) 23:02:40fMaskにRBBIM_BACKGROUNDじゃだめなのか?
0513477
2005/06/12(日) 23:15:54すみません、たびたび質問で申し訳ないのですがfMaskとは
どの関数のパラメータでしょうか。
DrawThemeBackground(Ex)には見あたらなかったもので。
0514デフォルトの名無しさん
2005/06/12(日) 23:22:25通常のrebarと勘違いしてた。
0516デフォルトの名無しさん
2005/06/13(月) 03:39:27範囲指定などで始点と終点を結ぶ点線の矩形を表示していますが
あれはどのように実装すればいいのでしょうか?
MFC使用不可でおねがいします。
0517デフォルトの名無しさん
2005/06/13(月) 05:30:25普通にAPIで矩形描画すりゃいいじゃん
0518デフォルトの名無しさん
2005/06/13(月) 09:01:270519デフォルトの名無しさん
2005/06/13(月) 09:18:16CreatePen()で破線作って書いたり消したり。
ちらつきが気になるならバックバッファでも作る。
XORペンってなかったっけーとおもったけど見あたらなかった。
漏れなんか勘違いしてるのかな・・・。
>>518
猫でものとおりにやってないor猫と環境が違う。
0520デフォルトの名無しさん
2005/06/13(月) 09:43:53"hookdll.h"とか存在しないファイルをインクルードしてるたり
ソースの途中にコメント入れてたりして激しくむかついてくるんだが
0521デフォルトの名無しさん
2005/06/13(月) 10:00:340522デフォルトの名無しさん
2005/06/13(月) 14:17:03Win32のソース集だけと思っておけ。
0523デフォルトの名無しさん
2005/06/13(月) 15:11:57SetROP2(hdc,R2_COPYPEN);
SetROP2(hdc,R2_XORPEN);
0524デフォルトの名無しさん
2005/06/13(月) 15:55:010525デフォルトの名無しさん
2005/06/13(月) 15:56:33MFCのソースを見ると、リージョンを駆使した挙句にPatBltしてる。
MFC使用不可でもソース見てみたら?
0526デフォルトの名無しさん
2005/06/13(月) 16:16:25帰れ
0527デフォルトの名無しさん
2005/06/13(月) 16:56:14ソレダ すっきりした。ありがとん。
0528デフォルトの名無しさん
2005/06/13(月) 17:22:28どお、できそう?
0529デフォルトの名無しさん
2005/06/13(月) 17:33:150530デフォルトの名無しさん
2005/06/13(月) 17:40:300531デフォルトの名無しさん
2005/06/13(月) 17:48:070532デフォルトの名無しさん
2005/06/13(月) 17:51:060533デフォルトの名無しさん
2005/06/13(月) 18:06:05だいじょうぶ?
0534デフォルトの名無しさん
2005/06/13(月) 18:08:240535デフォルトの名無しさん
2005/06/13(月) 18:19:560536デフォルトの名無しさん
2005/06/13(月) 18:25:540537デフォルトの名無しさん
2005/06/13(月) 18:28:370538デフォルトの名無しさん
2005/06/13(月) 19:41:08Win32の場合ですと、どのようにするのでしょうか。
おそらく、SendMessageで何かしらのメッセージを送っていると思いますが。
0539デフォルトの名無しさん
2005/06/13(月) 19:46:25やっぱそうなる?
他に意見のある方いますか?
0540デフォルトの名無しさん
2005/06/13(月) 19:49:12しかし、ダイアログを移動させると表示されます。これはどうしてでしょうか?
ttp://sakots.pekori.jp/cgi/sn/src/up22563.png
0541デフォルトの名無しさん
2005/06/13(月) 19:50:520542デフォルトの名無しさん
2005/06/13(月) 19:51:58イベントキューに入れるのではなく、即メッセージ処理をしてくれるのはどっちのほうでしょうか?
0543デフォルトの名無しさん
2005/06/13(月) 19:54:00MSDN読めば分かるだろう
0544デフォルトの名無しさん
2005/06/13(月) 19:57:11「即メッセージ処理」させるAPIなんてない。
どっちもメッセージキューに入れられる。
0545デフォルトの名無しさん
2005/06/13(月) 20:20:20どうもうまくいきません。
何に問題があるのでしょうか?
void CMyRichEdit::SetFontSelected(char* pFontName,int fontSize)
{
HDC hDC=::GetDC(m_hWnd);
CHARFORMAT cfm;
memset(&cfm,0,sizeof(CHARFORMAT));
cfm.cbSize=sizeof(CHARFORMAT);
cfm.dwMask=CFM_CHARSET|CFM_FACE|CFM_SIZE;
cfm.bCharSet=SHIFTJIS_CHARSET;
cfm.dwEffects=0;
cfm.yHeight=MulDiv(fontSize,GetDeviceCaps(hDC,LOGPIXELSY),-1440);
strcpy(cfm.szFaceName,pFontName);
::SendMessage(m_hWnd,EM_SETCHARFORMAT,SCF_SELECTION | SCF_WORD,(LPARAM)&cfm);
::ReleaseDC(m_hWnd,hDC);
}
0546545
2005/06/13(月) 20:26:39もう一点ですが、リッチエディットに設定されてる文字数を得るにはどうすればいいのでしょうか?
0547デフォルトの名無しさん
2005/06/13(月) 21:20:10GetWindowTextLengthは駄目?
0548デフォルトの名無しさん
2005/06/13(月) 21:51:46どうやって実現しているのか興味があるが、分からん。
0549デフォルトの名無しさん
2005/06/13(月) 23:53:38絵だけ見ても判らんが、描画順序の問題じゃないの?
EDITTEXTを描画した後に同じ座標に重なっている別のWindowをSW_HIDEしているとか。
0550デフォルトの名無しさん
2005/06/14(火) 00:07:30え
0551デフォルトの名無しさん
2005/06/14(火) 00:17:04PostMessageは投げたら即帰ってくる
どっちもメッセージキューにはいることに変わりは無い。
0552デフォルトの名無しさん
2005/06/14(火) 00:23:10そうじゃない説明よく見るけどなぁ。ほんとう?
0553デフォルトの名無しさん
2005/06/14(火) 00:23:32指定されたウィンドウが、呼び出し側スレッドが作成したものであった場合、
そのウィンドウのウィンドウプロシージャがサブルーチンとして即座に呼び
出されます。指定されたウィンドウが、他のスレッドが作成したものであっ
た場合、システムはそのスレッドへの切り替えを行い、次に適切なウィンド
ウプロシージャを呼び出します。複数のスレッド間で送信されたメッセージ
が処理されるのは、受信側スレッドがメッセージ取得コードを実行したとき
だけです。送信側スレッドは、受信側スレッドがメッセージの処理を終える
まで、ブロックされます(待機状態になります)。
0554デフォルトの名無しさん
2005/06/14(火) 00:26:10大嘘つきだな
0555デフォルトの名無しさん
2005/06/14(火) 00:37:43手元にないからわからん。
でも
GetQueueStatus
には
> QS_SENDMESSAGE
> A message sent by another thread or application is in the queue.
これって関係ないかな?
0556デフォルトの名無しさん
2005/06/14(火) 01:03:59どうなる?
0557デフォルトの名無しさん
2005/06/14(火) 01:08:33Windowsメッセージなら、キューにたまるだけだろ
0558デフォルトの名無しさん
2005/06/14(火) 01:08:57そうか?>>551であってると思うけど
0559デフォルトの名無しさん
2005/06/14(火) 01:13:07GetMessageやPeekMessageで取れるってこと?
0560デフォルトの名無しさん
2005/06/14(火) 01:17:13別スレッドからの時はよく分からんけど。
0561デフォルトの名無しさん
2005/06/14(火) 01:26:14ああなるほど、そっちか。
確かにそうだな。
0562デフォルトの名無しさん
2005/06/14(火) 01:28:540563デフォルトの名無しさん
2005/06/14(火) 02:07:38スレッドDが作成したウィンドウに、スレッドDまたはSからSendMessage()するとしよう。
(1)スレッドDからSendMessage()した場合
メッセージキューを介さずに直接WinProc()が(関数コールで)呼ばれる。これは皆も知っての通り。
(2)スレッドSからSendMessage()した場合
メッセージはスレッドDの「SendMessage専用メッセージキュー」に一旦溜まり、
スレッドDの「プロキシ的何か」がWinProc()を(関数コールで)呼ぶ。
つまり、Post用のキューとは独立して、他スレッドからのSendMessage用のキューがあって、
「プロキシ的何か」がスレッドSの代わりにスレッドD内でWinProc()を呼び出す仕組み。
>>556
上の例だと、スレッドDの「SendMessage専用メッセージキュー」に溜まって順次処理される。
ちなみに、「プロキシ的何か」ってのはGet/Peek/WaitMessage()なんだけど、
内部的に、暗黙的に処理してるので、外部からはその様子はうかがえない。
なので>>559はNO。
0564デフォルトの名無しさん
2005/06/14(火) 02:18:38「SendMessage専用メッセージキュー」を処理して、何食わぬ顔で
通常のメッセージキューの内容をもって返ってくると言うことか。
0565477
2005/06/14(火) 03:22:31HTHEME hTheme = OpenThemeData(hWnd, "REBAR");
if ( hTheme != NULL) {
DrawThemeBackground(hTheme, hDC, 0, 0, pRect, NULL);
}
ってな感じのコードで描画することが出来ました。
0とかあのリスト見たら指定しちゃいけないっぽい感じがするよ…。
何はともあれやりたいことは実現できちゃったということで。
レスいただいた方ありがとうございました。
0566デフォルトの名無しさん
2005/06/14(火) 07:39:25知らなかったー。役に立つ情報さんくす。
0567デフォルトの名無しさん
2005/06/14(火) 08:12:04グローバルフック中、Postしたメッセージが
再度フックにかからない理由がようやく分かった気がする
俺からも�d
0568デフォルトの名無しさん
2005/06/14(火) 09:09:34寝てる間に遅レスになってしまったが
何らかの方法で出来ることが分かった
Thinks
0569デフォルトの名無しさん
2005/06/14(火) 09:18:49プロセスを殺さないと削除できないのね。
でも、ヒントになったよ。
0570デフォルトの名無しさん
2005/06/14(火) 09:26:00タブコントロールでマルチライン表示をした場合ですが、
複数行あるタブの下側にタブ別のウィンドウを表示させますが、
その複数行の一番下の行の位置を得るにはどうすればいいのでしょうか?
今までシングルラインでタブを作ってまして、
タブごとのウィンドウを表示させるにはシングルライン(一行)の後なので、必ず決まった位置になるので
ウィンドウ表示もできますが、
マルチラインタブの場合、動的に複数行になることもあるので、
一番下の行の位置がどこになるのかがわからないので、どのように調べればいいのか教えていただきたいのですが。
0571デフォルトの名無しさん
2005/06/14(火) 12:50:29TCM_ADJUSTRECT。きめうちだと、タブ下側とかにつけたとき困るだろ。
0573デフォルトの名無しさん
2005/06/14(火) 18:59:28int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
なんで__stdcallついてないんだろう。
0574デフォルトの名無しさん
2005/06/14(火) 19:54:53俺はPSDKでは呼び出し規約は省略されているのが当たり前だと思っていたけど。
0575デフォルトの名無しさん
2005/06/14(火) 20:13:05548のページにはハンドルだけ閉じる機能があるって書いてるけどできないの?
0576デフォルトの名無しさん
2005/06/14(火) 21:22:40プライオリティが高い方をスレッドA、低いほうをスレッドBとします。このとき、
1. B は A よりプライオリティが低いのでプロセッサタイムを全くもらえない。
2. B は A よりプライオリティが低いので A と比べて少しのプロセッサタイム
しかもらえない。
どちらが正しいのでしょうか。
0577デフォルトの名無しさん
2005/06/14(火) 21:41:03B よりも優先度(スレッドのプライオリティとプロセスのプライオリティクラス、
およびプライオリティブーストの状態によって決まる)が高いスレッドが一つも
実行可能な状態でなければ、Bも実行される。
ただし、Bが何かのリソースをロックして、Aがそのロックの取得待ちになったような
場合には、Bには一時的にAと同じ優先度が与えられる。
また、ウィンドウメッセージを受け取った、Wait状態が解除され(てReadyになっ)た、
というような何気ないことでもプライオリティはブーストされるということにも注意。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/scheduling_priorities.asp
0578デフォルトの名無しさん
2005/06/14(火) 21:42:18Aが処理している間は一切Bには時間は与えられない。
AがヘヴィループをまわしているならBは動かないし
IO待ちなんかでAが寝ればその間(だけ)Bが動く。
Aが起きたらその瞬間Bは止まる。
0579デフォルトの名無しさん
2005/06/14(火) 21:56:15lazy writeのスレッドとかも動けないからデータあぼーん
これもAdvanced Windowsに出てたような
0580デフォルトの名無しさん
2005/06/14(火) 22:18:34ありがとうございます。間違った先入観をもっていたので、スケジューリングが理解
できずにいました。ちょうど>>577のリンク先のドキュメントを読んでいたところです。
0581デフォルトの名無しさん
2005/06/14(火) 22:45:54呼ばれたら処理がおもくなってしまいます。メッセージキューを削除みたいなことは可能でしょうか?
0582デフォルトの名無しさん
2005/06/14(火) 22:48:40よくわからんがSendMessageにしたらだめ?
0583デフォルトの名無しさん
2005/06/14(火) 23:01:49PeekMessageでPM_REMOVEを指定
0584デフォルトの名無しさん
2005/06/14(火) 23:05:58ほかのメッセージが空になるまで
アプリケーションキューの中にあって、
しかも複数きたら、ひとつにまとめる、
と、PSDKの付属文書に書いてあり、てすと
>メッセージキューを削除みたいな
PeekMessage()の最後の引数がなんかそんなみたいな
0585デフォルトの名無しさん
2005/06/14(火) 23:18:510586デフォルトの名無しさん
2005/06/14(火) 23:41:55アプリケーションキューをバイパスして直接hWndのWndProcにおくる、
とかいてあります
0587デフォルトの名無しさん
2005/06/14(火) 23:44:02それをSendすると言う。
0588デフォルトの名無しさん
2005/06/14(火) 23:49:30WndProcにはとどかないのでせうか?
すいません、もうねます。
0589デフォルトの名無しさん
2005/06/14(火) 23:54:25キューにたまってるWM_PAINTを出して
UpdateなリージョンをSendMessage()の出した
WM_PAINTのとmergeして、
おくる、
ということなのか、と
おもいますたほんとにねます
0590デフォルトの名無しさん
2005/06/14(火) 23:56:52ユーザーから出したいときにはInvalidateRect/Rgn
0591デフォルトの名無しさん
2005/06/15(水) 00:03:04Windowsの場合はAが処理中であっても、Bも動くよ。
あまりにもCPU時間が与えられていないスレッドに対しても
動的なブーストがかかる。
0592デフォルトの名無しさん
2005/06/15(水) 00:20:05PostMessageで良いんなら、InvalidateRect でも構わんのじゃないか?
0593デフォルトの名無しさん
2005/06/15(水) 01:19:28ああ、そのへんもAdvanced Windowsに書いてあったなあ。
0594デフォルトの名無しさん
2005/06/15(水) 06:51:04で普通と低で試してみたら低の方は数秒に一度1,2回カウンタが上がるな。
一応終了できるようにメッセージループを回してあげようって事なのか。
0595デフォルトの名無しさん
2005/06/15(水) 09:47:51ランダムにブーストするのかな?
0596デフォルトの名無しさん
2005/06/15(水) 09:55:550597デフォルトの名無しさん
2005/06/15(水) 10:17:58削除されたときに出るメッセージってありますか?
0598デフォルトの名無しさん
2005/06/15(水) 10:30:430599デフォルトの名無しさん
2005/06/15(水) 12:01:420600デフォルトの名無しさん
2005/06/15(水) 12:19:14ReadDirectoryChangesW()
0601597
2005/06/15(水) 12:52:05ReadDirectoryChangesW()
こういうのは知ってますが
さる事情で使えないので
もしメッセージが出てるなら
それを横取りしたいのですが
0602デフォルトの名無しさん
2005/06/15(水) 13:06:350603デフォルトの名無しさん
2005/06/15(水) 13:26:38どの程度ちゃんととれるのか知らないけど
SHChangeNotifyRegister
0604デフォルトの名無しさん
2005/06/15(水) 13:27:030605デフォルトの名無しさん
2005/06/15(水) 15:14:240606デフォルトの名無しさん
2005/06/15(水) 17:26:25それはそうと、IRPはメッセージと言ってもよくね?
0607デフォルトの名無しさん
2005/06/15(水) 17:55:33http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotifyregister.asp
0608デフォルトの名無しさん
2005/06/15(水) 19:46:42メッセージっぽいと言って言えないこともないとは思うけど、
デバドラはさすがにスレ違いな希ガス。
でも、ファイル単位で変更通知あげてくれるフィルタドライバなんてあったら便利そうね。
0609デフォルトの名無しさん
2005/06/15(水) 19:50:27どうしたらよいのでしょうか
0610デフォルトの名無しさん
2005/06/15(水) 20:08:430611576
2005/06/15(水) 22:01:54>>書いてないですが、576の質問の中の「プライオリティ」はブースト後
のプライオリティ(ダイナミックプライオリティ)です。
それでもスレッドBはプロセッサタイムを(ほんの少しでも)もらえますか?
0612デフォルトの名無しさん
2005/06/15(水) 22:03:210613576
2005/06/15(水) 22:24:44この実験では、次の(A)なのか(B)なのか分かりません。
(A) プライオリティが低い方のスレッドにブーストがかかってそのスレッドの
プライオリティが高くなり、そのためそのスレッドが実行された。
(B) プライオリティが低いほうのスレッドが低いまま実行された。
「(B)みたいなことがありえるのか?」が質問です。つまり「プライオリティ」
の根本的な意味が知りたいのです。
0614デフォルトの名無しさん
2005/06/15(水) 22:40:31検出しているんですけど、リッチエディットの背景を黒色に
していると、URLの文字も黒くなって見えなくなってしまいます。
これの対処方法ってないでしょうか?
ぐぐってみたところ、同様の問題の報告は見つかりましたが
対処法はみつかりませんでした。
0615デフォルトの名無しさん
2005/06/15(水) 22:52:33Aだといっても納得しないんだろうな・・・
0616デフォルトの名無しさん
2005/06/15(水) 23:30:38http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/scheduling_priorities.asp
ブーストを考えなければ、レディでプライオリティの高いスレッドが常に
実行される。
0617デフォルトの名無しさん
2005/06/15(水) 23:46:39現状、シリアル通信のCreateFileをフックするアプリケーションを作成しています。
C++で作成したWindowsAPIのCreateFileを行うテストプログラムは、
フックできています。
そこで、質問なのですが、VBで作成した
通信制御用ActiveXのMSCommでのPortOpenを行うプログラムを
フックさせたいのですが、上手くいきません。
ActiveXも最終的には、WindowsAPIをコールしているのかなと思って、
いたのですが、全くフックできず、途方にくれています。
そもそも前提であるWindowsAPIをコールしていると思っている、
発想が間違えているのでしょうか?
0618デフォルトの名無しさん
2005/06/16(木) 00:01:410619デフォルトの名無しさん
2005/06/16(木) 00:07:560620デフォルトの名無しさん
2005/06/16(木) 00:15:05OpenFileとかCOMポートを開きうる命令は他にもある。
>>618
API HOOKでぐぐってみ?
0621デフォルトの名無しさん
2005/06/16(木) 00:24:45ぐぐりました。とても勉強になりました。620さんありがとう。
フックっつーかハックのような感じですね スレ汚しすまん
0622デフォルトの名無しさん
2005/06/16(木) 00:33:25いいえフックです
0623デフォルトの名無しさん
2005/06/16(木) 00:52:190624デフォルトの名無しさん
2005/06/16(木) 00:55:270625デフォルトの名無しさん
2005/06/16(木) 00:57:20そもそもリファレンス以外は翻訳がないわけだが
0626デフォルトの名無しさん
2005/06/16(木) 00:58:47Q. スティックですか?
A. いいえステッキです
0627デフォルトの名無しさん
2005/06/16(木) 01:30:080628デフォルトの名無しさん
2005/06/16(木) 02:29:11スレ違いなら誘導おねがいしますm(__)m
OleLoadPictureを使って読み込んだGIFファイルを
ウィンドウに表示しようとしたのですが、GIF画像の
タテヨコのサイズによっては画像が一部ズレて表示されます。
例えば240x240のgif画像なら正しく表示されるのに238x240だと少しズレます。
こういうものなのでしょうか?
具体的にはIPictureを使って以下のようにしています
OLE_XSIZE_HIMETRIC stWidth;
OLE_YSIZE_HIMETRIC stHeight;
iPicture->get_Width( &stWidth );
iPicture->get_Height( &stHeight );
HDC hdc = GetDC( hWnd );
long w = MulDiv( stWidth, GetDeviceCaps( hdc, LOGPIXELSX ), 2540 );
long h = MulDiv( stHeight, GetDeviceCaps( hdc, LOGPIXELSY ), 2540 );
iPicture->Render( hdc, 0, 0, w, h, 0, stHeight, stWidth, -stHeight, NULL );
ネット上に落ちているプログラムも上記となんら変りないので
ちっとも原因が分かりません。
ご存知の方、ご教授お願いします。
0629デフォルトの名無しさん
2005/06/16(木) 02:41:52だから何?
0630デフォルトの名無しさん
2005/06/16(木) 05:30:53GIFを使おうとしたことが無いんでよくわからんが、
1ラインの総バイト数が4の倍数になるようにパディングがしてあったりしないか?
BMPはばっちりされてるんだが、GIFはどうなんだろか
0631630
2005/06/16(木) 05:32:020632デフォルトの名無しさん
2005/06/16(木) 05:37:05何を貼ればいいのかと
0633デフォルトの名無しさん
2005/06/16(木) 09:52:03どうも、本家のが、間違ってる、もよう。
~~~
nCount
文字列の文字数を指定します。
このパラメータに -1 を指定すると、
lpString パラメータは NULL で終わる文字列へのポインタであると見なされます。
この場合、文字列の長さは自動的に計算されます。
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_drawtext.asp
nCount
[in] Specifies the length of the string.
<...>
If nCount is 1, then
the lpString parameter is assumed to be a pointer to a null-terminated string and
DrawText computes the character count automatically.
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_0odw.asp
0634614
2005/06/16(木) 10:48:58リッチエディットコントロールの背景色をRGB(27,27,27)では大丈夫なのですが
RGB(26,26,26)にした途端に、リンクの色が黒になってしまいました。
また、RGB(26,27,27)は大丈夫で、RGB(26,26,27)は駄目でした。
青成分を0に固定した場合はRGB(40,40,0)まで問題なく、RGB(39,40,0)で黒く
なりました。
コントロールの背景色ではなく、部分的に文字列の背景色だけを設定した場合も
同様の現象が起こっています。
この件に関して、対処法などの情報があれば教えてください。
0635デフォルトの名無しさん
2005/06/16(木) 11:12:43背景を余り暗くしない(R+G+B>=80)か、リンク文字色も自分で設定するしかないんでね?
0636デフォルトの名無しさん
2005/06/16(木) 12:14:25DC側を SetMapMode で MM_HIMETRIC にして、w と h を使わずに
HIMETRIC のままでサイズ指定するとどうなりますか?
0637デフォルトの名無しさん
2005/06/16(木) 14:41:03ダイアログやメッセージボックスがなぜか表示できなくなりました。
しかし、不思議なことにAltキーを押すと表示されます。
ダイアログボックスやメッセージボックスが表示されない以外におかしい所はありません。
もしわかる人がいたら教えてください。
0638デフォルトの名無しさん
2005/06/16(木) 15:27:08質問ですが、
VC++6でアプリケーションを作ると、Windows2000風なGUIデザインになりますが、
その際、.exeがあるフォルダにマニフェストファイルを入れれば、XPスタイルになりますが、
そのマニフェストファイルを入れなくても、.exeだけでXPスタイルになる方法はありますか?
0639デフォルトの名無しさん
2005/06/16(木) 15:37:14最後の行だけで十分な質問だな
リソースとしてマニフェストやらをもたせるとよいぞ
0640デフォルトの名無しさん
2005/06/16(木) 15:40:46http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwxp/htm/xptheming.asp
0641デフォルトの名無しさん
2005/06/16(木) 16:32:01CreateToolbarEx で作成した ToolBar は XPスタイル(Luna)にすると
ボタンの上で マウスの 左右の 両方のボタンをおすとハングしてしまうので
サブクラス化して、右クリックを無効にしましょう!
さくらエディタ、FFFTP でハングを体験してください。
0642デフォルトの名無しさん
2005/06/16(木) 17:09:18Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.
スレッド 0xC0C 終了、終了コード 0 (0x0)。
とエラーが出た場合、何に問題があるのでしょうか。
特定するのが難しいです。
一応、表面上はアプリケーションは正常終了しているようですが。
0643デフォルトの名無しさん
2005/06/16(木) 17:10:50MFCを使いたくなりました。
その場合は、ソースコードに何を追加すればいいのでしょうか。
0644デフォルトの名無しさん
2005/06/16(木) 18:17:25そのメッセージの通りなんだが。
つかスレ違い。
0645デフォルトの名無しさん
2005/06/16(木) 19:16:15m_hWnd=CreateWindowEx(
WS_EX_CLIENTEDGE,
"RICHEDIT",
"",
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE |
WS_VSCROLL|WS_HSCROLL|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
0,0,0,0,
hParentWnd,
(HMENU)10012,
hInst,
NULL);
ウィンドウを作る時に固有のID値を渡しますが、
ウィンドウ作成後にそのIDを変える方法を教えていただきたいのですが、
よろしくお願いいたします。
0646デフォルトの名無しさん
2005/06/16(木) 19:48:00�_
0647デフォルトの名無しさん
2005/06/16(木) 19:54:590648デフォルトの名無しさん
2005/06/16(木) 20:58:550649617
2005/06/16(木) 23:11:33レスありがとうございます。
Openfileも試してみましたが、ダメでした。
もう少しAPI関係の書籍などにあたってみようと思います。
0650デフォルトの名無しさん
2005/06/16(木) 23:22:190651デフォルトの名無しさん
2005/06/16(木) 23:50:11デペンデンシーヲーカーとかで調べるとか
0652デフォルトの名無しさん
2005/06/17(金) 09:08:08なにそれ?
東京ウォーカーみたいなもんか?
0653デフォルトの名無しさん
2005/06/17(金) 09:38:380654デフォルトの名無しさん
2005/06/17(金) 09:53:43つか、SDK入れてれば普通入ってるはずだが。
0655デフォルトの名無しさん
2005/06/17(金) 11:32:45の_T(" ")はL" "と同じくワイド文字を扱うということでよろしいのでしょうか?
0656デフォルトの名無しさん
2005/06/17(金) 11:53:10_UNICODE が定義されてればL" "、されてなければ " "
0657デフォルトの名無しさん
2005/06/17(金) 15:07:47動的に知る方法はありますか?
0658デフォルトの名無しさん
2005/06/17(金) 15:10:37( ・∀・) フポッピー!
(、っiョc)
゙'ー'゙ー'゙
┃┃
┃┃
┃┃ フポッピー!!
/ \ (( )) / \
\ (( )) /
\(( )) /
0659デフォルトの名無しさん
2005/06/17(金) 15:13:12無いよ
0660デフォルトの名無しさん
2005/06/17(金) 15:27:26そこをなんとか
0661デフォルトの名無しさん
2005/06/17(金) 15:35:16実行プログラムの名前変更はどうやればいいのでしょうか?
とあるネトゲで実行プログラム一覧が表示されているみたく、
名前を変更したいのですが・・・
どうかよろしくお願いします。
0662デフォルトの名無しさん
2005/06/17(金) 15:39:130663デフォルトの名無しさん
2005/06/17(金) 16:26:08ウィンドウのサイズを右下のつまみで変更するとウィンドウサイズが変わりますが、
その変更の際、WM_PAINTが呼ばれ再描画がされますが、
ちらつきが激しく、見た目が汚くなります。
おそらく、バックグランドカラーで一旦クライアント領域を消去してから、再描画をしているからちらつくのだと思いますが、
そのちらつきをなくす方法を教えていただきたいのですが。
よろしくお願いいたします。
0664デフォルトの名無しさん
2005/06/17(金) 16:56:22>>506-507
0665デフォルトの名無しさん
2005/06/17(金) 17:13:04WM_PAINTでBUTTONの部分がちらつきます。
BUTTONがある部分の再描画処理をしないようにするにはどうすればいいのでしょうか。
0666デフォルトの名無しさん
2005/06/17(金) 18:12:470667デフォルトの名無しさん
2005/06/17(金) 20:45:39某月某日晴
題 エディット・コントロール
ちょっとややこしめの引数で
コントロールをCreateWindowしたあと
親WndProcでやることは
WM_SIZEでクライアント領域を
コントロールウインドウにぜんぶ割り当てて
WM_SETFOCUSでインプットフォーカスを
コントロールウインドウにぜんぶ割り当てて
WM_COMMANDでエラーをtrapして
MessageBoxで"エラー"とか表示するだけなので
...こんなでできるのね
という感想
しかしたぶんこれは極端な例なのだろう
日記終
0668デフォルトの名無しさん
2005/06/17(金) 22:26:44今、StartServiceを使ってローカルサービスを
起動するプログラムを作っているのですが、
2つの問題があります。
・サービス制御マネージャ(以下、SCM)がロックされていると
エラーになる
・StartServiceを発行する際にSCMがロックされ、
そのタイミングで他のサービスが起動しようとすると、
そのサービスが起動できず、エラーになる
一点目については、QueryServiceStatusなどを
使って待ち合わせることで解決可能ですが、
二点目について解決できません。
ただし、ATLで当該サービスをラップする
サービスアプリケーションを
作るというのは、運用上できません。
この状況で、以下の解決策を考えたのですが、
実験した結果そうだ、というだけで裏付けがないので
どこかにソースがあればご教授いただきたいのですが。
LockServiceDatabaseでSCMをロックしているときに
DOSコマンドのNET STARTを発行すると、
なぜかエラーになりません。
この方法で上記の2点を解決できるでしょうか。
0669デフォルトの名無しさん
2005/06/17(金) 23:41:36ウィンドウのサイズを固定する方法を教えてください
0670デフォルトの名無しさん
2005/06/17(金) 23:46:41WM_SIZINGをとらまえて、LPARAMとして渡されてくるRECT構造体を
修正すれば、そのサイズになるよ。
0671デフォルトの名無しさん
2005/06/17(金) 23:47:350672デフォルトの名無しさん
2005/06/17(金) 23:57:33マウスでドラッグしてウインドウサイズを変更されたくないなら、
ウインドウスタイルにWS_THICKFRAMEを指定しない。
これだけだとシステムの最大化ボタンが有効なままだから、
WS_MAXIMIZEBOXも指定しない。
でもこれだけだと、外部からメッセージ投げられたときとか、ウインドウサイズが変わってしまうんだよね。
というわけで、WM_GETMINMAXINFOを処理する。
0673デフォルトの名無しさん
2005/06/18(土) 00:02:23フロッピドライブにアクセスできなかったら入ってない
フロッピドライブにアクセスできたら入ってる
カリカリうるさいかもしれないが、これでいいじゃないか。
0674デフォルトの名無しさん
2005/06/18(土) 00:07:070675デフォルトの名無しさん
2005/06/18(土) 01:21:57filmtn だったか、HF だったか・・・
FDじゃなかったような木がする。
0676デフォルトの名無しさん
2005/06/18(土) 02:02:075インチ最高
0677デフォルトの名無しさん
2005/06/18(土) 03:05:08http://japanese.joelonsoftware.com/uibook/chapters/8.html
人の素質はベル曲線を描く傾向がある。98%の顧客はテレビが使えるくらいにスマート
かもしれない。70%くらいはWindowsが使える。15%はLinuxを使える。1%はプログラム
が書ける。しかしC++のような言語でプログラムを書くことができるのはほんの0.1%だ。
Microsoft ATLプログラミングが理解できるのは0.01%しかいない(そして彼らは皆、眼
鏡をかけ髭を生やしている)。
0678デフォルトの名無しさん
2005/06/18(土) 03:30:45みんな頭悪いと思われたくないから言わんだけちゃうか。
0679デフォルトの名無しさん
2005/06/18(土) 07:34:42ATL使うこなすために必要な周辺知識が多すぎなだけ。
低レベルすぎて、本当にCOMの全てを理解していないと使いこなせないのよ。
0680デフォルトの名無しさん
2005/06/18(土) 08:34:070681デフォルトの名無しさん
2005/06/18(土) 10:33:47質問があるのですが、
ウィンドウにリバーコントロールを貼り付けたまではいいのですが、
ウィンドウサイズをウィンドウの端をクリックドラッグすることで変える最中に、
リバーのつまみとタイトル文字列の部分が「ちらつく」現象がでてしまいます。
どうしてこうなるのかがわかりません。
リバーのつまみとテストボタンという文字列の部分がちらつく
http://www.geocities.jp/ts_d285/rebar.JPG
ご存知な方がいらっしゃいましたら、教えていただきたいのですが。
よろしくお願い致します。
0682681
2005/06/18(土) 10:37:02ウィンドウサイズ変更中にちらつく現象はまったく見受けられません。
0683デフォルトの名無しさん
2005/06/18(土) 10:46:360684デフォルトの名無しさん
2005/06/18(土) 11:25:30PostMessage()ならどちらも閉じることができました。これはどうしてなのでしょうか?
0685デフォルトの名無しさん
2005/06/18(土) 11:51:17WM_ERASEBKGNDとかかな。
0686681
2005/06/18(土) 12:11:33WM_ERASEBKGNDは親ウィンドウのプロシージャに分岐させてます。
土日をかけて、この問題を解決しようと思ってます。
もちろん私の不手際もあるでしょうから。
何かご存知な方がいらっしゃいましたら、教えていただけると助かります。
よろしくお願いします。
0687681
2005/06/18(土) 12:17:52それ専用のウィンドウプロシージャは設定しませんが、
今リバーにウィンドウプロシージャを設定したら、::SetWindowLong(m_hWnd,GWL_WNDPROC,(long)wndProc);
リバーそのものを描画してくれなくなりました。
コントロールの描画はWindows側でしているのは当然ですが、
その描画はどこでどのイベントで処理してるのでしょうか?
たぶん、リバーのWM_ERASEBKGNDを処理しないようにすれば、
ちらつきはなくなると思うのですが。
0688デフォルトの名無しさん
2005/06/18(土) 12:22:09いや、WM_ERASEBKGNDはレバーの親ウィンドウで処理しなきゃだめ。
FALSEを返せば背景を消去しなくなるんでちらつきはなくなるはず。
0689681
2005/06/18(土) 12:27:59case WM_ERASEBKGND:
return false;
親側でそのようにしてみましたが
まだちらつきます。
いろいろ試して見たいと思います。
0690デフォルトの名無しさん
2005/06/18(土) 12:30:44>>683は試してみたの?
0691681
2005/06/18(土) 12:33:290692デフォルトの名無しさん
2005/06/18(土) 13:00:23まあ、ちらつくっつーかWM_NCPAINT飛び交いまくり、システムが更新しまくりだったら
当然っちゃあ当然なのだろう。嫌ならシステムに渡す前に一時的にリージョンから
テキスト部分除くなりなんなりすればよいかもナー
0693デフォルトの名無しさん
2005/06/18(土) 13:05:510694デフォルトの名無しさん
2005/06/18(土) 13:12:56CS_VREDRAW CS_HREDRAWを取る
0695デフォルトの名無しさん
2005/06/18(土) 13:23:020696デフォルトの名無しさん
2005/06/18(土) 14:27:29どんなコントロールを使用するのでしょうか?
0697デフォルトの名無しさん
2005/06/18(土) 14:36:09エディットコントロール
0698デフォルトの名無しさん
2005/06/18(土) 14:37:40入力した文字列を*や黒丸にするようなコントロールはありませんか?
0699デフォルトの名無しさん
2005/06/18(土) 14:40:450700デフォルトの名無しさん
2005/06/18(土) 14:40:55エディットコントロールのプロパティにそうするのがある。
0701デフォルトの名無しさん
2005/06/18(土) 14:42:300702デフォルトの名無しさん
2005/06/18(土) 14:43:120703デフォルトの名無しさん
2005/06/18(土) 14:48:270704デフォルトの名無しさん
2005/06/18(土) 15:11:18DrawThemeTextを使えばテーマに使用されている効果を使って
描画してくれるようなのですが、そのまま使うとフォントも色もテー
マのものと異なってしまいます。
http://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp
によるとデバイスコンテキストに任意のフォントを追加して呼び出す
ように書いてあったので、GetThemeFontを使いCreateFontIndirect
でフォントを作成、SelectObjectでデバイスコンテキストに割り当てて
みたのですが一向に変化する様子がありません。
たとえばLunaのキャプション文字列はMSUIゴシックに白文字、ボールド
ですが、これと同じようにテキストを描画するには上記の方法で間違って
いるのでしょうか。
よろしくお願いします。
0705デフォルトの名無しさん
2005/06/18(土) 17:10:32NetBiosだめじゃーん。
いや、ただの雑談です。
0706デフォルトの名無しさん
2005/06/18(土) 18:18:37LANケーブルがぬけているのだろうか
if ((hResource =
LoadResource(hInst,
FindResource(hInst, TEXT("HAGE"),
MAKEINTRESOURCE(IDR_HANGE100)))) == NULL) {
MessageBox(NULL, TEXT("ぬるぽ"),
TEXT("ぬるぽ"), MB_ICONERROR);
PostQuitMessage(0);
return 0;
}
0707デフォルトの名無しさん
2005/06/18(土) 18:34:03リモートのMacアドレスが欲しいのか?
0708デフォルトの名無しさん
2005/06/18(土) 18:37:23ケーブル抜いてPC起動するとNetBios系のAPIが全滅なんだよね。
個体差かなぁ。一応、他のPCでもやってみるか。
GetAdaptersInfo()で代用したからいいんだけど。
0709デフォルトの名無しさん
2005/06/18(土) 18:37:27ネットワークケーブル抜けてたら、自分のそういう情報も取得できないような
話は聞いたことある気がする
0710デフォルトの名無しさん
2005/06/18(土) 18:55:40そのような描画をAPIから呼ぶことはできるのでしょうか。
0711デフォルトの名無しさん
2005/06/18(土) 18:58:450712デフォルトの名無しさん
2005/06/18(土) 19:08:29ビジュアルスタイルを使うには>>704。
0713681
2005/06/18(土) 19:53:04リバーを作ると通常はクライアント領域がリバーの下側にオフセットされますが、
何故か知りませんが、リバーを作ってもクライアント領域がリバーの下側に移らず、
リバーとクライアント領域が被さった状態なのでちらつくといったものだと思います。
ただ、なぜリバーを作ってもクライアント領域の範囲が変わらないのか?
もう少し調べてみたいと思います。
0714681
2005/06/18(土) 20:34:540715デフォルトの名無しさん
2005/06/18(土) 20:44:100716デフォルトの名無しさん
2005/06/18(土) 21:06:07え?
レバー(ツールバーやステータスバーも)つけたときは自分でクライアント領域再計算だろ。普通。
それをやって無かったってこと?
0717デフォルトの名無しさん
2005/06/18(土) 21:12:240718デフォルトの名無しさん
2005/06/18(土) 21:17:56サポートされているか、調べる方法ってあるんでしょうか?
あと、サポートされていないAPIを呼び出した場合は、
例外が生成されるんですか?
0719デフォルトの名無しさん
2005/06/18(土) 21:26:30レバーは猫書いた奴の間違いとそれを鵜呑みにしたヴァカ
0720681
2005/06/18(土) 21:31:52ウィンドウスタイルの設定が繊細すぎる
0721デフォルトの名無しさん
2005/06/18(土) 21:33:001. LoadLibraryに失敗→その関数をエクスポートしているDLL自体ない
2. GetProcAddressに失敗→関数がエクスポートされていない
3. 呼び出してみたらERROR_CALL_NOT_IMPLEMENTEDで失敗→実装されていない
/DELAYLOAD付きでリンクすると1.と2.は省略できる。その場合関数がない環境で
呼び出そうとすると例外が発生する
0723704
2005/06/18(土) 21:42:09それとも場違いな質問しちゃったんだろうか…(汗
0724デフォルトの名無しさん
2005/06/18(土) 23:29:14手っ取り早く部分的にどのタイミングで描いてるかソース晒せ
0725704
2005/06/18(土) 23:37:10WM_CREATEでテーマハンドルを
HTHEME hTheme = OpenThemeData(hWnd, "Window");
にて取得しておき(エラーチェック諸々は済んでいます)
WM_PAINTにて
PAINTSTRUCT paint;
HDC hDC = BeginPaint(hWnd, &paint);
RECT rect;
GetClientRect(hWnd, &rect);
DrawThemeText(hTheme, WP_CAPTION, CS_ACTIVE,
L"test", -1,
DT_CENTER | DT_VCENTER | DT_SiNGLELINE, NULL,
&rect);
EndPaint(hWnd, &paint);
というこれだけのプログラムです。
http://www.ascii.co.jp/pb/msdn/article/f21_0041.html#fig0007
に記載されているMSDNマガジンのサンプルコードと大差ないと
思っていますが…。
0726704
2005/06/18(土) 23:39:38正しくは
DrawThemeText(hTheme, hDC, WP_CAPTION, CS_ACTIVE,
L"test", -1,
DT_CENTER | DT_VCENTER | DT_SiNGLELINE, NULL,
&rect);
です。
ぐぐってみたところ
ttp://www.mtakahashi.com/old/06975.html#06964 (たぶん同じ問題っぽい。解決策提示されていない。)
ttp://members.jcom.home.ne.jp/1213687801/cs/windowsforms/theme.html (テキスト描画がおかしい記述あり)
とか日本語資料ではこの辺りを見つけることが出来ました。
0727704
2005/06/19(日) 03:33:02GetThemeFontでLOGFONTを取得し、CreateFontIndirectでフォント
ハンドルを取得、SelectObjectでHDCにフォントハンドルを割り当てて
からDrawThemeTextを実行するとフォントはそれらしくなりました。
(以前は自分のコーディングミスでした)
が、やはり色は黒いままで、
ttp://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.gdi/2004-08/0324.html
と同じような状態です。
SetTextColorでデバイスコンテキストにRGB(255,255,255)を指定しても
白くならないということはSetTextColorはDrawThemeTextに影響を及ぼ
さないって事だし…。
0728デフォルトの名無しさん
2005/06/19(日) 07:12:49毎回再描画してしまうんですが。。。。
ダイアログの生成方法に何か指定があるのでしょうか?
モーダル、モーダレス どっちも効かないんですけど。。。
0729デフォルトの名無しさん
2005/06/19(日) 07:14:110730デフォルトの名無しさん
2005/06/19(日) 11:56:07たしかCS_SAVEBITSはポップアップウィンドウのみ。
0731デフォルトの名無しさん
2005/06/19(日) 13:59:53ディスプレイキャプチャしたいのですが
GetDC,CreadDC("Display"
では、IMEバー、ポップアップのレイヤー等を
拾ってくれません。
なにかよい方法はあるのでしょうか?
0732デフォルトの名無しさん
2005/06/19(日) 15:36:18(動画とマウスカーソル以外)
キャプチャー操作の瞬間に消えてるような。
ためしにタイマーとかで捕ってみては?
0733デフォルトの名無しさん
2005/06/19(日) 15:45:05| _____________ |
| |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| |
| |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| | ザー
| |:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| |
| |::::::::::::::::::::::::::::::::::::;;;;;;;;;;;::::::::::::::| |
| |:::::::::::/ ̄ ̄ ̄`´ `ヽ:::::::| |
| |::::::::::| :ill||||||||||ll: ,-‐‐、l::::::| |
|  ̄ ̄| ||||||||||||||||「しi .l ll ̄ .|
| ̄「 ̄| |||||||||||||||||i ̄川リ ̄| ̄|
|_| ノ |||||||||||||||||| |_|
/ ||||||||||||||||||
/ /||||||||||||||||||
/ ̄/ ̄ |||||||||||||||||
/ / |l|l|l|l|l|l|l|l
/ / |l|l|l|l|l|l|ll
/ ヘJ l|l|l|l|l|l|l
ノ川 ||l||l||ll
【呪いのコピペ】
このレスを見た人は1週間以内に他のスレへコピペしてください。
そうしないと突然ディスプレイからうわなんだおまえやめ
0734デフォルトの名無しさん
2005/06/19(日) 16:17:08ダイアログも最初に出た位置のママ閉じると WM_PAINT は来ないで
勝手に戻ってくれるのですが。。ダイアログを移動すると WM_PAINT が来てしまいます。
ダイアログが出た1回目だけっていう仕様なのでしょうか?
CS_SAVEBITS 自体Win 3.1 の頃の仕様で、今時の Windows では画面上の動きが違うので
移動したらもうダメなのかな?
0735734
2005/06/19(日) 16:25:40http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp
便利ですね! ありがとうございます。
今時 95,98,Me な人はいないですよね(笑) 2000,XP 対応で十分!!
0736デフォルトの名無しさん
2005/06/19(日) 21:10:38win32APIでブロック崩しをつくる為に不可欠な関数を教えてください。
0737デフォルトの名無しさん
2005/06/19(日) 21:10:44IMEを半透明化していませんか?
だったらCAPTUREBLT
0738デフォルトの名無しさん
2005/06/19(日) 21:17:12コンソールプログラムにすればコンソールAPIが要るし、
ウィンドウに出力するのならGDIかGDI+、もちろん基本的なウィンドウの作成もできる必要がある。
それぞれさらにさまざまなアプローチがあるのでブロック崩しには〜が絶対に必要と言えるようなものはない。
0739デフォルトの名無しさん
2005/06/19(日) 21:27:58まあ俺もわからないわけだがな。
0740デフォルトの名無しさん
2005/06/19(日) 21:47:540742デフォルトの名無しさん
2005/06/19(日) 22:20:190743デフォルトの名無しさん
2005/06/19(日) 22:26:33力になってやりたいが無理なんだよな。
誰かわかるやつ助けてやってくれ。
0744デフォルトの名無しさん
2005/06/19(日) 22:35:270745デフォルトの名無しさん
2005/06/19(日) 22:51:560746デフォルトの名無しさん
2005/06/19(日) 23:12:59よくわからんが言ってみただけ
0747デフォルトの名無しさん
2005/06/20(月) 01:23:37GetSystemParametersInfoThema
0748736
2005/06/20(月) 10:59:59例えば
�@ SetPixelV関数で打った点を 玉に見立てる
�@´玉の絵を書いたビットマップを使う
だったら、この後の処理はどうなるでしょうか?
この経路で作ったとしたら、どんな関数が挙げられますか?
手元には、猫でもわかるwindowsプログラミングとmsdnライブラリがあります
0749デフォルトの名無しさん
2005/06/20(月) 11:12:06板違い
ゲ製作技術
http://pc8.2ch.net/gamedev/
てか、つまづく度に聞くという姿勢は改めたほうがヨサゲ
0750デフォルトの名無しさん
2005/06/20(月) 11:37:22別につまづいてないと思うけど
まぁ自分が苦労と時間費やして調べたことをワンレスで解決されたら
おもしろくないわなw
0751デフォルトの名無しさん
2005/06/20(月) 11:41:29http://www.c3.club.kyutech.ac.jp/~sukiyaki/
0752704
2005/06/20(月) 16:25:52別に705さんのせいとか思ってませんよ、ホントに。
質問の仕方が悪かったですか…どうも申し訳ありませんでした。
>>746
テーマのフォントはGetThemeFont(もしくはGetThemeSystemFont)で
取得できることは突き止めました(>>727)。
>>747
PlatformSDKにはご指摘の関数は見つけられませんでした。
もう少し掘り下げて調べてきます。ありがとうございます。
目的
Themeのフォント、色、効果を使ってテキストを描画したい。
(DrawThemeTextが該当すると思われる)
問題点
DrawThemeTextをMSDNのSample通りに記述しても期待した
目的の動作を行わない。
1.フォントの取得 -> GetThemeFontで解決
2.色の取得 -> おそらくGetThemeColorだが必要なのか?
3.DrawThemeTextで描画するとフォントのサイズ、色が一致しない
ということなのですが…、スレ違いとかアドバイス等ご指摘がありまし
たら少しご教授して頂きたかっただけです。申し訳ありませんでした。
0753デフォルトの名無しさん
2005/06/20(月) 18:28:510754デフォルトの名無しさん
2005/06/20(月) 18:32:14WritePrivateProfile○○
0755デフォルトの名無しさん
2005/06/20(月) 18:32:29つか大抵は言語ごとに使いやすいライブラリがあるからそれ使え
0756デフォルトの名無しさん
2005/06/20(月) 18:33:09iniファイルのことなら{Get|Write}PrivateProfile*()
0757デフォルトの名無しさん
2005/06/20(月) 19:35:47>>756
ありがとうございます
0758デフォルトの名無しさん
2005/06/20(月) 20:10:08どうすればいいでしょうか?
0759デフォルトの名無しさん
2005/06/20(月) 20:19:18せっとばかもーど
0760デフォルトの名無しさん
2005/06/20(月) 20:22:230761デフォルトの名無しさん
2005/06/20(月) 21:33:02�dクス
0762デフォルトの名無しさん
2005/06/20(月) 23:13:18もうあきらめろ、ここにはおまえの質問に答えれるやついないぞ。
おまえもそこまでやって無理なら別のアプローチを考えるかMSに
聞くしかないだろ。
0763デフォルトの名無しさん
2005/06/20(月) 23:58:00Advanced Windows 嫁
0764デフォルトの名無しさん
2005/06/21(火) 00:00:21○答えられる
0765デフォルトの名無しさん
2005/06/21(火) 00:55:580766デフォルトの名無しさん
2005/06/21(火) 01:02:13今時「ら抜き言葉」に目くじら立てるなんて。
年がばれますよ。
0767デフォルトの名無しさん
2005/06/21(火) 01:09:390768デフォルトの名無しさん
2005/06/21(火) 01:58:52WM_SETTEXT
0769デフォルトの名無しさん
2005/06/21(火) 05:22:040770デフォルトの名無しさん
2005/06/21(火) 06:26:29あれをばかもーど言うヤツ初めて見た
0771デフォルトの名無しさん
2005/06/21(火) 06:34:17文字コードは内部ではUNICODEを使っているそうですが、
ファイル名やディレクトリ名、クリップボード、main()のargv、
標準入力や標準出力などをプログラムで得ると、
UNICODEで得られるのでしょうか?
2バイト目に¥があって云々という話は 9x 系だけでしょうか?
0772デフォルトの名無しさん
2005/06/21(火) 07:00:59プログラム側もUNICODEに対応していないといけない。
NT系は何でもUNICODEが使えるが、9x系ではAPIにほとんどUNICODEが使えないから。
そこでUNICODEが#defineで定義されているかどうかで切り替える仕組みがあってコンパイル時にどうするかを決められるようになっている。
クリップボードはUNICODE切り替えとは無関係にCF_UNICODETEXTを指定すればいい。UNICODEテキストじゃなくても勝手に変換してくれる。
標準入出力はAPIでやればUNICODEで入ってくる。ほかにもC/C++のワイド文字入出力も使える。
ただしこっちはMBCSで読み込んでからUNICODEに変換するという風になっているので9xでも使える。
0773デフォルトの名無しさん
2005/06/21(火) 07:01:21俺は知らんが、デバッグモードで実際にAPIでも使ってファイル名取得して実データ見てみりゃ判るだろ
0774デフォルトの名無しさん
2005/06/21(火) 07:03:06別に9xでも一旦Unicodeに変換して作業して、終わったらMBCSに戻せばいいだけだよ。
0775デフォルトの名無しさん
2005/06/21(火) 07:49:36心でそう呟きながらコーディングしてますが何か?
0776デフォルトの名無しさん
2005/06/21(火) 09:37:15それを指摘されたからってら抜き表現がどうとか
揚げ足取りして話しを逸らそうとするのはちょっと
格好悪いと思った。
0777デフォルトの名無しさん
2005/06/21(火) 09:58:110778デフォルトの名無しさん
2005/06/21(火) 10:04:200779デフォルトの名無しさん
2005/06/21(火) 10:45:010780デフォルトの名無しさん
2005/06/21(火) 10:52:400781デフォルトの名無しさん
2005/06/21(火) 11:05:460782デフォルトの名無しさん
2005/06/21(火) 11:25:510783デフォルトの名無しさん
2005/06/21(火) 16:12:40WindowFromDC
0784デフォルトの名無しさん
2005/06/21(火) 20:11:07msconfig などをみるとオプションがあるので、APIなどからできないものかと思った次第です。
InitiateSystemShutdown() や ExitWindows() などではオプションもなく、何か方法がないものでしょうか。ターゲットはWindows XPです。
0785デフォルトの名無しさん
2005/06/21(火) 20:26:400786デフォルトの名無しさん
2005/06/21(火) 21:46:29それを自動的にやってくれるライブラリ(MSLU)もあるし
0787デフォルトの名無しさん
2005/06/21(火) 21:53:02お願いします。
0788デフォルトの名無しさん
2005/06/21(火) 22:07:26ウィンドウスタイルにWS_THICKFRAMEやWS_SIZEBOX、そしてWS_MINIMIZEBOXとWS_MAXIMIZEBOXを指定しないことから。
そしてWM_GETMINMAXINFOを処理する。位置も動かしたくなければWM_MOVINGも処理する。
0789771
2005/06/21(火) 22:19:45TCHAR
TEXT()
LoadAccelerators()
などが適切に切り替わる
>>772
にあるように、プログラムがWindowsから
どのように文字コードを受け取るかは
APIで決まる(UNICODEで切り替わる)
ここらへんまではわかったのですが、
リソースファイルやリソースコンパイラは
どうふるまうのでしょうか?
Makefileでは
リソースコンパイラには特にオプションなし
C++コンパイラには -DUNICODE
SJISコードのリソースファイルでは
acc ACCELERATORS DISCARDABLE
{
VK_ESCAPE, 100, VIRTKEY, NOINVERT
}
ソースファイルでは
LoadAcceleraors(hInst, TEXT("acc"))
こうやってmakeしましたが、とりあずうまくいっているっぽいです
リソースコンパイラはUNICODEでリソースを生成するのでしょうか?
0790デフォルトの名無しさん
2005/06/21(火) 22:21:420791デフォルトの名無しさん
2005/06/21(火) 22:23:00わざわざご丁寧に位置の固定までありがとうございます。
0792デフォルトの名無しさん
2005/06/21(火) 22:24:24リソースはUnicodeなのだがLoadAcceleratorsの引数はTCHARで切り替わるようになっているのに注意。
0793デフォルトの名無しさん
2005/06/22(水) 00:41:32ありがとう
0794デフォルトの名無しさん
2005/06/22(水) 01:04:05本筋とは関係ないが、正確に言えばUNICODEでAPIが、
_UNICODEでTEXTマクロ類が切り替わる
0795デフォルトの名無しさん
2005/06/22(水) 01:45:29UNICODEでTEXTが
_UNICODEで_TEXTマクロが切り替わるみたいだけど。
前者はWindows API用で(TEXTマクロも)後者はVC++ランタイム用
0796デフォルトの名無しさん
2005/06/22(水) 01:46:33TEXTと_TEXTを意識して使い分けてる人いますか?
0797デフォルトの名無しさん
2005/06/22(水) 01:58:52なんかこんがらがってきた
0798デフォルトの名無しさん
2005/06/22(水) 02:15:360799デフォルトの名無しさん
2005/06/22(水) 03:41:350800デフォルトの名無しさん
2005/06/22(水) 05:57:19メッセージループの手前で終わるときは、
0で終了するべき、
というのが、ちょっと
if (error)
return EXIT_SUCCESS;
うーん
0801デフォルトの名無しさん
2005/06/22(水) 13:27:23マルチスレッドの各スレッドでGetLastErrorを呼び出します。
複数のスレッドで同時にエラーが発生した場合、GetLastErrorが返す
エラーコードはスレッド単位のものなのですか?
それともプロセス内で発生した一番最後のエラーコードになるのですか?
0802デフォルトの名無しさん
2005/06/22(水) 13:30:540803デフォルトの名無しさん
2005/06/22(水) 13:42:22もう質問してあげない
ぷんぷん
0804デフォルトの名無しさん
2005/06/22(水) 16:49:490805デフォルトの名無しさん
2005/06/22(水) 17:55:48こんなことをしているヘッダもあるから大丈夫。
#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE
#endif
#endif
#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE
#endif
#endif
0806デフォルトの名無しさん
2005/06/24(金) 05:16:310807デフォルトの名無しさん
2005/06/24(金) 06:52:58レジスタを見るとか?
0808デフォルトの名無しさん
2005/06/24(金) 09:23:310809デフォルトの名無しさん
2005/06/24(金) 09:52:27IME半透明の件 ありがとうございました
解決しました
呪いの貞子で気づかず読み飛ばしていました・・・
申し訳ない
0810デフォルトの名無しさん
2005/06/24(金) 10:03:57x86 32bit版Win2K以降。自プロセスならスレッドハンドルとるの楽だろうからWin98でもできるだろ。
エラー処理はてめーでやれ。ポインタとDWORD混合してるのはほっとけ。
void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwHigh, LPDWORD pdwLow)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)dwTIBAddr,
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);
*pdwHigh = dwStackArea[0];
*pdwLow = dwStackArea[1];
}
0811デフォルトの名無しさん
2005/06/24(金) 10:35:28void GetStackArea
(DWORD dwProcessID, DWORD dwThreadID, LPDWORD pdwBase, LPDWORD pdwLimit)
{
typedef HANDLE (WINAPI *OPENTHREAD)(DWORD, BOOL, DWORD);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
HANDLE hThread = OpenThread(
THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, dwThreadID);
CONTEXT ctx = { CONTEXT_SEGMENTS, 0 };
GetThreadContext(hThread, &ctx);
LDT_ENTRY ldt = { 0 };
GetThreadSelectorEntry(hThread, ctx.SegFs, &ldt);
DWORD dwTibPtr= (ldt.HighWord.Bytes.BaseHi << 24)
| (ldt.HighWord.Bytes.BaseMid << 16)
| (ldt.BaseLow) + 0x18;
DWORD dwReadBytes = 0, dwTIBAddr = 0, dwStackArea[2] = { 0, 0 };
ReadProcessMemory(hProcess, (LPBYTE)dwTibPtr,
&dwTIBAddr, sizeof dwTIBAddr, &dwReadBytes);
ReadProcessMemory(hProcess, (LPBYTE)(dwTIBAddr + 4),
dwStackArea, sizeof dwStackArea, &dwReadBytes);
CloseHandle(hThread);
CloseHandle(hProcess);
*pdwBase = dwStackArea[0];
*pdwLimit = dwStackArea[1];
}
0812デフォルトの名無しさん
2005/06/24(金) 10:41:39スタックオーバーフローするリミットがどれだけか知りたい場合は
VirtualQueryEx で MEM_COMMIT されつつ PAGE_NOACCESS 保護の領域探して鯉。
ここらへんはアド嫁
0813デフォルトの名無しさん
2005/06/24(金) 16:15:57非MFCです。
0814デフォルトの名無しさん
2005/06/24(金) 16:59:210815デフォルトの名無しさん
2005/06/24(金) 17:02:42内容の無い骨組みだけのWINDOWSプログラムを見て勉強しておりますが
インスタンスハンドルというのが いまいち分かりません
ハンドルというのはメモリアドレスのポインタなのでしょうか?
それともポインタ以外でも、メモリ上の住所のような数値があるのでしょうか?
0816デフォルトの名無しさん
2005/06/24(金) 17:04:47HANDLEはvoid*のtypedefだが、その内実はさまざまだ。
意味論的にはカーネルメモリなどにある何らかのオブジェクトを指し示すモノ、ということになるが、
それが実際に直接なポインタであるとは限らないし、そう仮定すべきではない。
0817デフォルトの名無しさん
2005/06/24(金) 17:26:46インスタンスハンドルは実行しているEXEを識別するためのものと思えばいい。
0818815
2005/06/24(金) 17:27:00正直、意味論的 とか カーネルメモリ とか オブジェクト とか よく分からなかったのですが
色々ややこしいもので今の段階ではなんとなくこんなもんとだけ覚えて先進む事にします
また質問ですが
return時の TRUE と FALSE についてよく分かりません
C言語を勉強していた時、return 0;で終わると正常な終了。return 0以外で終わると不正な終了
と書いて有りました。
APIを勉強していると TRUEは1 FALSEは0 と書いて有りました。
で、 return TRUE は正常な終了。 return FALSE は不正な終了っぽい文脈を見つけました。
return TRUE は正常?? TRUEは1だから return 1;と同じだから 不正???
っと混乱しております、助けていただけると助かります
0819815
2005/06/24(金) 17:30:060820デフォルトの名無しさん
2005/06/24(金) 17:30:40return 0;が正常ってのはmain()のことじゃね?
0821デフォルトの名無しさん
2005/06/24(金) 17:36:29型に騙されるな(w
0822デフォルトの名無しさん
2005/06/24(金) 17:41:43main()は0が正常だが他は0以外が正常となってる場合がほとんど。
俺の関数は0やNULLが異常、1やポインタやハンドルが正常ということにしてるけど。
0823デフォルトの名無しさん
2005/06/24(金) 17:45:13まぁ、BOOLとかboolでTRUE/trueが失敗って言われたら蹴るが。
0824デフォルトの名無しさん
2005/06/24(金) 17:47:570825デフォルトの名無しさん
2005/06/24(金) 17:56:140826デフォルトの名無しさん
2005/06/24(金) 18:01:560827815
2005/06/24(金) 18:07:24また質問させてください
BOOL型についてよく分かりません
GetMessage関数の際、GetMessage関数の戻り値がBOOL型になっております
BOOL型とは0か1の型だと思うのですが
GetMessage関数は関数が失敗したときに-1が返りますよね
これが分かりません。
本には、win16APIの時との互換性がどうこう書いてますが
そもそもBOOL型が-1を返せるということは、int,char,long等の基本データ形と違い
typedefで作った形とは、後からプログラムを見やすくしたり作り直したりしやすくする
ための物で、BOOL型は0か1を入れるのを推薦の形ということで
-1どころか 100とかまで 実際に入れれる範囲は広めにできている物なのでしょうか?
説明下手っぽく分かりにくいですが、宜しくお願いします
0828デフォルトの名無しさん
2005/06/24(金) 18:10:440829デフォルトの名無しさん
2005/06/24(金) 18:12:430830デフォルトの名無しさん
2005/06/24(金) 18:16:110831デフォルトの名無しさん
2005/06/24(金) 18:19:50でも仕方がないのでGetMessageで-1の場合のエラー処理を書かざるを得ない
0832黒沢明「夢」風に
2005/06/24(金) 18:23:42BOOL value;
for(value=0;value < 100;value++){
0833デフォルトの名無しさん
2005/06/24(金) 18:32:04=信用性高いがわざわざそれ使う意味がない
0と1の二つを入れる上で最小限の領域だけを準備したBOOL
=信用性低いがそれなりの用途に使えば速度面でメリットがある
0834デフォルトの名無しさん
2005/06/24(金) 18:48:05ウィンドウのタイトルバーの高さを得るにはどうすればいいでしょうか?
OverlappedとToolWindowでは高さが異なります。
よろしくお願いいたします。
0835834
2005/06/24(金) 18:51:550836デフォルトの名無しさん
2005/06/24(金) 21:07:28AdjustWindowRectの結果から逆算とか。
>>835
ToolWindowのキャプションの高さがとれない。
0837デフォルトの名無しさん
2005/06/24(金) 21:24:340838デフォルトの名無しさん
2005/06/24(金) 23:02:580839デフォルトの名無しさん
2005/06/25(土) 00:37:23ありがとう!
早速使わせていただきマス<・∀・)
0840デフォルトの名無しさん
2005/06/25(土) 07:11:47DeviceIoControl()を使うのだと思いますが、MSDNで調べると
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_deviceiocontrol.htm
>各制御コードの詳細情報については、各デバイスのドキュメントを参照してください。
となっています。どこのそのドキュメントはあるのでしょうか・・・?
あと、サンプルコードがあればご紹介いただけないでしょうか・・・?
0841デフォルトの名無しさん
2005/06/25(土) 07:25:49使わない。開いたらファイルのように読み書きするだけ
0842デフォルトの名無しさん
2005/06/25(土) 08:24:56それができるのはNT系だけ。
0843デフォルトの名無しさん
2005/06/25(土) 08:27:15http://www.vector.co.jp/soft/win95/util/se130037.html
0844デフォルトの名無しさん
2005/06/25(土) 09:57:27GetClientRectとClientToScreenとか
0845デフォルトの名無しさん
2005/06/25(土) 14:30:55何かよいAPIないでしょうか?
0846デフォルトの名無しさん
2005/06/25(土) 14:43:330847デフォルトの名無しさん
2005/06/25(土) 18:52:08知らんけどWNetOpenEnumあたりから始めてみる?
0848デフォルトの名無しさん
2005/06/25(土) 22:02:06最大化やウィンドウのリサイズを禁止するにはどうすればいいんでしょうか?
最小化はそのまま使えるようにしたいのですが…
0849デフォルトの名無しさん
2005/06/25(土) 22:05:53CreateWindow(Ex)を呼ぶときにWS_MAXIMIZEBOXやWS_THICKFRAMEを指定しなければ良いだけ。
0850840
2005/06/25(土) 22:18:16みなさん、どうもありがとうございます。m(_ _)m
私はWin98(1st)です。無料版BCC++を使っています。
まず、最初にCreateFile()のMSDNの説明通りにドライブを開いて見ようとしましたが、エラーで開けません。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createfile.htm
<<x.c>>
#include <windows.h>
#include <stdio.h>
void main(){
HANDLE hDrive;
hDrive = CreateFileA("\\.\C:", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
printf("hDrive = %08X\n", hDrive);
if (hDrive == INVALID_HANDLE_VALUE){
printf("error\n");
exit(-1);
}
printf("normal\n");
}
NT系でないからでは、と思うのですが、MSDNの説明だと、
>Windows 95 では、上記の形式で文字列を指定すると、CreateFile 関数はエラーを返します。代わりに、次の手順に従ってください。
>dwCreationDistribution パラメータで、OPEN_EXISTING を指定しなければなりません。
>フロッピーディスクや、ハードディスクのパーティションを開く場合、dwShareMode パラメータで FILE_SHARE_WRITE フラグを指定しなければなりません。
と、開けるようなことが書いてあるのですが、これは違うのでしょうか?
0851840
2005/06/25(土) 22:19:56843さん、いいものをどうもありがとうございました。
<<main.c>>
#include <windows.h>
#include <stdio.h>
#include "diskio.h"
#define BUF_SIZE (0x200 * 8)
BYTE buf[BUF_SIZE];
DWORD const nDrive = 2; // 'C:'
DWORD const dwStartSector = 0;
WORD const wSectors = 1;
void main(){
HANDLE hVWin32;
hVWin32 = OpenVWin32();
if (hVWin32 == NULL){
printf("error: OpenVWin32()\n");
exit(-1);
}
ABSDiskRead(hVWin32, nDrive, dwStartSector, wSectors, buf);
printf("label = \"%8s\"\n", buf+3);
CloseVWin32(hVWin32);
}
<<ビルド法>>
bcc32 main.c diskio.c
0852840
2005/06/25(土) 22:20:47しかし、"\\\\.\\vwin32"というのは何なのでしょうか・・・
regs.reg_EAX = 0x7305;
とか、
VWIN32_DIOC_DOS_INT25
というのを見ると、これはまるっきり16ビットDOSインターフェースなのですが、この方法が一番良い方法なんでしょうか・・・?
純粋な32ビットプロテクトモード・インターフェース風な手法はないのでしょうか?
0853デフォルトの名無しさん
2005/06/25(土) 22:32:04"\\\\.\\vwin32"はVWin32というVxDの指定。
他にもいくつかやり方はあるがどれもこんな感じ
http://web.archive.org/web/20040216212849/http://tech.millto.net/~morry/vwin32/adio/index.html#OSR2
0854デフォルトの名無しさん
2005/06/25(土) 22:40:32Win9xは純粋な32ビットOSじゃないからそんなものはない。
純粋な32ビットOSであるNTにはある(>>850)。
0855デフォルトの名無しさん
2005/06/25(土) 23:27:04ありがとうございました。
0856デフォルトの名無しさん
2005/06/26(日) 01:52:47Win98ということだから今回は関係ないが、"\\.\C:"じゃなくて"\\\\.\\C:"だ。
Cでは\は特別な意味を持つことに注意。
0857デフォルトの名無しさん
2005/06/26(日) 08:23:11その矩形の座標を配列に記憶(複数個)。
MW_MOUSEMOVE時に、
PtInRect()で矩形の外か中かで
SetCursor()を使ってマウスカーソルを
切り替えています。
円の数が増えるたびに反応が鈍くなって
カーソルがちらつきます。
矩形の検索がまずいんだと思いますが
いい方法はないでしょうか。
0858デフォルトの名無しさん
2005/06/26(日) 09:26:17MoveWindow(m_hWnd,0,0,772,450);
RECT rect;
GetClientRect(&rect);
MoveWindowで幅を772とした後、GetClientRectでRECT値を取り出したところ、rect.rightが749と指定した「772」とは違う値になります。
これはどういうことなのでしょうか?
MoveWindowは内部で何かしらの理由で数値を修正したりするのでしょうか?
よろしくお願いいたします。
0859858
2005/06/26(日) 09:27:18は
GetClientRect(m_hWnd,&rect);
と修正します。
0860デフォルトの名無しさん
2005/06/26(日) 09:35:44つ GetWindowRect
0861デフォルトの名無しさん
2005/06/26(日) 09:40:41ウィンドウの構造を勉強しておいで
0862デフォルトの名無しさん
2005/06/26(日) 09:54:48だったらリージョンにしちまえよ PtInRegionな これで一発だ (円が増えるたびにリージョン更新な
ちらつきは毎回描画してんのか?変化があったときだけ書けばよろし
>>858 スクリーン座標とクライアント座標というものがある。
基点(0,0)となる位置が異なる。この基点のズレは自分で調整しる
0863デフォルトの名無しさん
2005/06/26(日) 09:57:28ウィンドウにパラメータのようなものを渡すことはできませんか?
0864858
2005/06/26(日) 10:01:14どうやらクライアント領域にはスクロールバーが含まれないため、その分「差」が生じたみたいです。
スクリーン座標から幅を得たら、スクロールバーも含まれる値が得られました。
リッチエディットにおいて、クライアント領域はエディタ部分だけということを理解してませんでした。
スクロールバーも含まれると思ってましたので。
皆さんありがとうございました。
0865デフォルトの名無しさん
2005/06/26(日) 10:12:250866858
2005/06/26(日) 10:13:37クラス設計をしてまして、結構ややこしいですね。
0867デフォルトの名無しさん
2005/06/26(日) 10:15:492bitなり8bitのビットマップでも用意してヒット領域塗って、カーソル座標部分の色で判定すればいいんでない?
削除した場合は配列から再計算
0868デフォルトの名無しさん
2005/06/26(日) 10:16:23WM_CREATEが呼ばれる前じゃ、HWNDも分からないじゃないか。
SetWindowLongを呼べるわけ無いだろ。
0869デフォルトの名無しさん
2005/06/26(日) 10:18:54それが呼ばれる前、つまりウィンドウが作成される前に何をできると思っているのか・・・
0870デフォルトの名無しさん
2005/06/26(日) 11:00:40ツリーならWC_TREEVIEWみたいな
0873デフォルトの名無しさん
2005/06/26(日) 12:02:10GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount);
0874デフォルトの名無しさん
2005/06/26(日) 12:05:380876デフォルトの名無しさん
2005/06/26(日) 14:14:590877デフォルトの名無しさん
2005/06/26(日) 14:23:56GetParent()?
0878デフォルトの名無しさん
2005/06/26(日) 14:31:41ねーよそんなAPI
0879デフォルトの名無しさん
2005/06/26(日) 14:37:08http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getparent.asp?frame=true
0880デフォルトの名無しさん
2005/06/26(日) 15:05:41それはあくまで自分の親を取得するだけだ
一番頭と決まったわけではない
0881876
2005/06/26(日) 15:19:56NULLが返るまでループを繰り返して、一番頭を得られるようになりました。
どうもです。
0882デフォルトの名無しさん
2005/06/26(日) 15:20:080883デフォルトの名無しさん
2005/06/26(日) 15:29:220884デフォルトの名無しさん
2005/06/26(日) 17:14:260885デフォルトの名無しさん
2005/06/26(日) 20:27:13デスクトップは親として扱わんだろ
0886デフォルトの名無しさん
2005/06/26(日) 21:31:070887デフォルトの名無しさん
2005/06/27(月) 00:46:42ボタンを押すとメッセージボックスが2回立て続けにポップアップします。
なぜこのような現象が起きるのか分かりません。どのように対処すれば良いのでしょうか?
コンパイラはBCCです。
0888デフォルトの名無しさん
2005/06/27(月) 00:49:430889デフォルトの名無しさん
2005/06/27(月) 00:59:18エスパーな漏れがおまいさんの悩み事を解決してやろう。
うむ、今の君に必要なのはずばり、「break」と見た!
0890887
2005/06/27(月) 01:38:070891887
2005/06/27(月) 02:57:42リソーススクリプトについての理解がまだ不十分なのですが、
リソーススクリプトに関する詳細な日本語のドキュメントがあれば教えて下さい。
0892デフォルトの名無しさん
2005/06/27(月) 03:19:41> 日本語の
ここでまず無理
0893デフォルトの名無しさん
2005/06/27(月) 05:18:01クレクレ厨が
0894デフォルトの名無しさん
2005/06/27(月) 10:09:510895デフォルトの名無しさん
2005/06/27(月) 11:08:33WM_NCCREATE は使えないか?
0896デフォルトの名無しさん
2005/06/27(月) 11:10:40リッチエディットの下側のスクロール部分が描画されないという不具合がなぜか発生します。
右側のスクロールバーは表示されるのですが、
このような不具合を御存知な方はいらっしゃいますか?
0897デフォルトの名無しさん
NGNG思いつくのは
・メッセージをフックしている。
・上にラベルなどが重なっている。
・縦幅が大きすぎて親からはみ出してる。
・単に水平スクロールのスタイルが指定されていない。
0898デフォルトの名無しさん
2005/06/28(火) 11:26:530899デフォルトの名無しさん
2005/06/28(火) 18:26:220900デフォルトの名無しさん
2005/06/28(火) 18:47:34ウィンドウを所有するのはプロセスではなく、スレッドなのでEnumThreadWindows()ならある。
0901デフォルトの名無しさん
2005/06/28(火) 19:20:18さらっと見た感じみあたらないのですが・・
0902デフォルトの名無しさん
2005/06/28(火) 19:38:360903デフォルトの名無しさん
2005/06/28(火) 19:50:48スナップショットでオーナープロセスは特定できるみたいなので
それでなんとかなりそうです。さんくす。
0904デフォルトの名無しさん
2005/06/28(火) 20:10:21それは呼び出す側が指定するんじゃないのか?
0905デフォルトの名無しさん
2005/06/28(火) 20:24:34LoadImageの引数にタイプの指定があるのになぜそんなことが必要なのだ?
0906デフォルトの名無しさん
2005/06/28(火) 20:44:20SetPriorityClass
0907デフォルトの名無しさん
2005/06/28(火) 20:47:34SleepにAPIフックかけてSleepに意味をなさなくさせる
0908901
2005/06/28(火) 20:59:16HANDLE値がわたされるだけなので・・
よって、HANDLE値を元に元データが何であるかを判別する方法があればよいなと
いうことでして・・
0909901
2005/06/28(火) 21:19:11BMPに関する記述はあるんですがICONはなにも記述されていないような・・
0910デフォルトの名無しさん
2005/06/28(火) 21:28:08GetIconInfo、GetCursorInfo、GetBitmap(GetObject) のどれかでは
エラーが出ないだろうって事で。
0911デフォルトの名無しさん
2005/06/28(火) 22:16:33LoadImageに倣って種別も引数として受け取るようにしようとかいう考えは出てこんのか?
0913デフォルトの名無しさん
2005/06/28(火) 22:25:390915デフォルトの名無しさん
2005/06/28(火) 22:36:10どうすりゃいいの?
例えば、c++なら、「Q」のwm_keydownなら、wparam00000051 lparam00100001
なんだけど、
C#で、PostMessage(hWnd, WM_KEYDOWN, new IntPtr(0x00000051),new IntPtr(0x00100001))といれてもエラーになります。
ディルインポートはちゃんとやってます。
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
0916デフォルトの名無しさん
2005/06/28(火) 23:01:150917915
2005/06/28(火) 23:44:25これでできました。どうも基本が分かっていないようで、おさわがせしました。
0918デフォルトの名無しさん
2005/06/28(火) 23:48:01タスクトレイにプログラムを常駐させて
表示させてあるアイコンを右クリックすると
ポップアップメニューを表示するプログラムを
作成しています。
ポップアップメニューを表示するところまではできたのですが、
選択されずにその他の領域(デスクトップ等)がクリックされた時
表示されたポップアップメニューが出たままになっています。
この時にポップアップメニューを消したいのですが
どなたか方法を教えて下さい。
case WM_RBUTTONDOWN:
u = TrackPopupMenu(hPopUp, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
PostMessage(hWnd, WM_SYSCOMMAND, u, NULL);
return 0;
WinXPpro、VC6++ です。
0919デフォルトの名無しさん
2005/06/29(水) 00:45:39調べたところ、pdh.h関連でパフォーマンス測定ができることがわかりました。
PdhEnumObjectItemsで全プロセスのインスタンスのリストを取得し、カウンタに登録し、と
いうところまではわかったのですが、取得したインスタンス名からプロセスIDを取得する
方法がわかりません。どうかよろしくおねがいします。
0920デフォルトの名無しさん
2005/06/29(水) 01:01:37TrackPopupMenuのまえにSetForegroundWindowをすれ
0921デフォルトの名無しさん
2005/06/29(水) 01:11:18エンターキーが押されたときに、文字列を読んで消す。
ということをやりたいのですが。
(IRCクライアントとかメッセンジャークライアントなどチャットクライアントで、改行したときに発言するような感じで入力させたい)
WM_KEYUPがVK_RETURNで飛んできたとき、ということにすると、
IME開いていて変換をエンターで確定したときも、文字列を読んでしまいます。
どうするのが一般的なんでしょうか?
0922デフォルトの名無しさん
2005/06/29(水) 01:17:52ディフォルトボタンを用意しておいて、そっちのイベントで処理したら?
1行Editだと、Enterキーはスルーされてディフォルトボタンが反応すると思うけど。
#当方MFC屋なので見当違いだったら失礼。
0923デフォルトの名無しさん
2005/06/29(水) 01:19:13見当違いではないと思ふ
0924921
2005/06/29(水) 01:26:27「ディフォルトボタン」ってMFC固有の機能か何かでしょうか?
0925デフォルトの名無しさん
2005/06/29(水) 01:32:13BS_DEFPUSHBUTTON
0926デフォルトの名無しさん
2005/06/29(水) 01:37:00エディットにES_WANTRETURNがついてなければ
[Enter]キーはデフォルトボタンを押したことになる。
0927921
2005/06/29(水) 01:40:58でもこれってダイアログじゃないとだめとか書いてあるような気がするんですが。
0928デフォルトの名無しさん
2005/06/29(水) 01:47:07そんな気もする
0929921
2005/06/29(水) 02:02:53EDITをマルチラインにして、(見かけ上は一行)
親にWM_COMMANDがEN_VSCROLLで飛んできたときを捕まえるようにしました。
0930デフォルトの名無しさん
2005/06/29(水) 02:48:460931921
2005/06/29(水) 03:25:420932デフォルトの名無しさん
2005/06/29(水) 03:44:58で行ける気がするのだが
0933921
2005/06/29(水) 04:00:05×VK_KEYUP
○WM_KEYUPのVK_RETURN
寝ぼけているみたいだOrz
>>932
そういう方法もあるんですか。
どうも、その方法も試してみます。
0934デフォルトの名無しさん
2005/06/29(水) 04:03:300935デフォルトの名無しさん
2005/06/29(水) 05:26:52/* じっけん */
void jikken(void) {
HDC hdc;
HWND hwnd;
int xLength, yPos;
int i, decr;
hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
hwnd = GetDesktopWindow();
xLength = GetDeviceCaps(hdc, HORZRES);
yPos = (GetDeviceCaps(hdc, VERTRES)) >> 1;
decr = xLength >> 6;
for (i = xLength; i >= 0; i -= decr) {
TextOut(hdc, i, yPos, TEXT("orz "), 5);
UpdateWindow(hwnd);
Sleep(100);
TextOut(hdc, i, yPos, TEXT(" "), 5);
}
DeleteDC(hdc);
}
int WINAPI WinMain( 略 ) {
jikken();
return FALSE
}
0936デフォルトの名無しさん
2005/06/29(水) 07:14:57笑うところですか?
0937デフォルトの名無しさん
2005/06/29(水) 07:46:080938デフォルトの名無しさん
2005/06/29(水) 07:58:250939純一郎
2005/06/29(水) 09:42:590940デフォルトの名無しさん
2005/06/29(水) 10:08:57CreateFileでハンドルを作り、ファイルをReadしようとしたんですが、
「読み込み専用ファイル」がなぜか読み込まれません。
CreateFileの引数に何かをセットすればいいと思うのですが、
何をセットすればいいのでしょうか?
よろしくお願いいたします。
0941デフォルトの名無しさん
2005/06/29(水) 10:27:28それ、CreateFileは成功してるのか?
0942デフォルトの名無しさん
2005/06/29(水) 10:28:15>「読み込み専用ファイル」がなぜか読み込まれません。
どこで失敗してるのか調べる。
GetLastErrorの値が得られる場合はそれも調べる。
0943デフォルトの名無しさん
2005/06/29(水) 12:04:02メッセージ処理で対応したいなら
WM_IME_STARTCOMPOSITION
WM_IME_ENDCOMPOSITION:
この二つのメッセージでIMEが変換中かわかる
0944940
2005/06/29(水) 18:49:53ご返答助かります。
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pCh,
0,
NULL);
によると、「アクセスが拒否されました。」と出ます。
ただ、このファイルは読み取り専用となっております。
もう少し突き詰めてみたいと思います。
0945デフォルトの名無しさん
2005/06/29(水) 18:58:33CreateFileはどんな引数を渡している?
0946940
2005/06/29(水) 19:09:51くだらない質問ですいませんでした。
ありがとうございました。
0947デフォルトの名無しさん
2005/06/29(水) 19:10:370948デフォルトの名無しさん
2005/06/29(水) 19:13:47CreateCompatibleDC()で取得したメモリDCにいったん描画してBitBlt()で転送すればちらつきが少なく描画が出来るらしいですが、
それで大丈夫でしょうか。
よろしくお願いします。
0949デフォルトの名無しさん
2005/06/29(水) 19:20:20それで大丈夫でしょう
0950948
2005/06/29(水) 19:21:45ありがとうございます、試してみます
0951デフォルトの名無しさん
2005/06/29(水) 19:49:310952デフォルトの名無しさん
2005/06/29(水) 20:34:13Win32APIを使う=フェラーリを運転する
0953デフォルトの名無しさん
NGNG何を知りたいんだ?SetTextColor使えばいいじゃん。
0954デフォルトの名無しさん
2005/06/29(水) 21:02:10コンソールアプリならSetConsoleTextAttribute()とか。
0955デフォルトの名無しさん
2005/06/30(木) 03:16:21ありがとうございます。
0956デフォルトの名無しさん
2005/06/30(木) 04:07:02SetViewPortExtEx() on MM_ISOTROPIC
が、むつかしいのですが、
以下であってるでしょうか?
1:
ViewPort(0,0) 画面左上
ViewPort(そのときのクライアント領域サイズ in デバイスピクセル) 画面左下
これらはぴくりとも動かない
2:
SetWindowExtExで指定された
論理ユニット数をおさめるのにつかう
ViewPortのデバイスピクセル数を指定。
このときy軸の方向などが逆だと、引数が負数になる
以上で スケール率 =
デバイスピクセル数 / 論理ユニット数 (on 同一物理サイズ内)
が設定される。
3:
論理座標(x,y)からWindowのOrgの座標(x,y)をひいて
幅と高さの論理ユニット数を求め、
それにスケール率をかけて
さらにViewPortのOrgを加算することで
指定された論理座標が適切なデバイス座標(固定)
にマップされる。
4:
論理ユニットの一ユニットあたりの
物理的な幅と高さが同一になるように
Windowsが調整してくれる。
0957デフォルトの名無しさん
2005/06/30(木) 04:35:55なんか違うような・・・
0958902
2005/06/30(木) 04:54:530959デフォルトの名無しさん
2005/06/30(木) 07:24:48InvalideteRect()で矩形の領域を再描写したとき矩形の範囲を
ペン幅が超えているので、はみ出ている部分が描写されません。
ペンの幅をみこして領域を描写するしかないのでしょうか。
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
2005/06/30(木) 08:23:440962デフォルトの名無しさん
2005/06/30(木) 11:08:44質問があります。
1)リッチエディットの親をタブコントロールとして作ったのですが、右クリックのポップアップメニューで編集機能をするようにしたのですが、
WM_COMMANDがタブコントロールのほうにSendされているようで、イベント処理ができません。
通常コモンコントロールはウィンドウプロシージャを指定しないので、WM_COMMAND処理ができなくなってしまます。
また、ウィンドウプロシージャをSetWindowLongでタブコントロールに指定したら、今度はタブコントロールが描画されなくなってしまいます。
タブコントロールを親とし、またタブコントロールからWM_COMMANDを得られるようにするためにはどうすればいいのでしょうか?
2)今ウィンドウが表示されているかどうかが確認できるAPIはありますでしょうか。
よろしくお願いいたします。
0963962
2005/06/30(木) 11:10:060964デフォルトの名無しさん
2005/06/30(木) 12:14:15タブコントロールをつくるときに
p = GetWindowLong(hWndtbctrl, GWL_WNDPROC);
してから
SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などして
oreproc内でWM_COMMANDのうち
notification_codeとctrlIDの一致するものだけ処理して
あとは
CallWindowProc(p, ....)
とか?
0965デフォルトの名無しさん
2005/06/30(木) 12:18:34もとのwndprocのアドレスは
p = SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);
などでpにとれる、もよう
0966962
2005/06/30(木) 12:32:08ご返答いただき助かります。
COMBOBOXやLISTやTABなどに、SetWindowLong(hWndtbctrl, GWL_WNDPROC, oreproc);をしてウィンドウプロシージャを設定すると、
コントロールの描画がされなくなるのですが、
独自に用意したウィンドウプロシージャをコントロールにSetしても、
コントロールを描画してくれる方法・手段を教えていただきたいのですが。
コントロールを描画するための何か(API)をWindows内部で呼び出していると思われますが。
0967デフォルトの名無しさん
2005/06/30(木) 12:51:41サブクラス化
0968デフォルトの名無しさん
2005/06/30(木) 13:20:08その方法が >>964 氏が説明しているサブクラス化だよ。最後に CallWindowProc() を呼ぶところがミソ。
で、そもそも >>962 の1)だけど、
�@ リッチエディットを、WM_COMMAND を処理させたいウィンドウの子として作成
�A SetParent() でリッチエディットの親をタブコントロールに変更
じゃだめかしら?(そういう意図じゃなかったんならスマソ)
0969デフォルトの名無しさん
2005/06/30(木) 13:48:10なんつーか一連の手順って感じで説明してないし関数名とかポンポン
あげてるだけだしwwwこの手の質問に対しては「サブクラス化」
ほとんどこれだけwwwwマジワロスwwwwwwたぶんわざとやってんだと思うけどwww
0970デフォルトの名無しさん
2005/06/30(木) 13:50:360971デフォルトの名無しさん
2005/06/30(木) 13:56:24おまけに日本語の説明ド下手wwww書いてる本人ですら根本的にわかってないもようwwwwwまぁ糞スレだからどうでもいいけどww
0972デフォルトの名無しさん
2005/06/30(木) 14:05:130973デフォルトの名無しさん
2005/06/30(木) 16:13:00プリンター出力でもやっているのかな?
私はこんな順番で呼んでいます。 X,Y は適当に(笑)
SetWindowOrgEx(hdc, 0,0, NULL);
SetMapMode(hdc , MM_ISOTROPIC);
SetWindowExtEx(hdc, , ,NULL);
// Viewport は、左上基点の座標系: Yを - で Window 座標を反転
SetViewportExtEx(hdc, , , NULL);
// ココを移動して 窓を移動する
SetViewportOrgEx(hdc, , , NULL);
0974959
2005/06/30(木) 18:15:37>>961
>>960
>>961
ありがとうござます。
こんなペンのスタイルがあったなんて...。
単純なことを見落としていました。
_| ̄|○
0975デフォルトの名無しさん
2005/06/30(木) 18:32:18取りはずし要求が出たとき
WM_DEVICECHANGE
というメッセージを飛ぶのでこれをつかまえて
イベントが
DBT_DEVICEQUERYREMOVE
かどうかを検査すれば,それだとわかります.
ところがどのドライヴ文字をわりあてていた装置かを
取得する方法がわかりません.
何か方法はありますか?
0976デフォルトの名無しさん
2005/06/30(木) 18:44:56歯抜けがありゃそこだし、歯抜けがなけりゃ未使用の中の一番若いやつだ
0977デフォルトの名無しさん
2005/06/30(木) 19:49:23プログラムを作りたいのですが、
どんな資料を集めればよいでしょうか?
DDKとか知らないとダメでしょうか?
0978デフォルトの名無しさん
2005/06/30(木) 20:15:590979デフォルトの名無しさん
2005/06/30(木) 20:19:520980デフォルトの名無しさん
2005/06/30(木) 20:51:450981デフォルトの名無しさん
2005/06/30(木) 20:54:52プログラムを作りたくなったのか知りたいのですが、
どんなレスをすればよいでしょうか?
煽りとか知らないとダメでしょうか?
0982デフォルトの名無しさん
2005/06/30(木) 21:37:51・3時間後に復帰するようセットしてスタンバイにしておく
・お出かけ(3時間くらい)
・帰ってきたら起動してて即作業に
0983デフォルトの名無しさん
2005/06/30(木) 21:41:28適当なUSBデバイス(リモコンとか)でスタンバイ状態から
復帰させる方法を教えてください
0984デフォルトの名無しさん
2005/06/30(木) 21:51:48WMIのWin32_DiskDrive.size相当の情報をWMIを使わずにとりたいです。
0985デフォルトの名無しさん
2005/06/30(木) 22:41:30を使えないんです。原因分かる方ヘルプゥゥ!
もちろんprocess.hしてます。
・・・・・コンパイラメッセージ・・・・・・
warning C4013: 関数 '_beginthread' は定義されていません。
0986デフォルトの名無しさん
2005/06/30(木) 22:45:000987デフォルトの名無しさん
2005/06/30(木) 22:46:34どうせシングルスレッド用のライブラリリンクしてるとかじゃねぇの
0988デフォルトの名無しさん
2005/06/30(木) 23:18:390989デフォルトの名無しさん
2005/06/30(木) 23:25:32Cランタイムライブラリに
マルチスレッド、またはマルチスレッドDLLを指定しる
0990デフォルトの名無しさん
2005/06/30(木) 23:32:13リンクするCRTを指定するコマンドラインオプションはコンパイラオプションで、その指定でマクロ定義が変化するんだが。
素人は黙っとけ
つーか、beginthreadは微妙にAPIじゃないけどな
0991デフォルトの名無しさん
2005/06/30(木) 23:43:420992デフォルトの名無しさん
2005/06/30(木) 23:51:250993デフォルトの名無しさん
2005/07/01(金) 00:11:32MFCにDoModalというものがありますが、
これに変わるWin32APIはありますか?
0994デフォルトの名無しさん
2005/07/01(金) 00:21:45DialogBox()
0995918
2005/07/01(金) 00:59:39亀ですがありがとうございました。
おかげさまで解決いたしました
0996デフォルトの名無しさん
2005/07/01(金) 01:34:45タスクスケジューラ
0997デフォルトの名無しさん
2005/07/01(金) 01:43:390998デフォルトの名無しさん
2005/07/01(金) 02:53:45http://pc8.2ch.net/test/read.cgi/tech/1120153520/
0999デフォルトの名無しさん
2005/07/01(金) 03:02:37よく分からんが、
ttp://forums.belution.com/ja/vc/000/310/93s.shtml
とか、
ttp://www.ouk.jp/ogawa/sforum/sfrm.html
↑ここのページ内を
USBストレージデバイスのドライブ名取得について
で検索。
1000デフォルトの名無しさん
2005/07/01(金) 03:02:43Advanced Windows 嫁♥
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。