トップページ⇒tech
1001コメント319KB

Win32API質問箱 Build22

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
- 過去スレ
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/ ★
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/ ★
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様
0002デフォルトの名無しさんNGNG
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm
0003デフォルトの名無しさんNGNG
ExitWindowsEx(EWX_SHUTDOWN,EWX_FORCE);
0004デフォルトの名無しさんNGNG
右クリックでディレクトリ構造をメニューで出すためにメニュー・サブメニューを動的に多数
つくりたいけど、やはり右クリックのタイミングに全部のメニューを作ってしまわないと
いけないんだろうか?なんか遅くなりそうな気がするんだけど、大丈夫ですか?
経験者アドバイスお願いします。
0005デフォルトの名無しさんNGNG
あらかじめ作っておいたものをキャッシュして持っておけば?
0006デフォルトの名無しさんNGNG
>>4
ポップアップメニューが表示されるときに、そのメニュー以下のメニューを作ればいいと思うけど。
0007デフォルトの名無しさんNGNG
>6 それだ!そうしたい。できるんだ?
で検索するとWM_MENUSELECT メッセージを発見
ありがとう。
0008デフォルトの名無しさんNGNG
あ WM_INITMENUPOPUPか。。まいいや
0009 ◆Z0vd5w812U NGNG
ちとウィンドウリージョンについて質問です。
10fpsくらいでフレームごとにウィンドウリージョンを変形させたところ
すごいCPU負荷でした。元のウィンドウサイズは320x320くらいなのですが、
頻繁なリージョン変形をしても負荷を高めない方法ってあるのでしょうか?
0010デフォルトの名無しさんNGNG
>>9
LayeredWindow + αチャネルを使う
0011デフォルトの名無しさんNGNG
>>9
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp
0012誰にともなくNGNG
ExpandEnv(ry
なんて関数があったのか。はじめて知った
0013デフォルトの名無しさんNGNG
>>12
仕様によるがSHGetSpecialFolderPathもアリだね。
0014デフォルトの名無しさんNGNG
環境変数についてはたしかAdvancedWindowsに書いてるよな
0015デフォルトの名無しさんNGNG
>>12
ついでに誰へともなく書くけど、ExpandEnvironmentStrings はレジストリの
REG_EXPAND_SZ タイプとセットで覚えておくと吉だと思う。型のものは、環境変数が展開されることを期待しているから、
ExpandE略( で展開する必要がある。
0016デフォルトの名無しさんNGNG
>>15
ちゃんと編集してから書き込めよ、漏れ orz
0017デフォルトの名無しさんNGNG
っていうか %SystemRoot% とかって普通にどう処理してるのかとおもた。
0018デフォルトの名無しさんNGNG
リストボックスのLBN_SELCANCELって
MSDNライブラリでは「リスト ボックスの現在の選択項目がキャンセルされたとき。」
に送られると書いてありますが、具体的にどういう操作をした場合ですか?
選択項目が変わる直前に来るかと思っていたのですが、
違うみたいです。

LBN_SELCHANGEだと選択項目が変わったあとに通知されるので、
変わる前の状態が欲しかったのですが、
自分で、記録しておかないとダメですかね?
0019デフォルトの名無しさんNGNG
リストボックス上でボタンダウン
のまま何らかの原因でアクティブウィンドウが切り替わってしまった

てな時
002018NGNG
>>19
ありがとうございます。
なるほど、やっぱり自分で管理する部分を作らないとダメですね。
0021デフォルトの名無しさんNGNG
SELCHANGEがあるならSELCHANGINGがないのかな?
0022 ◆Z0vd5w812U NGNG
>>10>>11
おおおー、レイヤードウィンドウか。こんな技もあったとは。THANX。
SetLayeredWindowAttributesとUpdateLayeredWindowの組み合わせでできるのね。
0023デフォルトの名無しさんNGNG
>>9 & >>22
OpenGLスレで質問してたひとですか?
0024 ◆Z0vd5w812U NGNG
>>23
そうですよ。どうかしましたか?
0025デフォルトの名無しさんNGNG
モニタの省電力モードの実行状態を知るAPIってあるのでしょうか。
省電力モードの設定を知ることや、省電力モードに移行/復帰できるのは探し当てたのですが、実行状態を知るのは見つからなくて
0026デフォルトの名無しさんNGNG
SystemParametersInfoでSPI_GETLOWPOWERACTIVEとかダメ?
試してないけど。
0027デフォルトの名無しさんNGNG
>>26
設定を得ることができるだけのようです
0028デフォルトの名無しさんNGNG
WM_NOTIFY メッセージにおいて、wParam と、NMHDR構造体の idFrom が
違う値で送られてくることってありますか?
もしあるとすれば、例えばどのような場合でしょうか?
0029デフォルトの名無しさんNGNG
>>25
IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS
とかどうだろう?試してないけど。
0030デフォルトの名無しさんNGNG
>>28
つまり、自作のプログラムで違う値が送られてきたことがあった、と?
003128NGNG
>>30
いえ、自分で実験してみた限りでは同じ値が送られてくるんですが、WM_NOTIFY の説明によると
「wParam はユニークであることが保証されていないので、idFrom を使うべし」
というようなことが書いてあるので、もしかして何か違いがあるのかなと思いまして…。
0032デフォルトの名無しさんNGNG
違いは、idFormならユニークである事が保証されてるところだろ?
0033デフォルトの名無しさんNGNG
>>32
>>28読め
0034デフォルトの名無しさんNGNG
ずいぶん偉そうな催促だ
003528NGNG
>>32
確かに、idFrom の方を使っていれば何の問題もないということになりますが…。
wParam が使えないとすると、はじめから wParam は別の用途に割り当てておけば
よかったわけで…そう考えると本当は何か使い道があるんじゃないかと思いまして。
0036デフォルトの名無しさんNGNG
仮想リストビュー(LVS_OWNERDATA)を使ってテキストだけのレポート(LVS_REPORT)を作成しようとしています。
イメージを表示するつもりがないにもかかわらず、LVN_GETDISPINFOメッセージが
LVITEM構造体のmaskにLVIF_IMAGEがセットされた状態で送られてきてしまいます。
どのように対処するのが最も正当な手段と言えるでしょうか?
 (1) maskのLVIF_IMAGEをセットしないでLVN_GETDISPINFOを送らせる方法があるので、それを使う。
 (2) maskのLVIF_IMAGEを強制的にクリアして応答しても構わない。
 (3) iImageに特殊な値(-1とか)をセットして応答する。
 (4) その他。
いろいろ調べたのですが分かりませんでした。どうかご教示ください。
0037デフォルトの名無しさんNGNG
>>36
>イメージを表示するつもりがないにもかかわらず

ま、イメージを表示するつもりかどうかは誰にも分からないわけだし、表示できるように
マスクがセットされていると考えれば、(2) でいいんじゃないの >試してないけど
0038デフォルトの名無しさんNGNG
const int THREADS_COUNT = 10;
HANDLE start;

unsigned __stdcall proc(void*)
{
::WaitForSingleObject(start, INFINITE);
return 0;
}

int main(int argc, char* argv[])
{
start = ::CreateEvent(NULL, FALSE, FALSE, NULL);
assert( start );
HANDLE threads[THREADS_COUNT] = {0};
int i;

for(i = 0; i < THREADS_COUNT; ++i) {
threads[i] = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, proc, (void*)i, 0, 0));
assert( threads[i] );
}

::Sleep(10000);
for(i = 0; i < THREADS_COUNT; ++i) {
::SetEvent(start);
::Sleep(0); // <---------- ここ
}

for(i = 0; i < THREADS_COUNT; ++i) {
::WaitForSingleObject(threads[i], INFINITE);
::CloseHandle(threads[i]);
}
003938NGNG
VC++6.0SP6 Win2k Win32コンソールアプリ

メインはスレッドを10コ作りイベントを10回セットしスレッドの終了を待ち
スレッドはイベントがセットされたら終了するというものです。

正常に10コのスレッドが終了するのですが
コメントの::Sleep(0);を無効にすると1コのスレッドしか終了しません。
スレッド切り替えが起きずにSetEventが10回行われ
結局1回のSetEventと同等になってしまうということなのでしょうか?
これは仕様なのでしょうか?
004038NGNG
言い忘れましたが、テストした環境はシングルプロセッサです。
0041デフォルトの名無しさんNGNG
なんか違和感のあるソース・・・何か変なんだけど、わからん。
0042デフォルトの名無しさんNGNG
Sleepが無い場合mainが一回のタイムスライスで10回イベントセットするからだろ。
アホか。
0043デフォルトの名無しさんNGNG
>>42
スレッドの最後にOutpuDebugStringを入れてみたら、確かに1コしか解放されてませんでした。
で、疑問なのですが自動リセットイベントの場合
SetEventは待ちスレッドがあった場合それを解放してイベントを非シグナル状態にする
とMSDNには書いてあります。

上記のプログラムでは待ちスレッドが10コあるため
SetEvent->イベントシグナル->スレッド解放->非シグナル
が10回繰り返されると思ったのですが…
いったいどのタイミングでスレッドは解放されるのでしょうか?
0044デフォルトの名無しさんNGNG
>>43
煽られて感情高ぶってるのはわかるけど、
知ったところで意味のない質問はしない方がいいよ。
プラットホームで変わるかもしれないし。
0045デフォルトの名無しさんNGNG
>>39
>The state of an auto-reset event object remains signaled until a single waiting thread is released,
>at which time the system automatically sets the state to nonsignaled.
- Microsoft Platform SDK Document "SetEvent"

待機中のスレッドが何時リリースされるかについては触れられていないのがポイントっぽいですね。
実際にリリースされるまでの間は、単にイベントがシグナル状態にあるだけで、

>Setting an event that is already set has no effect.
となってしまう。
0046デフォルトの名無しさんNGNG
auto reset event の場合ですけど、

誤>SetEventは待ちスレッドがあった場合それを解放してイベントを非シグナル状態にする
正>SetEventはイベントをシグナル状態にする。待機中のスレッドが一つ開放されるとイベントは自動的に非シグナル状態になる。

待機中のスレッドがリリースされる前に制御は戻ってきますよ。
0047デフォルトの名無しさんNGNG
>>43
>いったいどのタイミングでスレッドは解放されるのでしょうか?
そりゃ、スレッドの待機が解除されたら・・・だろ?

で、スレッドの待機が解除されるには、
そのスレッドが実行されなければいけない

Sleep(0)で明示的にタイムスライスを放棄すれば、
上手く行くんだから明らかだろ?

なんだったら、作成したスレッドの優先度を上げて見たら?
0048デフォルトの名無しさんNGNG
>>29
hDeviceを得るためにCreateFileを使おうと思いましたが
CRTディスプレイに該当するlpFileNameの文字列が分かりません
004938NGNG
>>44-47
ありがとうございました。
なぜこの疑問が浮かんだかというと、
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndllpro/html/msdn_metrsect.asp
のメータードセクションを試しに作ってみて上手くいかず原因をさぐってみたところ

LeaveMeteredSectionの
for (iCount=0; iCount < lReleaseCount ; iCount++)
{
lpMetSect->lpSharedInfo->lThreadsWaiting--;
SetEvent(lpMetSect->hEvent);
}

で必要分スレッドがリリースされてなかったからです。(Sleep(0)を入れて解決しました)
005038NGNG
何度も申し訳ない。
>>38 で名前付きイベントを使いメインとスレッドの処理を別プロセスで動かしたところ
Sleep(0)を入れなくてもスレッド10コ分リリースされました。
これはたまたまなんでしょうか…
趣味でWindowsプログラム7年やってますが、同期オブジェクトの扱い方がわからなくなってきました…
0051デフォルトの名無しさんNGNG
”コマンドプロンプト”用のプログラムの標準入出力を
GUI(画面)に表示するプログラムがありますが、
あれはどうやって作るんでしょうか。
005236NGNG
>>37
> マスクがセットされていると考えれば、(2) でいいんじゃないの >試してないけど

うちの環境(XP)で (2) が使えることは確認していたのですが、他の環境でもうまくいくとは
限りませんし、(1) の見落としの可能性もあったので一応質問させていただいた次第です。
お返事、どうもありがとうございました。
0053デフォルトの名無しさんNGNG
パイプでぐぐれ
0054デフォルトの名無しさんNGNG
ウインドウサイズ変更出来ないようにするにはどすればいいの?
0055デフォルトの名無しさんNGNG
>>54
WM_GETMINMAXINFOを処理しる
0056デフォルトの名無しさんNGNG
~WS_THICKFRAME
0057デフォルトの名無しさんNGNG
>>54
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
0058デフォルトの名無しさんNGNG
winampのように動かしながら画面吸着させたいんですが、
WM_MOVINGでparamから位置をもらいながら位置判定して、movewindowしてるんですが、
それだと頻繁に、通常のウィンドウ動かしたときのような点線枠が変な風に(びよ〜んと伸びる)表示されてしまいます。
どうすればWinampみたいな動きが実現できるのでしょうか?
0059デフォルトの名無しさんNGNG
ドラッグ処理を全部自前でやればどうとでもなる。
0060デフォルトの名無しさんNGNG
>>58
WM_WINDOWPOSCHANGING
0061デフォルトの名無しさんNGNG
>>54,57
出来ました。サンクスコ
>>57で簡単に出来たけど>>54の方でやるメリットと言うか
違いって何かあるんですかね。
0062デフォルトの名無しさんNGNG
>>54は質問のようだが
0063デフォルトの名無しさんNGNG
スマヌ
>>55と>>57だった
0064デフォルトの名無しさんNGNG
>>55だと縦方向だけ変えたくないとかを柔軟に処理できる
>>57だと枠線がサイズ変更できないウィンドウ標準のものになる
(95以降は区別が付きにくいけど)
0065デフォルトの名無しさんNGNG
>>51
コンソールを開く
0066デフォルトの名無しさんNGNG
WM_MOUSEMOVEにX = LOWORD(lParam);でX座標取得して、
SetCapture()でキャプチャーしてるんですけど、ウインドウの右側はみ出た場合は
数値がそのまま増えていくんですけど、左から出た時は0の左が65535になって左に
行けば行くほど数値が低くなるんですけど、何で65535なんて数値になるんでしょう?
0067デフォルトの名無しさんNGNG
 
0068デフォルトの名無しさんNGNG

「ひろゆき」から「今晩のおかず」までを手広くカバーする巨大掲示板群
             『3ちゃんねる』へようこそ!

                   ▲▲
                  ( ・3・) <見に来てね
                  (|.   .|)   
                   |. ω |       
                   ∪ ∪
           3ちゃんねるイメージキャラクター
              「3チコ (さんちこ)」
          
              http://www.3ch.jp/   
0069デフォルトの名無しさんNGNG
>>66
signed, unsigned について説明してみろ
0070デフォルトの名無しさんNGNG
>>69
signed   符号付き
unsigned  符号無し
ですか?
0071デフォルトの名無しさんNGNG
WORD が無符号整数型だから負数を表現できないんだよ。
いったん short にキャストしてから int なり何なりに代入汁。
0072デフォルトの名無しさんNGNG
>>66
左端から出たら、どんな数値になって欲しいのさ?
0073デフォルトの名無しさんNGNG
WORD型ってのはunsigned shortだから0から65535までしか表せなくて
-1じゃなくて65535になってしまうってことですか。

>>71
どうも有り難うございます。
0074デフォルトの名無しさんNGNG
SetLayeredWindowAttributes使いたいんですが、
windows.hだけではダメなんですか?
いちおう
#define _WIN32_WINNT 0x0500
これもしたんですが、定義されてないとエラーが出てしまいます
0075デフォルトの名無しさんNGNG
つーか専用のマクロあるんだから使え
GET_X_LPARAM
0076デフォルトの名無しさんNGNG
>>74
includeディレクトリをgrepして、無ければPlatformSDKをゲット
0077デフォルトの名無しさんNGNG
PlatformSDKのinclude内のWinUser.h内にみつけましたが、
そのフォルダ、ディレクトリ設定のインクルードファイルの欄にちゃんと入ってます…
0078デフォルトの名無しさんNGNG
>>77
#ifディレクティブに注意
0079デフォルトの名無しさんNGNG
#define _WIN32_WINNT 0x0500
これかいててもダメですね…
検索かけたらみんなこれで解決してるのに…
0080デフォルトの名無しさんNGNG
Platform SDKのinclude・libフォルダ設定を一番上にしたらいけました…
0081デフォルトの名無しさんNGNG
ぬっ殺す
0082デフォルトの名無しさんNGNG
いくら使わせたくないからって
winternl.hのプロトタイプ宣言が間違ってるのってどうよ
0083デフォルトの名無しさんNGNG
レジストリキーの変更をしたいのですが、キーを変更するAPIが見つかりません。
削除して新たに作成するしかないのでしょうか?
0084デフォルトの名無しさんNGNG
ローカルシステムアカウントで実行しているプロセスから、
IEを起動すると最初一回だけ、「インターネット接続ウィザード」が表示されてしまいます。
これを回避したいのですが、どうすればよいでしょうか。
お知恵をお貸しください。
0085C言語初心者NGNG
ウイルスの作り方を教えてくdさい!!!!
0086デフォルトの名無しさんNGNG
CreateVirusEx()
0087デフォルトの名無しさんNGNG
CreateViruSEX()
0088sageNGNG
>>86-87
ありがとうございます!!!!
でもどうやって使えばいいんですか??
教えてくださいお願いします!!!!
0089デフォルトの名無しさんNGNG
int main()
{
 HSEX sex = CreateViruSEX();
 RunViruSEX(sex, "立ちバック");

 return 0;
}
0090デフォルトの名無しさんNGNG
>>83
RegSetValueEx でいけなかったっけ?
0091デフォルトの名無しさんNGNG
値の変更はできるけど、キーの変更はできないよ。
0092デフォルトの名無しさんNGNG
>>89
RunViruSEXが0をFALSEを返します!!!!
GetLastError()の戻り値は5でした!!!!
何故ですか????
0093C言語初心者NGNG
>>92
僕のまねをしないでください!!!
なんでみんな真面目に答えてくれないんですか???・
0094デフォルトの名無しさんNGNG
DeleteObject((HGDIOBJ)"C言語初心者");
0095デフォルトの名無しさんNGNG
>>89
main(int) { CreateViruSEX; return } << "立ちバック"
こうですか?わかりません。
0096デフォルトの名無しさんNGNG
>>92

/*
  HPENIS GetPenisHandle(
    LPCTSTR HumanName // 所有者名
  );

  LONG SetPenisLong(
    HPENIS hPenis, // ペニスのハンドル
    int nIndex, // 設定する値のオフセット
    LONG dwNewLong // 新しい値
  );

  HADLITM GetStockItem(
    int fnItem // ストックアイテムのタイプ
  );
*/

SetPenisLong(GetPenisHandle(NULL), SPL_CONDOM, (LONG)(HCONDOM)GetStockItem(WARTY_CONDOM));
0097デフォルトの名無しさんNGNG
>>93
皆が真面目に答えないのはウィルス作成に米国家の専門資格が必要だから。
それで初心者を名乗るお前は絶対持っていないだろうと皆が思っているから。
0098デフォルトの名無しさんNGNG
>>93
真面目に答えて欲しければ、質問を変えた方がいいと思うよ。
誰もウイルス作成の手助けなんかしたくない。スレ違いのような気もするし。
0099デフォルトの名無しさんNGNG
>>97-98
そんなとこで釣られるn(ry
0100デフォルトの名無しさんNGNG
つーかまずローカルルール読め低脳
0101デフォルトの名無しさんNGNG
>>92
おまえ童貞だろ。なら当然FALSEが返る。
0102デフォルトの名無しさんNGNG
質問です.宜しくお願いします!

win32 console で,stdin にインプットがあるかどうかを調べるには
どうすればよいのでしょうか? unix 系の環境での select() 関数の
ようなものを探しています.今のところ _kbhit() を使用していますが,
標準入力がキーボードの時しか上手く働いてくれません...
0103デフォルトの名無しさんNGNG
selectで良いと思いますが・・・
0104デフォルトの名無しさんNGNG
ダイアログボックスの中にテキストボックスがある時、
そのテキストボックスにキーボードフォーカスを移すには
どうすればいいんですか?
0105デフォルトの名無しさんNGNG
雪兎不応粕
0106デフォルトの名無しさんNGNG
ダイアログボックス上ということであれば
WM_NEXTDLGCTLの使用を推奨したい。
0107デフォルトの名無しさんNGNG
>>103
winじゃselectはsocketにしか使えませんが?
0108デフォルトの名無しさんNGNG
質問です。

プログラムから、そのプログラム自身を実行した時の CreateProcess API の
各引数を調べる方法はあるのでしょうか?
その辺を多少調べたけれどわからんかったので教えていただければ嬉しいです。
ヒントとなるキーワードやAPI名でもいいんで教えてくださいエロい人。
0109デフォルトの名無しさんNGNG
>>107
ネタにマジレスするな
0110デフォルトの名無しさんNGNG
>>109ネタ解答は迷惑なので他所でやってください
0111104NGNG
>>106
普通にGetDlgItemでできましたけどね……。
0112デフォルトの名無しさんNGNG
>>108
CreateProcess索いて、See Alsoをざっと見てみた。
GetCommandLine, GetEnvironmentStrings, GetStarupInfoあたりが使えそうだな。

>>111
ボタンに黒枠が残っても気にしないのならそれで問題ない。
0113デフォルトの名無しさんNGNG
>>102
WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)とか?
入力ハンドルがコンソールじゃなかった場合にWaitFor〜していいのかちょっと怪しいが
0114102NGNG
>>113

解決しました!
ありがとうございました.
0115115NGNG
あるアプリのクライアント領域の描写を右に100ピクセルずらすDLLをつくっているのですがうまくいきません
DLLはプラグインとしてアプリからロード,実行されアプリのWindowProcをSetWindowLongPtrで書き換えて
自分のProcが呼ばれるところまではうまくいきました
実際にずらす処理は
if(msg==WM_PAINT)
{
  HDC hdc = BeginPaint(hwnd, &ps);
  InvalidateRect(hwnd, &ps.rcPaint, ps.fErase);
  SetGraphicsMode(hdc, GM_ADVANCED);
  XFORM xnew, xlast;
  GetWorldTransform(hdc, &xlast);
  xnew.eM11 = 1;xnew.eM12= 0;
  xnew.eM21 = 0;xnew.eM22= 1;
  xnew.eDx = 100;xnew.eDy= 0;
  SetWorldTransform(hdc, &xnew);
  LRESULT result = CallWindowProc(g_DefProc, hwnd, msg, wp, lp);
 
  //ためしに変数helloの文字列を0,0に描写
  TextOut(hdc, 0, 0, hello, wcslen(hello));
  SetWorldTransform(hdc, &xlast);
  SetGraphicsMode(hdc, GM_COMPATIBLE);
  EndPaint(hwnd, &ps);
  return result;
}
0116115NGNG
だいたいこんな感じのを自分のProcでやっているのですが変数helloの文字は確かに右にずれて描写されるのですが
アプリによってのほうは,今までのままです.原因はSetWorldTransformを適用してるHDCとアプリが実際使ってるHDCが
異なっているためだと思うのですが,ずらす系(?)API(SetWorldTransformとOffsetViewportOrgEx)の両方とも
引数としてHDCをとるため事前にアプリが使用するHDCを固定するかでもしないとなりません.そのようなことは可能ですか?
もしくは,ずらす系APIの引数がHWND版みたいなものはないでしょうか?
長文になってしまい,まことに申し訳ないのですがよろしくおねがいします
0117115NGNG
BeginPaintとEndPaintを置き換えるやり方を見つけたのですが
ttp://www.fengyuan.com/article/wmprint.html
ちょっと複雑そうなのでSetWorldTransformなどのずらす系APIのHWND版を
教えていただく方向でお願いします.図図しくてすみません
0118デフォルトの名無しさんNGNG
DLL側ではBeginPaintとEndPaintは使わない方がいいんじゃない?
GetDC(hWnd)で取れるよ。
0119115NGNG
>>118
BeginPaintをGetDCに,EndPaintをReleaseDCに書き換えてみましたがだめでした
0120デフォルトの名無しさんNGNG
ずらしたあとにアプリ側の再描画で元に戻されてるのでは?
0121115NGNG
>>120
自分のイメージ的にはSetWorldTransform(hdc, &xnew)でかってに右に移動しちゃう行列が
適用されて,その後のSetWorldTransform(hdc, &xlast)がよばれるまでの間に呼び出された
CallWindowProc(g_DefProc, hwnd, msg, wp, lp);によってアプリ側には,ずれてることすらわからないはずみたいな感じなのですが
WM_PAINT以外で元に戻されるということでしょうか?
0122デフォルトの名無しさんNGNG
あらかじめ SetGraphicsMode 関数を呼び出して、指定したデバイスコンテキストのグラフィックスモードを GM_ADVANCED に設定しておかなければ、SetWorldTransform 関数は失敗します。
0123115NGNG
WM_ERASEBKGNDで送られてくるHDCを引数としてSetWorldTransformを呼び出すことで
アプリ側が描写したものに対しても100ピクセルずらすことができました.OffsetViewportOrgExでも大丈夫でした
 
>>122
いちおう115のソースの5行目で呼び出してます
 
回答していただきました皆様ありがとうございました
0124デフォルトの名無しさんNGNG
Spy++みたいにほかのウィンドウのメッセージを取得したいのですが
どうやればいいのでしょうか?
0125デフォルトの名無しさんNGNG
グローバルフックをインスコ
0126デフォルトの名無しさんNGNG
>>125
こんな便利なものがあるなんて知りませんでした。
ありがとうございした。
0127デフォルトの名無しさんNGNG
C++からWin32API使いたいんだけど、いちいちWrapperクラスなんか作らないとダメかな?
0128デフォルトの名無しさんNGNG
>>127
C++に対する理解が足りないのでは
0129デフォルトの名無しさんNGNG
そうした方が便利なら。
0130127NGNG
結局MFCやれってことになるのかな?

MFC >>>>>>>>> 自作Win32API wrapper

ってこと?
0131デフォルトの名無しさんNGNG
は?
どこからそういう結論が出るんだヴォケ
0132デフォルトの名無しさんNGNG
まだまだ、残暑が続くからな。
変なやつの相手すんなって。
0133127NGNG
このスレの住人て民度が低いね。(プ
0134デフォルトの名無しさんNGNG
>>133
民度という用語に対する理解が足りないのでは

それはともかく、C++のソースからでもWin32APIの呼び出しはできるでしょ?
呼び出しをクラスメソッドにするかどうかは設計者であるアナタ次第。
というわけでスレ違い。
0135デフォルトの名無しさんNGNG
近頃どのスレでも>>133みたいなのを見かける。
0136デフォルトの名無しさんNGNG
> 近頃どのスレでも>>133みたいなのを見かける。
自分で作った Thread に>>133みたいなのが居るのを想像してしまった。orz
0137デフォルトの名無しさんNGNG
ウィンドウズOSのコモンツールバー実装方法に疑問を感じる。
実装が自己矛盾に満ちている。
0138デフォルトの名無しさんNGNG
以降、肛門ネタ禁止
0139デフォルトの名無しさんNGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0140デフォルトの名無しさんNGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0141デフォルトの名無しさんNGNG

DWORD size;

size = GetFileSize(GetStdHandle(STD_INPUT_HANDLE));



上の方法で標準入力に何バイト溜まっているかを取得できますか?
0142デフォルトの名無しさんNGNG
ぼくの肛門にも何バイトか溜まっているようです
0143デフォルトの名無しさんNGNG
>>141
http://msdn.microsoft.com/library/en-us/fileio/base/getfilesize.asp
> You cannot use the GetFileSize function with a handle of a
> nonseeking device such as a pipe or a communications device.
0144デフォルトの名無しさんNGNG
>>143
読み落としていました。

標準入力に何バイト溜まっているかを取得する方法はありませんか?
全部読まないとわからないのでしょうか?
0145デフォルトの名無しさんNGNG
>>144
>標準入力に何バイト溜まっているかを取得する方法はありませんか?
ありません。

>全部読まないとわからないのでしょうか?
「全部」の意味によりますが、そんな感じです。
0146141 == 144 == 146NGNG
>>145
thx!
0147デフォルトの名無しさんNGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0148デフォルトの名無しさんNGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0149デフォルトの名無しさんNGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0150デフォルトの名無しさんNGNG
馬鹿127が荒らしてる
0151127NGNG
>>150
おれじゃねーよヴァカ
0152127NGNG
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < sageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
0153デフォルトの名無しさんNGNG
CreateFileで作成したファイルをメモリマップドファイルを用いずに
行単位で入力する方法を探しています。
C言語のfgetsに相当する関数は無いのでしょうか?
また、自作するにはどうしたらよろしいでしょうか?
0154デフォルトの名無しさんNGNG
>>153
精進が足りんな。
API直叩きにはスキル無さ杉。
まずバッファリングのやり方、勉強汁!
嫌なら素直にランタイム使っとけ。
0155デフォルトの名無しさんNGNG
>>110
なんで俺に言うんだよ。>>103に言えよ。
0156デフォルトの名無しさんNGNG
CreateWindowExで作ったエディットコントロールの…
 ・フォントのサイズ変更、
 ・フォントの種類変更、
 ・フォントの色変更、
 ・背景色変更、
 ・半透明化、
の仕方が分かりません。

リッチエディットまではいかなくてもWindows付属のメモ帳くらい変更したいのですが。

半透明化については、
SetLayeredWindowAttributes関数でできるかと思ったのですが、
ウィンドウ全体の半透明化はできてもエディットコントロールの変更は無理のようです
(エディットコントロールに同じことをするとエディットコントロール自体が消えます)

分かる方よろしくお願いします。
0157デフォルトの名無しさんNGNG
>>156
子ウィンドウはレイヤードウィンドウにできないはず。
0158デフォルトの名無しさんNGNG
WS_CHILD外して貼り付けたいウィンドウにあわせて移動。
0159デフォルトの名無しさんNGNG
XPや2000におけるHTMLでのボタンのような外観にはどうやったらできるんですか?
0160デフォルトの名無しさんNGNG
>>159
そうですか
0161デフォルトの名無しさんNGNG
>>160
カスが
0162デフォルトの名無しさんNGNG
>>160
そうですよ
http://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp
0163156NGNG
ありがとうございます。

>>157
なるほど、それでできなかったんですね。

>>158
WS_CHILDを外してみましたが
何も変わりませんでした・・・
エディットコントロール作成時に、親ウィンドウのハンドルのところをNULLにもしてみたりしたんですが。
0164デフォルトの名無しさんNGNG
>>163
エディットコントロールと同じ大きさの枠無し窓でも作ればいいんじゃないかな
0165デフォルトの名無しさんNGNG
>>156
今や不評ですが、「猫でもわかる...」に例があったような。
半透明化はやっていませんが、他は、私は猫のお陰でやっています。
0166デフォルトの名無しさんNGNG
ユーザー名とドメイン名からそのユーザーがlogonしているかどうかを
知りたいのですが、そのようなAPIはありませんでしょうか?

現在logonしているユーザーのリストを取得できる関数がないかなと
思っているのですが…
0167デフォルトの名無しさんNGNG
>>156
ボタンをサブクラス化。
バックバッファを作り、WM_PAINTで元のボタンにWM_PRINT送って描画してもらう。
背景と重ね合わせる。

でどお?
0168デフォルトの名無しさんNGNG
>>166
これなんかどう?
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8548&forum=6&6
0169デフォルトの名無しさんNGNG
>>156

WM_SETFONT でフォントのセット、背景色は WM_CTLCOLOREDIT への応答で
0170デフォルトの名無しさんNGNG
HWNDに対応したキャレットの幅と高さを調べられるAPIはありますか?
0171デフォルトの名無しさんNGNG
メニューが複数行表示されているか、どうやったら調べられますか?
またウィンドウの幅がどれくらい縮んだらメニューが折り返されるか調べる方法はありませんでしょうか?
0172デフォルトの名無しさんNGNG
現在のタスクバーの高さを一発で求める API はなんでしょうか。
MSDN で探すのは TASKBAR とかでは駄目で、他の用語があるんでしょうか。
0173デフォルトの名無しさんNGNG
タスクマネージャのように
プロセスごとの、ユーザー名、CPU、メモリ使用量を取得するには
どのようにすればよいのでしょうか
0174デフォルトの名無しさんNGNG
>>172
タスクバーが左右に縦に表示されている場合でも"高さ"が欲しいのか?

なんとなくSystemParametersInfo(SPI_GETWORKAREA, ...)とかGetMonitorInfo()で
取得できるワークエリアが必要な気もするが。
0175デフォルトの名無しさんNGNG
>>172
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shappbarmessage.asp
0176デフォルトの名無しさんNGNG
>>173
PSAPI
0177172NGNG
>>174, >>175
どうもありがとうございます。
高さってのは軽率でした。screen から workarea を引くしかないんですね。
0178デフォルトの名無しさんNGNG
メニューにチェック形式のアイテムをもたせるにはどうすればいいんですか?
0179デフォルトの名無しさんNGNG
ある意味では、すべてのMENUITEMはチェック形式であるといってもいいね。
0180デフォルトの名無しさんNGNG
>>179がなんか言い出したぞ。
0181デフォルトの名無しさんNGNG
>>178
CheckMenuItem()じゃない?

いやまて、そんな単純な質問ではないのか?
0182デフォルトの名無しさんNGNG
>>181
うん。皆、その裏が読めなくて答えられないのだよ。
0183170NGNG
マダー?
0184デフォルトの名無しさんNGNG
>>183
ざっとみたかんじ、そんなAPIはなさげです
0185デフォルトの名無しさんNGNG
ListView_SortItemsを使ってリストビューをソートしようと思ったのですが、
何故か出来ません。


int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);


この比較関数の引数のlParam1とlParam2の値が、常に0です。
リストビューには数百ぐらいいれているのですが
0186デフォルトの名無しさんNGNG
CreateDIBSectionとmemcpyとかを使ってペイントソフトみたいの作れって言われたんだけどさっぱり分からん!
どこか解説ページとかない?

CreateDIBSectionの意味すら今一分かんないorz
0187デフォルトの名無しさんNGNG
0188デフォルトの名無しさんNGNG
まずググれ
0189デフォルトの名無しさんNGNG
>>186
CreateDIBSectionとmemcpyについて解説してあげてもいいけど、
ペイントソフト作るのってその二つ理解するよりはるかに難易度高いから
そのくらい自分で調べた方が良いよ。
0190デフォルトの名無しさんNGNG
>>185
そのソースさらしてよ、でなきゃ原因はわからんです。

ListView_SortItemsの使い方だったら、ググれば
たくさん出てくる。
0191185NGNG
猫を参考にしています。

HWND hList;//リストビューのハンドルを入れてあるグローバル変数

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
  static LV_FINDINFO lvf ;
  static int item1, item2 ;
  static char buf1[512] , buf2[512] ;
  lvf.flags = LVFI_PARAM ;  lvf.lParam = lParam1 ;

  item1 = ListView_FindItem(hList, -1, &lvf) ;
  lvf.lParam = lParam2 ;
  item2 = ListView_FindItem(hList, -1, &lvf) ;
  ListView_GetItemText(hList, item1, (int)lParamSort, buf1, sizeof(buf2));
  ListView_GetItemText(hList, item2, (int)lParamSort, buf2, sizeof(buf2));
  return strcmp(buf1, buf2);
}

呼び出すのはこうやってます。

  NMLISTVIEW pNMlist = (NMLISTVIEW *)lParam ;
  ListView_SortItems(hList, CompareFunc, pNMlist->iSubItem);

リストビューのウインドウハンドル、hListは確かに存在します。
実験的に、ListView_SortItems()の前にIsWindow()をやって確かめました。
0192185NGNG
すみません。ちょっと行数を調節していたら途中に変な改行が。

それから呼び出すのは
WM_NOTIFYの、リストビューのIDからのメッセージで、
LVN_COLUMNCLICKが来たときにです。
0193デフォルトの名無しさんNGNG
>>191

compare関数が呼び出された時点でlParam1, lParam2共に0なんだから、
その関数をみせられてもわからんですよ。

猫のところのプログラムは動くのだから、そこから手を加えた
ところを探ってみた方がいいんじゃない?アイテムを追加するところとか。
0194デフォルトの名無しさんNGNG
lParamを設定していない落ちとか。

私の場合は必ずアイテム追加するときにlParam設定しておくからなぁ。
#しかもMFC利用。
0195185NGNG
>>194
LPARAMを設定?
0196デフォルトの名無しさんNGNG
親ウィンドウAとその子ウィンドウBがあり、子ウィンドウBを親ウィンドウAの
キャプションのように扱いたいのですがどうすればいいのでしょうか?
以下のような感じで、子ウィンドウBをドラッグすると親ウィンドウが動くとい
うか…わかりづらくてすいません。
+---------------+
| +-----------+ |
| | 子ウィンドウB |. |
| +-----------+ |
| 親ウィンドウA   |
+---------------+

最初、子ウィンドウBでWM_NCHITTESTで親Aにそのまま流しましたがダメ
でした。
次に子ウィンドウBでWM_NCHITTESTにreturn HTCAPTIONを返し、Bの
WM_WINDOWPOSCHANGINGで親ウィンドウに対しMoveWindowしてみると
一見うまくいってるようですが親とズレてしまったり、親のクライアント領域
外に出られないなどの問題がありました。

要はシステムメニューから移動を選択したのと同じ動作をさせたいのです。
どなたがご教授頂けませんか。
0197デフォルトの名無しさんNGNG
キャプション?
0198デフォルトの名無しさんNGNG
>>196
子ウィンドウでは HTTRANSPARENT を返して、親ウィンドウでは
マウス座標を調べて子ウィンドウの座標内にあれば HTCAPTION を
返すようにしたらどうですか?
0199185NGNG
自己解決しました。

LVITEM構造体のlParamを設定する必要があるんですね。
比較関数に送られてくるのはその値だったのか。
道理で全部ゼロになっているわけだ。
0200テレパス名無しさんNGNG
>>178
チェックボックスのように自動でチェックする機能はないので、
自分で状態を管理してチェックを付けたり外したりしてください。
0201196NGNG
>>198
レスが遅くなって申し訳ありません。
子ウィンドウでHTTRANSPARENT(-1)を返し、親ウィンドウで座標をチェックして
HTCAPTIONを返したところ期待通りの動作になりました。
ご教授頂きありがとうございました。
0202デフォルトの名無しさんNGNG
関連づけられたアイコンの小さいサイズを取得する方法はありますか?
ExtractAssociatedIconでは32x32サイズのアイコンしか取得できませんでした。
ExtractIconExだとEXEやDLLの場合は小さいサイズも取得できますが、フォルダ
の小さいアイコンを取得できません。
ぐぐってみたりMSDNをみたりしましたが見つけることができませんでした。
0203デフォルトの名無しさんNGNG
Windows2000でコンピュータ名を変更できるAPIはないでしょうか?

SetComputerNameでは、NetBIOS名しか変わりませんでした。
Win32_ComputerSystemのRenameメソッドはXP以降でしか使えないようです。
0204デフォルトの名無しさんNGNG
そろそろXP専用でも何も文句言われなくなってくる時期
0205デフォルトの名無しさんNGNG
>>202
SHGetFileInfo
0206デフォルトの名無しさんNGNG
>>203
よくわからずに書くけど、SetComputerNameExもダメ?
0207デフォルトの名無しさんNGNG
>>206
ありがとうございます。

Exの方はドキュメントだけ見て、試してませんでした。
SetComputerNameExのComputerNamePhysicalDnsHostnameで上手く行きました。

お騒がせしました。
0208デフォルトの名無しさんNGNG
現在実行中のプロセスから、自分自身が所有しているメモリサイズを知りたいのですが、
そういうふうに使えそうなAPIはないでしょうか?
できれば、スレッドごとのスタックサイズも取れると嬉しいです。
お知恵を拝借させてください。
お願いします。
0209202NGNG
>>205
ありがとうございます、調べてみます。
0210186NGNG
>>208
MEMORYSTATUS
GlobalMemoryStatus
で出来ると思います。

>>189
大変亀レスですけど、ペイトソフトといってもただMoveToExとか使わずに直線を引いたりするだけのプログラムでして。
一番重要そうなCreateDIBSectionの使い方と言うか意味の理解い苦しんでます。
hdcを取得するとかしてどうするのかとか…
0211デフォルトの名無しさんNGNG
>>210
ググって一番最初に出てくるページどおりにやればできるんでないの?
某お絵かきソフトの作者のページだが。
0212デフォルトの名無しさんNGNG
>>208
プロセスごとのメモリの情報は NT 系では PSAPI の GetProcessMemoryInfo()
9X 系では、ToolHelp のヒープウォークをする必要があります。
0213デフォルトの名無しさんNGNG
アクセラレータキーってマウスボタンは使えないんですか?
VK_LBUTTONとかVK_RBUTTONなんてものがあるからやってみたのですが、うまくいきません。
ほかの適当なボタンに変えると動きます。
0214デフォルトの名無しさんNGNG
>>208
パフォーマンスモニタ方面のAPI使えば大体のことはできそう。
詳しくは知らんのでMSDNあたってくらさい。
0215デフォルトの名無しさんNGNG
VC++6.0です。
レイヤードウィンドウを使いたくて調べたところ、
SDKをインストールする、とあったのでインストールしてみたんですが相変わらず

'SetLayeredWindowAttributes' : 定義されていない識別子です。

と出ます。
core SDK のインストールだけじゃダメなんでしょうか?
0216デフォルトの名無しさんNGNG
>>215
>>74
0217215NGNG
まさか同じ質問がスレ上にあったとは・・・
別の単語で検索して引っかからなかったので見落としてしまいました。

でも、まだ解決できません。
オプションからSDKのインクルードとライブラリは
ディレクトリに加えてあるんですけど、全然効果がないです。
何故なのかわかりませんが、他に設定が必要なのでしょうか?
0218デフォルトの名無しさんNGNG
>>217
追加した奴を上の方にしてるか?
0219215NGNG
>>218
はい、それは書いてあったので試してみました。
でもダメなんです。

そういえば、>>78の意味がわかりませんでした。
調べても何がなにやらで。

普通だったらちゃんと定義されてるって認識するんですよね?
0220デフォルトの名無しさんNGNG
#define _WIN32_WINNT 0x500
#include "windows.h"

こーしろってこと。
0221デフォルトの名無しさんNGNG
>>220
stdafx.hネタと同じくらいメジャーな「初心者泣かせ」かもな(w
0222222NGNG
IMEの表示をずらしたいのですがうまくいきません.どの段階での表示かといいますと
ちょっとうまく伝えられるか自身がないのですが,メモ帳を立ち上げていただいて
[半角/全角キー]を押していただき[Aキー]を押していただくと[あ]の文字の下に点線が
表示されてる状態になると思うのですが,これをずらしたのです.
実際にずらしたいのはメモ帳なども外部アプリの物ではなく自分でCreateWindowしたEDITの物です

WM_IME_REQUESTで,なおかつWPARAMがIMR_QUERYCHARPOSITIONのときLPARAMはIMECHARPOSITIONという
構造体へのポインタでありまして,それをうめて1を返せばいいみたいなことがmsdnに書いてあるとおもうのですが
英語なので自信がありません.
msdn.microsoft.com/library/en-us/intl/ime_2nu6.asp

ここにソースを貼りました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&rm=100
0223222NGNG
WM_IME_NOTIFYでWPARAMがIMN_SETCOMPOSITIONWINDOWのときに
ImmSetCompositionWindowで無事ずらすことができました
0224デフォルトの名無しさんNGNG
質問です。

VC++6.0にて、
新規作成 -> Win32 Console Application -> 空のプロジェクト
から、ウィンドウ(またはダイアログ)を生成することは可能でしょうか。


0225デフォルトの名無しさんNGNG
>>224
試してみてください
0226224NGNG
ハーイ
0227デフォルトの名無しさんNGNG
>>224
ぶっちゃけ、可能です。
作り方は自分で調べましょう。
手取り足取り教えられる暇人はいません。

終了
0228224NGNG
>227 再開
可・不可だけたずねたつもりでしたので、
思わぬ回答、ありがとうございました。

0229215NGNG
>>220
できました、そうやるのですか。
本当にありがとうございました。
0230 ◆Z0vd5w812U NGNG
>>224
オレはいつもconsoleでWin32アプリを作ってる。printfを使いたいから。
リリース時にはWinMain()を呼び出すように切り替えてコンパイル。

で、一つだけ教える。GetModuleHandle(NULL)でアプリケーションのインスタンスハンドルを入手できる。
0231デフォルトの名無しさんNGNG
>>230
OutputDebugString()は許されない環境なのか?
0232 ◆Z0vd5w812U NGNG
>>231
コマンドラインでmakefile派だから。IDEを使わないので。
0233デフォルトの名無しさんNGNG
>>231
慣れというものがあるっしょう。
かく言う俺もConsole使ってる。_DEBUG定数でmainとWinMainを切り替えたりして。
0234デフォルトの名無しさんNGNG
>>233
WinMainを使っててもコンパイルオプションでコンソールが出る。
(少なくともMingwとlcc-win32では。)
いちいちWinMainとmainを切りかえるのは面倒じゃないか?
0235デフォルトの名無しさんNGNG
>>232
は?IDE?なんの関係が?
0236デフォルトの名無しさんNGNG
OutputDebugStringって、普通にコンソールに出力出来るのか?
0237デフォルトの名無しさんNGNG
...\Microsoft Platform SDK\Bin\winnt\Dbmon.Exe
0238デフォルトの名無しさんNGNG
>>234
IDE や Makefile 等で、リリース時とデバッグ時でリンカの設定も変えてるのでは?
んでソースの中では _DEBUG 見て main 生かしたり WinMain 生かしたりしてるとか。
0239224NGNG
>>230-238
有用な情報有難うございます。

今までWindowアプリは食わず嫌いでしたというか
機会がなかったので、食っていくのために少しオベムキョウして見ます。
0240 ◆Z0vd5w812U NGNG
>>234>>238
そう。Makefile中でコンパイルオプションとリンクオプションを変えてる。
#ifdefでmainとWinMainを切り替えてる。10行程度だし一回作ってしまえばあとは使い回し。

>>239
深淵なる糞APIの世界へようこそ。ガンガッテ下さい。
0241デフォルトの名無しさんNGNG
質問なんですが
猫でもわかるプログラミングのサイトのWindows SDK編 12章の
リソーススクリプトとヘッダの部分を教えてください。
お願いします。
0242デフォルトの名無しさんNGNG
>>241
先ずはそのサイトの該当ページを飽きるまで読んでください。
0243デフォルトの名無しさんNGNG
読んだのですがどこみていいのか わかりません
システムメニューのリソーススクリプトはのっているのでしょうか
これは12章以降を見るっていうことでしょうか
0244デフォルトの名無しさんNGNG
12章の内容ってシステムメニューいじってるだけやん。
自分で好きなようにダイアログリソース作ってよし。

ついでにおまいらに言っとくが、[閉じる(C) Alt+F4]の下にメニュー追加するやつは頃す。
0245デフォルトの名無しさんNGNG
>>244
タスクバー右クリから閉じようとした時、切なくなるね
0246デフォルトの名無しさんNGNG
>>244
cmd.exeのコトかー!
0247デフォルトの名無しさんNGNG
ひでまるのことかー!
0248デフォルトの名無しさんNGNG
>>244
*.chmファイルとか開いた時とか
0249デフォルトの名無しさんNGNG
バージョン情報が表示されるたびに学習能力のない自分に苛立ち手首を切りたくなります。
0250デフォルトの名無しさんNGNG
特定の外部アプリケーションのEDITウインドウの
ウインドウハンドルを拾うにはどうすればいいですか?
0251デフォルトの名無しさんNGNG
トップウィンドウから徹底的にさがしまくる
0252デフォルトの名無しさんNGNG
記録されている物理的なデータを暗号化する関数ってある?
例えば.txtの中身がaだけだととしても暗号化してrk&0 見たいに見えるようにするような
0253デフォルトの名無しさんNGNG
ない
0254デフォルトの名無しさんNGNG
DirectXを使わずにフルスクリーンウィンドウを作りたいのですが、その時解像度も指定する方法ってないですか?
0255デフォルトの名無しさんNGNG
ChangeDisplaySettings
0256254NGNG
たすかりました!
0257デフォルトの名無しさんNGNG
>>236
http://www.vector.co.jp/vpack/filearea/winnt/prog/debug/index.html
0258デフォルトの名無しさんNGNG
>>244
そんなもん人の勝手だろうが
0259デフォルトの名無しさんNGNG
メニューの折り返しも考慮してくれるAdjustWindowRectってありませんか?
0260デフォルトの名無しさんNGNG
>>244
MSDNライブラリも頃される対象になるわけだな・・・。
0261デフォルトの名無しさんNGNG
ない。仕方ないからWM_NCCALCSIZE投げて再計算してる
実際にウィンドウ作らないと計算できないのがイマイチだが
0262デフォルトの名無しさんNGNG
実際のところ、メニューが折り返されてもそれを意識しないアプリも結構多いな。
漏れはメニューに等幅フォント使ってるんで時々そういうのに出くわす。

折り返すのがイヤならReBarスタイルのメニューを使うという手もあるが
マンドクサそうだ。
0263デフォルトの名無しさんNGNG
>>261
WM_NCCALCSIZEを投げるサンプルみたいなものってどこかに無いでしょうか?
検索しても、WM_NCCALCSIZEに応答するサンプルしか見当たらず、
MSDNを見てもどのメンバを埋めてSendMessageするべきなのか検討もつきません。
0264デフォルトの名無しさんNGNG
リサイズするときはこんな感じになるのかな

int ResizeWindowByClient(HWND hwnd, int width, int height, int times_to_try=2)
{
  RECT rc = { 0, 0, width, height};
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc));
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc)+1);
  ::AdjustWindowRectEx(&rc,
    ::GetWindowLongPtr(hwnd, GWL_STYLE),
    ::GetMenu(hwnd) ? TRUE : FALSE,
    ::GetWindowLongPtr(hwnd, GWL_EXSTYLE));

  for (int i = 0; i < times_to_try; i++) {
    RECT client = rc;
    ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&client));
    if (client.right-client.left == width && client.bottom-client.top == height) {
      ::SetWindowPos(hwnd, NULL, rc.left, rc.top,
        rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER|SWP_NOACTIVATE);
      return true;
    }
    rc.right += width + client.left-client.right;
    rc.bottom += height + client.top-client.bottom;
  }
  // これしとかないと、変更予定だったサイズでメニューが折り返すときおかしくなる
  ::GetWindowRect(hwnd, &rc);
  ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&rc));
  return false;
}
0265デフォルトの名無しさんNGNG
俺はこんなのを使ってる
void AdjustWindowRect(HWND hwnd,int width,int height)
{
RECT wrect,crect;
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncwidth,ncheight;
ncwidth = (wrect.right - wrect.left) - (crect.right - crect.left);
ncheight = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncheight2 = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
if (ncheight != ncheight2)
{
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight2,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
}
RECT drect;
::GetClientRect(GetDesktopWindow(),&drect);
int x = wrect.left - (wrect.right > drect.right ? wrect.right - drect.right : 0);
int y = wrect.top - (wrect.bottom > drect.bottom ? wrect.bottom - drect.bottom : 0);
x = x < 0 ? 0 : x;
y = y < 0 ? 0 : y;
::SetWindowPos(hwnd,NULL,x,y,0,0,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
}
0266デフォルトの名無しさんNGNG
CD-ROMの入れ替えで、ファイルリストの情報を更新したいのですが、上手く行きません。
入れ替えると、WM_DEVICECHANGEが来て、
ボリュームラベルなどの情報は取れるのですが、アイコンが更新されません。
アイコンを更新するためにはどうしたらいいのでしょうか?
0267デフォルトの名無しさんNGNG
>>236 のツールのように他アプリの OutputDebugString 出力を取得するにはどうすればよいのでしょうか?
0268デフォルトの名無しさんNGNG
>>266
よくわからんけど、SHChangeNotifyRegisterで登録して、
SHCNE_UPDATEIMAGEを待ってから取得するのはどうだろう?
アイコン取得方法とかもうちょい詳細を晒せば、誰かもっといい答えをくれるかも。
0269デフォルトの名無しさんNGNG
>>268
ありがとうございます。
ただ、ドキュメントを見るとSHChangeNotifyRegisterはWin2K以降用なのでWin98では駄目みたいです。
アイコンはSHGetFileInfoで取得してます。
(フラグはSHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON)
0270デフォルトの名無しさんNGNG
>>267
そのツールにはソースが付いてるだろ。読め
0271デフォルトの名無しさんNGNG
>>269
Win98では隠しAPIかも。
www.geocities.com/SiliconValley/4942/
に載ってるので。

あとは、タイミングの問題に思えるので、ウェイト&リトライ入れるか
ポーリング入れるとか?
0272デフォルトの名無しさんNGNG
OLEドラッグ&ドロップをエミュレートするにはどうしたらいいのでしょうか?
ウインドウについてるプロパティリストを見ると、
OleDropTargetInterface と OleDropTragetMarshalHwnd というのがくっついているので、
IMarshalを使うのかなと想像してるのですが、IMarshalを使った事無いので検索しようにも
手がかりがつかめません。

検索のヒントだけでも良いので挙げてもらえないでしょうか?
0273デフォルトの名無しさんNGNG
エミュレートっていうのは分かりませんが、OLEドラッグ&ドロップを実現するには、
IDropSource、IDropTarget、IEnumFORMATETC、IDataObject等を実装する必要があります。

ドラッグ操作を開始するときは、DoDragDrop API(引数はIDataObjectとIDropSource)を
使用します。

ドラッグを受け付けるときは、RegisterDragDrop API(引数はIDropTarget)で
ドラッグ受け入れ用のインターフェイスを登録します。

RegisterDragDropで登録したあとは、いちおう念のため、IDropTargetを
CoLockObjectExternalでロックしておいたほうが安全のようです。
0274デフォルトの名無しさんNGNG
>>273
レスありがとうございます。
エミュレートというのは、プログラムからバッチ処理的に直接ドラッグ&ドロップをしたいということで、
DoDragDropによってできる通常のマウスによるドラッグドロップではないのです。

ウインドウハンドルやプロセスID等から直接ターゲットプロセスのIDropTargetを操作したいんです。
0275デフォルトの名無しさんNGNG
パスの取得方法について質問です
コマンドラインから
>hoge.exe "c:\aaa\bbb\ccc\ddd.txt"
と引数を渡してやったときに、フルパスからファイル名を除いた
c:\aaa\bbb\ccc\を取得したいのです。

ググった所、_splitpathでドライブ、ディレクトリ、ファイル名
に分割できる事はわかりましたが、一発でファイル名のみ除去できるAPIはないのでしょうか?
0276 ◆Z0vd5w812U NGNG
>>275
文字列のケツから'\\'を探して'\0'で置き換えればよいのでは?
0277デフォルトの名無しさんNGNG
練習問題としてはありなんですが、バックスラッシュとか、
多バイト文字が不味いんじゃないでしょうか

標準で安全なものがあればそれを使うのが最善でしょうけど、
MFCとか.NETとかでならメソッドがあるみたいなんですけど……
0278デフォルトの名無しさんNGNG
>>275
PathFindFileName()
0279デフォルトの名無しさんNGNG
>>270
デルフィーのソースを読むのは嫌です
0280デフォルトの名無しさんNGNG
>>274
なるほど。

反則的な技ですが、相手先のウィンドゥに直接WM_DROPFILESを送ってやることで可能です。
DROPFILES構造体用のメモリを確保し、そこに必要情報を書き入れ、相手先の
ウィンドウに送りつけます。

メモリ確保は、シェルAPIのSHGetMalloc(&pMalloc)でメモリインターフェイスを
取得し、pMalloc->Alloc()でメモリを確保します。

pMalloc->Alloc()で確保したメモリは異プロセス間で参照可能です。

pMallocを使用し終わった後はpMalloc->Release()を忘れないようにしてください。

なお、DROPFILESに入れるファイル名ですが、Windows NT系列ではUNICODE、
それ以外ではANSIで入れないといけないようです。
(DROPFILES::fWideも適切にセットする。)
0281280NGNG
あ〜。書いてしまった後でなんですが、これだと
>>直接ターゲットプロセスのIDropTargetを操作したいんです。
の希望に添えませんね…。
お役にたてなくてすみません。
0282デフォルトの名無しさんNGNG
>>274
UndocumentedだがOleDropTargetInterfaceプロパティに
IDropTargetのポインタが入ってる。
0283デフォルトの名無しさんNGNG
>>279
???
何でMSDNにDelphiのソースがあるの? 何か別のものを想像してないか?
0284デフォルトの名無しさんNGNG
>>282
他プロセスからじゃ操作できないんじゃね?
0285デフォルトの名無しさんNGNG
SetCursorPosでマウスカーソルを対象ウィンドウ上に移動してDoDragDropすればいける気もするが。
0286デフォルトの名無しさんNGNG
>>284
そこはDLL注入とかでがんがる
0287デフォルトの名無しさんNGNG
>>275
PathRemoveFileSpec()
0288デフォルトの名無しさんNGNG
・子ダイアログである
・そのダイアログ上にあるコントロールを触った後でも、フォーカスは常にメインウィンドウにある
・フォーカスの有無にかかわらず、タイトルバーは常に明るい(灰色ではない)

以上の条件を満たすダイアログって作れますでしょうか?

要するにMFCのフローティングリバーと同じ挙動なのですが…
我々はあれを指加えて見てるしか無いのかな(´・ω・`)
0289デフォルトの名無しさんNGNG
MFCならソース公開されてるじゃん。
0290288NGNG
>>289
すいません、書き忘れましたがVC++持って無いのがそもそもの悩みでして
公開されてるんですか。触りだけでもどなたか教えて頂けないでしょうか

MFCって、どこかで落とせるのかな…
0291デフォルトの名無しさんNGNG
>>288
そのダイアログで、WM_ACTIVATEに応答してアクティブにならないようにすればいいんじゃないの?
0292デフォルトの名無しさんNGNG
>>275
PathRemoveFileSpec
0293デフォルトの名無しさんNGNG
>>288
WS_EX_TOOLWINDOW にして WS_EX_NOACTIVATE しておけばいいんじゃない?
(Win2K / XP 以降ってことで)。
0294デフォルトの名無しさんNGNG
>>292
>>287
0295288NGNG
>>291-294
お二人ともレスありがとうございます
全て試してみましたが、しかしどうにも上手くいかないです。

・WM_ACTIVATE
メッセージが来たら親ウィンドウにSetFocusしてみましたが、何故か上手くフォーカスが移りません。

・WS_EX_TOOLWINDOW
リソースからダイアログを作り、後からexスタイルを変えた場合、
あるいは最初から自前でCreateWindowExした場合、いずれもフォーカスが無いときは
やはり灰色のタイトルバーになってしまいます…。

・WS_EX_NOACTIVATE
これは0x08000000でよろしいのでしょうか?
コントロールも含め、全てWS_EX_NOACTIVATEを指定してみましたが、
これもフォーカスは通常通りで…一応spyでスタイルが定まっているのは確認しました。

この際、タイトルバーの色が変わらない方法だけでも、詳しく教えて頂けないでしょうか。
私のWS_EX_TOOLWINDOWの使い方が間違っている気がします…。
0296デフォルトの名無しさんNGNG
>>295
WM_NCHITTEST/HTTRANSPARENT
0297288NGNG
>>296
レスありがとうございます。やってみたのですが、ちょっと問題が。
・マウスメッセージが来なくなる
・タイトルバーをつかんでダイアログのの移動が出来なくなる(これは何とかなるかな)
・コントロールには、結局フォーカスが移る
・なのでコントロールをサブクラス化してWM_NCHITTESTを処理すると、コントロールが固まる
・タイトルバーはやっぱり灰色

なんか否定的なレスばかりで申し訳ないです。
もうVC(MFC)買ってこようかな…。
0298288NGNG
そうか、すいません>>288の文が不明瞭でした

・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 (メインウィンドウのダイアログのタイトルバーが共に)、常に明るい(灰色ではない)

まぁ、見栄えが悪いっていう理由だけなので、いい加減諦めるべきですかね…。
0299デフォルトの名無しさんNGNG
・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 メインウィンドウのタイトルバーが共に、常に明るい(灰色ではない)

重ね重ねスマソ_| ̄|○
0300デフォルトの名無しさんNGNG
ファイルを開く、名前をつけて保存、のダイアログが存在するかどうかを認識するのには
どういう方法があるでしょうか?
0301デフォルトの名無しさんNGNG
>>297
MFCは
WM_MOUSEACTIVATE/ HTSIZEFIRST <= hittest <= HTSIZELAST で MA_NOACTIVATEを返し、
それ以外でDefWindowProcかな。

非アクティブでもタイトルバーの色がアクティブのままだったり、
他に細かい事いろいろやってるけど。
0302デフォルトの名無しさんNGNG
>>298
それ、結構前にMFCだかVC関連のスレで出てた気がする。
ログにgrep掛けたけど、ちょっと見当たらなかった。
0303デフォルトの名無しさんNGNG
>>297
よく探せば(海外も含めて)参考になるソースは転がっていると思うよ。
その時間を惜しんでVC++買ってきてサンプルを読むというのも間違ってないと思いますが。
0304デフォルトの名無しさんNGNG
仮想ドライブ FileDisk (http://www.acc.umu.se/~bosse/) というソフトのGUI化をVB6SP5で目論んでいます。
仮想ドライブの情報を得るために、

Device = CreateFile(VolumeName, _
GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
0, _
OPEN_EXISTING, _
FILE_FLAG_NO_BUFFERING, _
0)

でデバイスハンドルをを取得

Const IOCTL_FILE_DISK_QUERY_FILE = &H802
Dim rc
rc = DeviceIoControl(Device, _
IOCTL_FILE_DISK_QUERY_FILE, _
Null, _
0, _
OpenFileInformation, _
Len(OpenFileInformation), _
BytesReturned, _
0)

で、構造体変数OpenFileInformationにドライブ情報が収納されて戻ってくるはずなのですが
DeviceIoControlがエラー6(ハンドルが無効です。)を返してしてしまいます。
FileDiskのC言語のソースをVBに書き直しただけのつもりなのですが
何故、うまく動かないのでしょうか?
0305デフォルトの名無しさんNGNG
ちなみにVBに翻訳したい関数は↓です。

----
int FileDiskStatus(char DriveLetter)
{
char VolumeName[] = "\\\\.\\ :";
HANDLE Device;
POPEN_FILE_INFORMATION OpenFileInformation;
DWORD BytesReturned;

VolumeName[4] = DriveLetter;

Device = CreateFile(
VolumeName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL
);

if (Device == INVALID_HANDLE_VALUE)
{
PrintLastError(&VolumeName[4]);
return -1;
}

0306デフォルトの名無しさんNGNG
OpenFileInformation = malloc(sizeof(OPEN_FILE_INFORMATION) + MAX_PATH);

if (!DeviceIoControl(
Device,
IOCTL_FILE_DISK_QUERY_FILE,
NULL,
0,
OpenFileInformation,
sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
&BytesReturned,
NULL
))
{
PrintLastError(&VolumeName[4]);
return -1;
}
0307デフォルトの名無しさんNGNG
if (BytesReturned < sizeof(OPEN_FILE_INFORMATION))
{
SetLastError(ERROR_INSUFFICIENT_BUFFER);
PrintLastError(&VolumeName[4]);
return -1;
}

printf("%c: %.*s Size: %I64u bytes%s\n",
DriveLetter,
OpenFileInformation->FileNameLength,
OpenFileInformation->FileName,
OpenFileInformation->FileSize,
OpenFileInformation->ReadOnly ? ", ReadOnly" : ""
);

return 0;
}

----
0308デフォルトの名無しさんNGNG
ほげほげ
0309275NGNG
>287,292

PathRemoveFileSpec()で無事取得できました。ありがとうございました。
0310デフォルトの名無しさんNGNG
>>304-306
CでうまくいくのならそこをDLLにしてVBから呼び出すようにしたら?ちっとも解決にはなっていないけど。
0311デフォルトの名無しさんNGNG
>>304
よくわからんけど、
>char VolumeName[] = "\\\\.\\ :";
↑このへんと
>VolumeName[4] = DriveLetter;
↑このへんはちゃんと理解してますよね。
つまり、"\\.\C:" みたいな文字列が、VolumeName に入ってますよね?
0312デフォルトの名無しさんNGNG
>>311

>char VolumeName[] = "\\\\.\\ :";
>VolumeName[4] = DriveLetter;
↑がなんで4(5文字目)なのか解かっていませんが、自分のVBコードでは
VolumeName="\\.\" & DriveLetter
にしています。

そしてCreateFile関数で得られたDeviceにはINVALID_HANDLE_VALUEでない、
デバイスハンドルが取得されるところまでは成功しています。
が、その次のDeviceIoControl関数でエラー6(ハンドルが無効です。)となってしまうのです。
VBでデバイスコントールは難しいのでしょうか。

>>310
初心者な上に、VCも持っていないので、、


ちなみに>>305-307の関数をVBに↓のように書き直しました。
0313デフォルトの名無しさんNGNG

Public Function FileDiskStatus(ByVal DriveLetter As String) As Integer

  Dim VolumeName As String
  Dim Device As Long
  Dim OpenFileInformation As POPEN_FILE_INFORMATION
  Dim BytesReturned As Long

  VolumeName = "\\.\" & UCase(DriveLetter) & ":"

  Device = CreateFile(VolumeName, _
                GENERIC_READ, _
                FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                0, _
                OPEN_EXISTING, _
                FILE_FLAG_NO_BUFFERING, _
                0)

  If Device = INVALID_HANDLE_VALUE Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  With OpenFileInformation
    OpenFileInformation.FileSize.Low = 0
    OpenFileInformation.FileSize.high = 0
    OpenFileInformation.ReadOnly = False
    OpenFileInformation.FileNameLength = UBound(OpenFileInformation.FileName)
  End With

0314デフォルトの名無しさんNGNG
  Const IOCTL_FILE_DISK_QUERY_FILE = &H802
  Dim rc
  rc = DeviceIoControl(Device, _
                IOCTL_FILE_DISK_QUERY_FILE, _
                Null, _
                0, _
                OpenFileInformation, _
                Len(OpenFileInformation), _
                BytesReturned, _
                0)
  If rc = 0 Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  If BytesReturned < Len(OpenFileInformation) Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  Dim strFileName As String
  strFileName = OpenFileInformation.FileName
  MsgBox (DriveLetter _
        & OpenFileInformation.FileNameLength & " " _
        & strFileName & " " _
        & CStr(OpenFileInformation.FileSize.Low) & " " _
        & CStr(OpenFileInformation.ReadOnly))

  FileDiskStatus = 0

End Function
0315デフォルトの名無しさんNGNG
POPEN_FILE_INFORMATION 構造体定義

Type LARGE_INTEGER
Low As Long
high As Long
End Type

Type POPEN_FILE_INFORMATION
FileSize As LARGE_INTEGER
ReadOnly As Boolean
FileNameLength As Integer
' FileName As String
FileName(1 To MAX_PATH) As Byte
End Type

-----
0316デフォルトの名無しさんNGNG
VBのNullはVariantのNullなんだが問題ないんだろうか
0317デフォルトの名無しさんNGNG
ツリービューがデフォルトで持ってるツールチップの
DelayTimeを変更するのは不可能ですか?
0318デフォルトの名無しさんNGNG
TreeView_GetToolTips して TTM_SETDELAYTIME かな
0319デフォルトの名無しさんNGNG
>>318
それやったんですが、無視されてしまうようです。
色やマージンなどは変更できたんですが…
0320デフォルトの名無しさんNGNG
定義済みコントロールクラスのBUTTONで押されると押されたままになるボタンを作ることはできますか?
オーナー描画ボタンはめんどくさすぎるんで
0321デフォルトの名無しさんNGNG
>>320
ラジオボタンだか何かのスタイルにそんなの(ボタン風の)が合ったような気がする・・・
0322デフォルトの名無しさんNGNG
チェックボックス?
0323デフォルトの名無しさんNGNG
BS_PUSHLIKE
0324デフォルトの名無しさんNGNG
InvalidateRectやGetUpdateRectにわたす
RECTの幅と高さの計算はそれぞれ、

right - left + 1
bottom - top + 1

でいいでしょうか?
それとも、

right - left
bottom - top

でしょうか。
0325デフォルトの名無しさんNGNG
下
0326デフォルトの名無しさんNGNG
>>325
ありがとうございます!
0327304NGNG
>>316
Nullの代わりに0、""などを入れてみたところ今度はエラー1が出ました。
なんとなく次の段階に進めそうです。

と思ったのですが、FileDiskのGUIが見つかったので今回のプロジェクト?は中止します。
皆さん、ありがとうございました。
0328デフォルトの名無しさんNGNG
最後までやれよ・・・
0329デフォルトの名無しさんNGNG
>>327
vbNullString使え。
0330デフォルトの名無しさんNGNG
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow )
これの右側部分の意味っていうか、なぜhinstanceとか入れなきゃならないんですか?
これは任意の名前でもいいんですか?
0331デフォルトの名無しさんNGNG
>>330
まずC/C++の入門書読んで来い。このスレでする話じゃない。
0332デフォルトの名無しさんNGNG
これだからシロートさんは困る。
省略するな。
WinMain(HINSTANCE handle_for_Instance_of_this_Process, HINSTANCE handle_for_Instance_of_Previous_Process, LPSTR long_pointer_for_Command_Line_String)
0333デフォルトの名無しさんNGNG
>332
引数が一つ省略されてるのは仕様ですか?
0334デフォルトの名無しさんNGNG
s/)/, int state_for_how_the_window_is_to_be_Shown)/

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那
0335デフォルトの名無しさんNGNG
まぁ、WinMainの第二引数に名前つける奴は素人な訳だが。
0336デフォルトの名無しさんNGNG

50文字未満:神

WinMain(HINSTANCE a,HINSTANCE b,LPSTR c,int d)
0337デフォルトの名無しさんNGNG
HINSTANCE hInstance
HINSTANCE形の変数hInstanceてことですよね。
これは任意で名前変えても良いんですか?
0338デフォルトの名無しさんNGNG
>>337レス嫁

handle_for_Instance_of_this_Process
か
b

になら変えることが許されている。
0339デフォルトの名無しさんNGNG
憲法の解釈によっては問題ない。
0340デフォルトの名無しさんNGNG
WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {}
使わないからこれでいいんだよ
0341デフォルトの名無しさんNGNG
void WinMain(void);
0342デフォルトの名無しさんNGNG
>>338
だから任意で変えてもかまわないんですよね
0343337NGNG
hInstance を b にかえてみたら、

error : parameter "hInstance" not declared

やっぱり他の名前に変えたらだめなんじゃないですか!!
しろうとに嘘教えてそんなに楽しいですか?
ここはひどいインターネットですね。
0344デフォルトの名無しさんNGNG
>>343
おい、俺のフリするなや
0345337 ◆ZIIQIs.HCM NGNG
ニセモノが居るのでトリップつけてみました。
0346デフォルトの名無しさんNGNG
お前も質問者と一緒にどっか行け
0347デフォルトの名無しさんNGNG
void WinMainCRTStartup(void)
で。
0348337 ◆DeUsmjHgh2 NGNG
はー、トリップ付けたからって偽者が本物になるわけないでしょうに
0349337 ◆PIbfznOsNc NGNG
みんないいかげんにしてください。
0350337 ◆DeUsmjHgh2 NGNG
俺だけ下げてないから本物ってわかりますって
0351337 ◇DeUsmjHgh2NGNG
答えてくれるまで上げます。
0352337 ◆DeUsmjHgh2 NGNG
・・・もういいよ。お前ら人が悪いな。
0353デフォルトの名無しさんNGNG
>>331で終わってるんだよ。
0354デフォルトの名無しさんNGNG
いや、収穫もあったぞ。

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那

俺は見習いか・・・意外と当たるな。
0355デフォルトの名無しさんNGNG
つーかそんなのコピペで済ましてますがw
0356デフォルトの名無しさんNGNG
SetWindowsHookEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、フックの種類がいくつかあるようですが、
どういう場合にどのフックを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのフックとか解説している
サイトがあれば教えてください。
0357デフォルトの名無しさんNGNG
このへんとか
ttp://www.h3.dion.ne.jp/~toomo/html/fuck.html
0358デフォルトの名無しさんNGNG
変数名は大事だよ〜
特に1つのプロジェクトを複数人で組むときとか大事だよ〜
0359337 ◆DeUsmjHgh2 NGNG
そういえば皆さんはプログラム作るときに、コピーしまくってますよね?
0360デフォルトの名無しさんNGNG
マウスホイールの値を取得できるAPIはありませんか?
0361デフォルトの名無しさんNGNG
>>357
fuckて。明らかに英語間違ってるような。エロサイトかと思った。
腕時計を見るように腕を傾けるのはよくわかった。ありがとう。
0362デフォルトの名無しさんNGNG
GetWheel
0363デフォルトの名無しさんNGNG
>>357
rinku.htmlを見たとき以来の笑撃だ
0364デフォルトの名無しさんNGNG
マウスホイールの値とは?
0365デフォルトの名無しさんNGNG
>>357
( ゜д゜)・・・
0366デフォルトの名無しさんNGNG
fuck打ちまくり
0367デフォルトの名無しさんNGNG
356 名前:デフォルトの名無しさん[sage] 投稿日:04/08/28 13:20
SetWindowsFuckEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、Fuckの種類がいくつかあるようですが、
どういう場合にどのFuckを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのFuckとか解説している
サイトがあれば教えてください。
0368360NGNG
>>362
検索しても見つかりませんでしたが…。

>>364
ホイールをどれだけ回転させたかの値です。
WM_MOUSEWHEELメッセージのwParamの上位ワードのような。
0369356NGNG
>>357
フックの勉強にはなりましたが、
WH_CALLWNDPROC とか、 WH_GETMESSAGE とかに
ついての解説は残念ながらないようです。

それらについて解析したページお願いします。
0370デフォルトの名無しさんNGNG
msdn見ろカス
0371デフォルトの名無しさんNGNG
システムイメージリストのイメージとオリジナルのイメージを
ひとつのリストビューで使いたいのですが、
システムイメージリストにオリジナルのイメージを追加するのが良いのか、
システムイメージリストをコピーして使うのが良いのか、どちらでしょうか?

Win2kとかだと、システムイメージリストもアプリケーションローカルのようなので、
好きなように編集してよさそうなのですが、2kとXPしか環境が無いので
どういった作法がいいのか分かりません。
0372デフォルトの名無しさんNGNG
>>370
知らなけりゃ、だまっていいよ。
0373デフォルトの名無しさんNGNG
ぐぐるだけで日本語のサイトが見つかるだろう>>356
http://www.kab-studio.biz/Programing/Codian/ 等
0374デフォルトの名無しさんNGNG
SelectClipRgnした後、リージョンを削除するにはNULLを指定すればいいみたいだけど
選択前のリージョンに戻したい場合はどうすればいいのか分からないです。
SelectObjectの戻り値もオブジェクトではなく、ステータスだし・・・
0375デフォルトの名無しさんNGNG
windowの背景色をmenuの背景色と同じにするにはどうしたらいいですか?
0376デフォルトの名無しさんNGNG
hbrBackground = GetSysColorBrush(COLOR_MENU);
0377デフォルトの名無しさんNGNG
hbrBackground = (HBRUSH)COLOR_MENU;
0378デフォルトの名無しさんNGNG
>>373
レスありがとうございます。

しかし、WH_CALLWNDPROC  の説明として「すべてのメッセージ」と書いてありますが、
WM_KEYDOWN は通過しないようです。
一方、WH_GETMESSAGE も「すべてのメッセージ」と書いてありますが、
WM_ACTIVATE は通過しないようです。

WM_XXXXX をフックしたいときは、WH_XXXXXみたいな対応が
わかれば助かるんですが。

それと、WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
それならどちらを使っても同じなのか、それともそれぞれにどのような
メリット・デメリットがあるのかなどの解説は、ぐぐっても msdn でも見つけられませんでした。
(探し方が下手なのかもしれませんが)

どなたかご存じないですか?
あるいは、みなさんは、フックするときにどの WH_XXX を使うか、どういう基準で決めてますか?
よろしくお願いします。
0379デフォルトの名無しさんNGNG
>376
できました
ありがとうございました。
0380デフォルトの名無しさんNGNG
>>377
+1しないとだめ
0381デフォルトの名無しさんNGNG
>>378
難しいことは俺もわからんのだが、
WH_CALLWNDPROCとWH_GETMESSAGEの違いは分かってる?
名前の通り、WH_CALLWNDPROCの方はウィンドウプロシージャのフック。
WH_GETMESSAGEはメッセージキューのフック。

フックしたいものが、メッセージキューを通るのか、SendMessageみたいに直接プロシージャを呼び出すのか、
によって決めればいいんじゃないかな。

WM_KEYDOWNとWM_ACTIVATEがどういう風に送られるかは知らないので、自分で調べてください。
0382デフォルトの名無しさんNGNG
>>380
なんで?
0383デフォルトの名無しさんNGNG
>382
COLOR_SCROLLBARで何が起きるか考えて試してみな。
0384デフォルトの名無しさんNGNG
>>208を見たところ、プロセスごとのメモリ情報は>>210, >>212の方法で取得できるようですが、
スレッドごとのスタックサイズを取得する方法はあるのでしょうか?
ありましたら、教えていただきたいです。
0385デフォルトの名無しさんNGNG
あるスレッドがいまどんだけスタック食ってるかって
どうやったら分かりますかね?
0386デフォルトの名無しさんNGNG
>>374
SaveDC, RestoreDC
0387デフォルトの名無しさんNGNG
>>385
開始位置のSPを憶えておいて比較したいところで引き算するしかないね。
0388デフォルトの名無しさんNGNG
デスクトップマスコットを作っているのですが
リージョンを作成する系統の命令(CreateRectRgnなど)を
連続して呼びだすと、他のアプリの一部が無限にちらついてしまう現象が
起こります。(自作のマスコットアプリにかぎらず)
Exel2003やWord2003などの一部の図形を表示しているとかなりひどいです。
原因や回避方法をご存知のかたおられませんか?
0389デフォルトの名無しさんNGNG
>>378
WH_CALLWNDPROC は SendMessage() で送られてきたキューを通過しないメッセージ
しか捕まらない。だから WM_KEYDOWN は捕まらない。
反対に、WH_CALLWNDPROC はキューを通過するメッセージしか捕まらない。英語の
ヘルプやMSDNでは、キューを通るメッセージは posted 通らないのは sent と
なっているので区別できる。

>WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
>それならどちらを使っても同じなのか

同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
なのでオーバヘッドは小さいだろうね。専用なので間に合う場合はそれを
使った方がいい。
0390デフォルトの名無しさんNGNG
>>388
CreateRectRgnなどのリージョンをつくるAPIは、DCハンドルと関係ないでしょう。
ちらつく理由がないのでは? もしかして、つくるたびに描画してるかクリッピング
してるんでは?
0391デフォルトの名無しさんNGNG
UpdateLayeredWindowを使って半透明Windowを作っているのですが、
α値を持つ画像を表示すると
(下のWindowの色)*(1−α)+(半透明Windowの色)*α
ではなく
(下のWindowの色)*(1−α)+(半透明Windowの色)
となってしまうのは仕様でしょうか?
α値を持つ画像のR・G・Bに前もって自分でα値を掛けておかなくては駄目なのでしょうか。
0392デフォルトの名無しさんNGNG
ダメじゃありません
0393デフォルトの名無しさんNGNG
むぅ。何がいけないですか。
BLENDFUNCTION?BITMAPINFO?
0394デフォルトの名無しさんNGNG
そんだけで分かったらエスパーだ
0395デフォルトの名無しさんNGNG
ttp://azumaya.s53.xrea.com/index.php?page=doc/win32api/layeredwindow
ここに書いてあるとおりにやったのですが…。
0396デフォルトの名無しさんNGNG
…なんでDIBSection相手にGet/SetDIBitsしてるんだ?

>>391
後者のほうが描画時の演算コスト低いだろ? そういうことで納得しとけ。
0397デフォルトの名無しさんNGNG
Get/SetDIBitsは意味なさそうな感じだったのでやめておきました。
やっぱり前もってαを掛けておかないと駄目ですか…。
0398デフォルトの名無しさんNGNG
DLL側から、それを呼び出しているEXE側の使用しているメモリ範囲を
取得するようなAPIはないでしょうか?

やりたいことは、呼び出し元プログラムの使用しているコード領域と
データ領域から特定のバイト列を検索したいのですが範囲がわからないと
どこまで読み取ればいいのか決められません
0399デフォルトの名無しさんNGNG
>>398
VirtualQueryを駆使すればできそう
0400デフォルトの名無しさんNGNG
>>389
>キューを通るメッセージは posted 通らないのは sent と
>なっているので区別できる。
ここで見分ければいいんですね。勉強になりました。

ひとつのフックですませる方法はなさそうなので、
WH_CALLWNDPROC と WH_GETMESSAGE 両方フックすることにします。

>同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
>なのでオーバヘッドは小さいだろうね。
違いがオーバーヘッドだけなら、WH_GETMESSAGE でフックしておいて
パフォーマンスに問題がでたときだけ WH_KEYBOARD に変えるような
使い方にしたいと思います。

仕様の違いではまったりするのはイヤなんで・・・・。

ありがとうございました。
0401デフォルトの名無しさんNGNG
>>384
GetThreadContextでスタックポインタを拾って
VirtualQueryExでスタックポインタを含むメモリ領域のサイズを拾う
実際に試してないのでうまくいかなくても知らんが
0402デフォルトの名無しさんNGNG
INIファイルのセクション名を変更することってできますか?
MSDNを読んでみてもkeyに対する値の変更や削除については発見
できたのですがセクション名の操作に関しては発見できませんでし
た。
0403デフォルトの名無しさんNGNG
>>387
>>401
ソレしかないですかね。。。
ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
直接は無理そうです
VirtualQueryExで辿ってみます・・・
0404デフォルトの名無しさんNGNG
>>402
GetPrivateProfileSection(A, buffer)
WritePrivateProfileSection(B, buffer)
WritePrivateProfileSection(A, "")
ではどうだろう、と思ったが元のセクション名が残っちゃいそうだな。
テキストファイル操作で書き換えるのが早いんでないの。
0405デフォルトの名無しさんNGNG
>>404
WritePrivateProfileSection(A,NULL,filename)
で完全に削除できなかったっけ?
0406402NGNG
>>404-405
レスありがとうございます。
完全に削除する場合は>>405さんの言うようにすればいいのですが、
特定のセクション名だけを変更したかったので無理みたいですね。
テキストファイル操作のほうが早いみたいなのでそうしてみます。
ありがとうございました。
0407405NGNG
>>406
いや、特定のセクションだけ削除できるんだけど…。

セクションじゃなくてキーの名称を変更したいのかな?
0408388NGNG
>>390
どうやらさらに調べると
CreateRectRgnではなくて
ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと、
Exeelなどで相性が悪いようです。

うーん、何でだろうなあ
0409デフォルトの名無しさんNGNG
>>408
形状をいじりたいだけなら、LayeredWindowにしてはどうですか?
これならパフォーマンスあまり落ちませんよ
0410デフォルトの名無しさんNGNG
>ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと

そりゃ、描画に影響するクリッピングを繰り返すわけだから当然。なぜ、まとめて一回に
しないのか不思議。
0411388NGNG

>>409
ありがとうございます、しらべてみます



>>410
アニメーションさせたいからです
0412デフォルトの名無しさんNGNG
便乗して質問したいのですが、
レイヤードウィンドウを使う仕様にした場合でも、
win98やMEで動作させる方法はあるんですよね?

友達の家のPCで動かしたいんですが、
user32.dll?がなかったので動きませんでした。
調べても説明が端折られてて理解できなかったので、
1から学びたいのですが。
0413デフォルトの名無しさんNGNG
> アニメーションさせたいからです

アニメーションするのにクリッピング? 透過描画はできないの?
0414デフォルトの名無しさんNGNG
プリンタのスプーラの状態を監視するプログラムを作りたいのですが
どういったAPIを使えばいいのでしょうか?

作りたいプログラムはAというプログラムで、別にBとCというプログラムが
存在し、例えばBというプログラムが印刷をプリンタに依頼したら、
Aプログラムがリアルタイムにそのイベントを察知し、なおかつ印刷を
Bが依頼したという事をわかるようにしたいのですが・・・

抽象的な質問でスマソ
0415387NGNG
>>403
>ソレしかないですかね。。。
単純にSPだけ見たいのなら
int dat;
_asm mov dat, esp
でできるよ。VC6+x86系

>ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
>直接は無理そうです
デバッガで追うしかないな。
0416デフォルトの名無しさんNGNG
>>412
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp
>WS_EX_LAYERED
>Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows.
> Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
0417デフォルトの名無しさんNGNG
普通のウィンドウを子ウィンドウとして作成すると
ウィンドウプロシージャにWM_CREATEメッセージが送られてしまいます。
これを何とか送られないようにする方法はありませんか?
0418デフォルトの名無しさんNGNG
作成しないか、WM_NCCREATEでFALSEを帰す
0419デフォルトの名無しさんNGNG
>>415
というかGetThreadContextというキーワードはすでに与えたんだがなあ
0420デフォルトの名無しさんNGNG
>>419
ソースのないライブラリの奥底で呼ぶことはできんでしょ。
0421デフォルトの名無しさんNGNG
>>420
それはインラインアセンブラでesp見るのも同じでしょ
0422デフォルトの名無しさんNGNG
InvalidateRectでたとえばA(0,0)-(20,15)、B(100,0)-(20,115)の二つの領域をアップデートしたいのですが、

InvalidateRect(hwnd, A, TRUE);
InvalidateRect(hwnd, B, FALSE);

とすると、両方とも背景が消去されてちらついてしまいます。
それぞれのInvalidateRectにUpdateWindowを挟むと
WM_PAINTを二回呼び出す事になって無駄が多すぎます。

何か良い手はないでしょうか
0423デフォルトの名無しさんNGNG
WM_ERASEBKGNDをどうにかする。
0424デフォルトの名無しさんNGNG
>>422
そこでInvalidateRgn()の登場ですよ
0425デフォルトの名無しさんNGNG
タスクバーのように、デスクトップの作業領域を少し狭めたいと思っています。
RECT r = DefaultWorkArea;
// r設定
SystemParametersInfo(SPI_SETWORKAREA, 0, &r, SPIF_SENDCHANGE);
とかやってみたのですが、少し足りない感じです。たとえば、最大化していて
スクリーンセーバーになり、セキュリティの関係でログオン画面に戻る設定に
してあると(今使ってるのはXP)、再びログオンしたときに最大化していた
ウィンドウがめり込んでいます。
何が足りないのでしょう。
0426デフォルトの名無しさんNGNG
AppBarかDeskBandにしとけば?
0427デフォルトの名無しさんNGNG
そもそもタスクバーとかは特別なウィンドウなんですか。
じゃあしょうがないのかなー。
今やってるのはランチャーの改造です。
具体的にはNCW。やっぱソース公開していただくとありがたいですね。
0428デフォルトの名無しさんNGNG
>>426が言うように SHAppBarMessage の説明みて AppBar にするのが吉。
0429デフォルトの名無しさんNGNG
ini関連のAPIについての質問です。
GetPrivateProfile〜やWritePrivateProfile〜は、WinNT系OSでは
レジストリにマッピングされることがあるそうですが、実際上
どのくらいの頻度でそのような設定になっているのでしょうか?
0430デフォルトの名無しさんNGNG
頻度ってなんじゃ?
3回に1回はiniに書き込まれたりするのか?
0431デフォルトの名無しさんNGNG
何かすごく勘違いしている模様だ
0432デフォルトの名無しさんNGNG
WindowsAPIを使う上でWindows特有の型がたくさんあるわけですが
文字列ひとつとってもPTSTR、PCTSTR、LPCSTR、LPSTRなどなど
この辺の変数を使うときに、結構適当な扱いをしても動いてしまうため
もしかすると間違ったまま使っているかもしれません

型定義について詳しく正確に書かれているWEBや本はないでしょうか?
探した範囲では、どの資料も正確さに欠けていて
いまいち期待通りのものがありませんでした

一度きちんと勉強したいので・・・
0433429NGNG
申し訳ありません。言葉がなっておりませんでした。先ほどの質問の
意図するところは、「ini関連のAPIにおいて、レジストリにマッピング
される条件はどのようなものか確認したい」ということです。Platform
SDKのヘルプを見る限りでは、私は「独自にiniファイルを作った場合
にはレジストリには書き込まない」という解釈を行ったのですが、
それでよろしいでしょうか。
0434デフォルトの名無しさんNGNG
>>432
ヘッダを読めば?
0435デフォルトの名無しさんNGNG
>>422
というか、レジストリにマッピングするためにはそのように設定しなきゃ
ならない。そう設定しない限りはマッピングされない。
0436デフォルトの名無しさんNGNG
>>432
MSDNに全部書いてある。
0437デフォルトの名無しさんNGNG
俺、TCHAR * と const TCHAR * しか使ってないや…
0438デフォルトの名無しさんNGNG
LPSTR Pointer to a null-terminated string of 8-bit Windows (ANSI) characters.
LPWSTR Pointer to a null-terminated string of 16-bit Unicode characters.
LPTSTR An LPWSTR ifUNICODE is defined, an LPSTR otherwise.

LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters.
LPCTSTR An LPCWSTR ifUNICODE is defined, an LPCSTR otherwise.
0439デフォルトの名無しさんNGNG
↑LPを脳内でルプって呼んでたけどやっぱエルなんだ。>>432のばか
0440デフォルトの名無しさんNGNG
InitCommonControlsExにICC_STANDARD_CLASSES渡したら
失敗する・・・。
というか、このフラグに何の意味あるのか分からんが。
0441デフォルトの名無しさんNGNG
>>440
Win98だけど別に失敗はしないよ。

> ICC_STANDARD_CLASSES
> Load one of the intrinsic User32 control classes.
> The user controls include button, edit, static, listbox, combobox, and scrollbar.
確かにわざわざ指定する意味はないように思えるね。
0442デフォルトの名無しさんNGNG
そうですか、動きますか
うちはXPなんですが
manifestでコモンコントロールを6.0.0.0に指定してるのが
いけないんだろうか
ググってもそれらしい情報ないし、
それともうちの環境が変なだけなのかもしれない
0443デフォルトの名無しさんNGNG
RichEditコントロールで保持しているRTFフォーマットのサイズを取得したいのですが、、
現状ではコールバックではデータをファイルに書き込まず、
コールバックに渡されるサイズを合計して合計を求めていますが効率がいいとは言えません。
もっと他にサイズを求める手段はありますか?

RTFデータをファイルに単体のRTFファイルとして書き込むのではなく、
メモリーに出力する為の確保するメモリ量を知りたいんです。
0444デフォルトの名無しさんNGNG
コントロールパネルに表示されるアイテムのコメントや、
ごみ箱内のファイルの「元の場所」や「削除した日」を取得するAPIってありますか?
0445デフォルトの名無しさんNGNG
質問です。

SendMessage(hWnd, WM_GETTEXT, 256, lpszTmp);
とやって、他アプリケーションのエディットコントロール内の文字列を取得してみようと試みました。
メモ帳やEdMax(フリーメーラー)のものは簡単に取得できたのですが、
IEやOutLookのエディットコントロールから取得しようとすると""が返って来てしまいます。

例えばIEでGoogleで検索文字列を入れる部分などです。
IEなどのMS製品は、何か特殊なことがされていて、取得できないのでしょうか?
0446デフォルトの名無しさんNGNG
>>445
そもそも、IEの入力フォームがウィンドウかどうかって問題があるが・・・

spy++で試したが、どうもウィンドウじゃなさげ
0447デフォルトの名無しさんNGNG
>>444
IShellFolder2::GetDetailsOf ?
0448デフォルトの名無しさんNGNG
>>445
わかってるかとは思うが他のアプリに素のSendMessageは
巻き込まれキケンのおそれ。質問に関係ないけど一応。
0449デフォルトの名無しさんNGNG
>>445
CB_GETEDITSEL
EM_GETTEXTEX
あたりは試した?試して報告してみて。
0450デフォルトの名無しさんNGNG
>>446
エディットコントロールって言ってるんだから、アドレスバーとかの話じゃないの?
アドレスバーだったら、コンボボックスだから、さらにその中のエディットコントロールを
取得しないとダメだったきがする。
0451446NGNG
>>450
>例えばIEでGoogleで検索文字列を入れる部分などです。
って、あったのでフォームかな?、と

よく考えれば、Googleツールバーてのもあったな
漏れは使ってないけど・・・
0452デフォルトの名無しさんNGNG
test
0453デフォルトの名無しさんNGNG
test
0454444NGNG
>>447
ありがとうございます。期待どおりの結果を取得できました。
0455デフォルトの名無しさんNGNG
ビットマップについて質問です。

BITMAPINFOの説明なのですが、biCompressionがBI_RGBの場合、
bmiColorsはNULLであると言う説明がいまいちわかりません。
bmiColors[0]の各要素が0である事を指すのか、それともbmiColors自体が存在しないで
メモリイメージはBITMAPINFOHEADERと同一のものに鳴るのか、どちらなのでしょうか?
0456デフォルトの名無しさんNGNG
やや、ありがとうございます

>>446
なんと、ウインドウではないのですか?
hWndはとれて、SendMessageでWM_CHARなどを送ると反応するので、Windowだと思いますが

>>449
他アプリに勝手に干渉するあたり、危険は承知です

>>449
今から試してみます

>>450-451
やや、失礼しました。フォームのことです。
0457デフォルトの名無しさんNGNG
>>456
君はプログラマの素養がないので、今すぐあきらめた方がいいな。
0458デフォルトの名無しさんNGNG
>>457
ヤメレ、無駄に煽るのは。
0459デフォルトの名無しさんNGNG
>>446での指摘の通り、どうも普通のウインドウではなさげです。
>>449での指摘の通り、通常のウィンドウとは違く、リッチテキストかもしれません。
リッチかな?という方向で調査してみようと思います。

特になければしばらく調査ですのでカキコしないと思いますが、
何か情報ありましたらよろしくお願いいたします。ここ自体は見ていますので。
0460デフォルトの名無しさんNGNG
>>459
リッチテキストですらないけどな。
たとえばゲームの中のメニューの内容を外部のアプリケーションから取得できるか?

IEのウインドウからDOMを取得して構造解析するしかない。
0461446NGNG
>>459
フォームに値を設定・取得することなら
IEコンポーネント使えばいける

IEコンポーネントスレなくなっちゃってるんで、
過去ログだが、この辺読むと少しは分かるかも

http://pc5.2ch.net/tech/kako/982/982930049.html
0462デフォルトの名無しさんNGNG
>>455
なんかまるっきり間違ってるが、どこの何を参考にした?
0463デフォルトの名無しさんNGNG
>>462
どこが間違っているのかわっぱり見当つきません。
よろしければ教えてもらえませんか?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1rw2.asp
biBitCount
16 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.
24 The bitmap has a maximum of 2^24 colors, and the bmiColors member of BITMAPINFO is NULL.
32 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.

です。

非パレットベースのビットマップファイルの場合はRGBQUADに相当するデータが存在しないのはわかるのですが
DIB関数に渡すときはどう指定するべきなのかが分からないんです。
0464デフォルトの名無しさんNGNG
>>463
一般にbmiColorsが必要ない場合にはBITMAPINFOHEADERを確保して、それへのポインタをBITMAPINFO*にキャストする。

ただし、biBitCountが16以上で、biCompressionがBI_RGBであってもbiClrUsedが0でないの場合にはbmiColorsが使用される。
0465デフォルトの名無しさんNGNG
MFCを使わないで分割ウィンドウを作るにはどうしたらいいのでしょうか?
MFCを使えばCSplitterWndで出来るようなのですが使わない場合については
わかりません。
やり方のわかる方、説明お願いします。
0466デフォルトの名無しさんNGNG
>>456
SendMessageTimeoutとかモアベターよぐらいの意味>危険
0467デフォルトの名無しさんNGNG
>>465
ttp://zidney.define.jp/programing/
ttp://www.kumei.ne.jp/c_lang/index_sdk3.html
0468デフォルトの名無しさんNGNG
PostMessage()でいいやん?
0469デフォルトの名無しさんNGNG
>>468 ハァ?

って言えばいいのかな。
0470465NGNG
>>467
ありがとうございます。
教えてもらったページを参考にやってみたいと思います。
0471デフォルトの名無しさんNGNG
タスクバーもどきを作りたいのですが、
他プロセスのウインドウのアイコンの取得方法がわかりません。
検索キーワードとかでもいいのでヒントだけでもお願いします。
0472デフォルトの名無しさんNGNG
WindowProc(メッセージ処理コールバック関数)に渡されるメッセージID(uMsg)をメッセージ文字列に変換する関数はありますか?
例えば、WM_CREATEなら"WM_CREATE"にするような。
イベントの発生状況を知りたいのだけれど、数値IDだと読み解くのがめんどくさい。
0473デフォルトの名無しさんNGNG
>>472
API としては存在しないと思うので、
http://cvs.sourceforge.net/viewcvs.py/peace/peace/dll/ui.so/dumpmessage.c?rev=1.4&view=markup
からコピペで。
0474デフォルトの名無しさんNGNG
>>473
うおっ、速攻ありがとう。
やはり無いのか。。。。それ使います。サンクス!
0475デフォルトの名無しさんNGNG
セーフモードで起動したときも、
自作プログラムを自動実行させられる手段ってないのでしょうか?
0476デフォルトの名無しさんNGNG
>>475
ウイルスでも作るつもりか糞野郎
0477デフォルトの名無しさんNGNG
簡単に釣られすぎ。
0478デフォルトの名無しさんNGNG
>>471
思い切り勘だけで答えると
1.プロセスからモジュール取得(EnumProcessModuleとか?)
↓
2.モジュールからアイコン取得(SHGetFileInfoとかLoadIconとか?)
という手順かなあ?
外してたらごめんな
0479デフォルトの名無しさんNGNG
>475
何しぇるために必要なのかにゃ?
0480デフォルトの名無しさんNGNG
DrawCaptionつー、わりとまんまなAPIがあったりするわけだが。使ったことないから詳細は知らんが。
0481475NGNG
普段、特殊な認証をして社内のリソースに繋いでいるんですが、
マシンのメンテの時にそれをいちいち手動でやらなきゃいけないので。
マシンの数が多いんですよ。

方法がないんだったらしようがないんですが。
0482デフォルトの名無しさんNGNG
意味がわからん。
0483デフォルトの名無しさんNGNG
セーフモードにしてメンテする理由がわからん
0484デフォルトの名無しさんNGNG
>>475
漏れはこれ、ないって認識なんだがそれであってる?他の人。
(あっても内容を答える必要はないと思うが。)
0485デフォルトの名無しさんNGNG
ウィルス駆除とかじゃないの?
0486デフォルトの名無しさんNGNG
>>484
2個ほど思いついたけど。
Tで設定するのとSの設定変えるのと。
0487486NGNG
本当に出来るかは試したことないからわからないです
0488デフォルトの名無しさんNGNG
>>478
それだと目的のウインドウで使われているアイコンと関係ないアイコンしか取れないですよね
DLL Injection使うしかないんでしょうか
0489デフォルトの名無しさんNGNG
>>488
普通に WM_GETICON じゃダメなんですか?
0490デフォルトの名無しさんNGNG
EXCELでAPI使いたいんですが、
APIビューアがないんです。
どこにあるんでしょうか?
0491デフォルトの名無しさんNGNG
SetWindowRgnでキャラクタの形をしたウインドウを作りました。
そこに時刻を表示して、今では時計の役割をしています。
非常に愛着があって、いつも画面の右上に置いているのですが少し問題が
あります。
パソコンを起動するたびに、このEXEを実行する必要があるのです。

この問題を解決する方法はないでしょうか。
表示位置はINIファイルに記憶しているので大丈夫です。
0492デフォルトの名無しさんNGNG
スタートアップ
0493デフォルトの名無しさんNGNG
>>490
探してみれ。そして見つかった場所をここに書き込め。
0494デフォルトの名無しさんNGNG
IEってどういった描画の構造をとっているんでしょうか?
BeginPaintとEndPaintをフックしてWM_PAINTを投げてみたのですが、
全く描画されないばかりかフックした関数が呼ばれません。
メモ帳などではきちんとフックに成功してるんですが・・・
0495デフォルトの名無しさんNGNG
普段 SendMessage の WM_CHAR を使ってキーイベントを送っていたのですが、
とあるアプリケーションがどうやら DirectInput でキーを拾っているようで、
SendMessage では反応してくれません。
こういう場合、どういう API でキーを送ればいいでしょうか?
0496デフォルトの名無しさんNGNG
keybd_eventは反応したっけ
0497デフォルトの名無しさんNGNG
CreateDIBSectionで作った画面が何故か真っ黒なんだけどどこでも指定したつもりはないんだけど
どうゆうことでしょう?
0498デフォルトの名無しさんNGNG
age
0499デフォルトの名無しさんNGNG
>>496
keybd_even も反応しないみたいです。
0500デフォルトの名無しさんNGNG
>>494
IE のブラウザ部分は全てオフスクリーンに描画して画面へ転送ってな感じでやってるみたいです。
(除く windowless に対応していない ActiveX の部分)

ページの中身の絵が欲しいのなら、WebBrowser コントロールで表示して GetDocument した
IHTMLDocument (?) あたりで OleDraw すると描けたような記憶があります。
また、時間と興味があるなら、IHTMLPainter インタフェイス辺りから調べていくのもアリかもしれません。

でも BeginPaint も呼んでいないってのは面白いですね。
0501デフォルトの名無しさんNGNG
>>497
どうなってれば納得できます?

で、黒ってデータ(数値)としてはどうなってると思います?
0502デフォルトの名無しさんNGNG
>>497
Windows 9X、Millenium ではゴミデータが入ってたような気がする。
NT 系の OS ではセキュリティ上の配慮のため、確保されたメモリは既にクリアされてる。
0503デフォルトの名無しさんNGNG
>>499
>keybd_even も反応しないみたいです。

反応するよ。
仮想キーコードじゃなくてスキャンコードを送信すればいい。
dinput.hに書いてある、仮想キーマクロ DIK_????? を参考にしてみれ。
ちなみにキーボードデバイスでサポートしてないキー入力送信は無理。
英語キーボードの「半角/全角」キーに相当するアンサン・グラブ(DIK_)は、
日本語キーボード環境だとうまくDirectInputに送信できない。

「A」キーのキー入力を送信する例:
#include <dinput.h>
WORD key = DIK_A;
keybd_event(0, key, 0, 0);
keybd_event(0, key, KEYEVENTF_KEYUP, 0);
0504デフォルトの名無しさんNGNG
>>501,502
画面全体が真っ白になって欲しいです。
メモリはクリアされていて黒ってことはデータ的には0が入っているってことですかな?

具体的に白くするにはどうすればいいんだろ。
0505デフォルトの名無しさんNGNG
>>504

24ビットDIBSectionなら

FillMemory(lpPixel, iWidth * iHeight * 3, 0xff);

とか(lpPixelがピクセル列のバッファの先頭アドレスね)。
0506デフォルトの名無しさんNGNG
>>505
あー。なるほど。32で作ってましたけど出来ました。thx!
0507デフォルトの名無しさんNGNG
>>503
おーなるほど。これで上手くいきました。
あとは文字列からスキャンコードへの変換ルーチン書けば行けそうです。
ありがとうございました。
0508デフォルトの名無しさんNGNG
つーか、WM_PAINTを横取りしようと思うと無効領域も手当てせんといかんやろ。
0509デフォルトの名無しさんNGNG
>>508
乗っ取ったFakeBeginPaintで領域を制限しなければ良いと思うんだけど、、、

HDC FakeDC = ...;
HDC WINAPI FakeBeginPaint(HWND hwnd, PAINTSTRUCT* ps)
{
 ::ZeroMemory(ps, sizeof PAINTSTRUCT);
 ::GetClientRect(hwnd, &ps->rcPaint);
 return ps->hdc = FakeDC;
}
0510デフォルトの名無しさんNGNG
なんだかこちらのスレに誘導されたので、失礼します。
http://pc5.2ch.net/test/read.cgi/tech/1093996761/41-42

なんだかこっちでもスレ違いな気がして気が引けます…
0511デフォルトの名無しさんNGNG
スレは違わないと思う。
0512デフォルトの名無しさんNGNG
プログラムになにか法則みたいなものありますか?

これを書いたらこれを書けみたいな

0513デフォルトの名無しさんNGNG
(を書いたら)を書け。
[を書いたら]を書け。
0514デフォルトの名無しさんNGNG
ぬるぽを書いたらぬるぽを書け。
0515デフォルトの名無しさんNGNG
>>514
ガッ
0516デフォルトの名無しさんNGNG
右の頬をかいたら左の頬をかけ。
0517デフォルトの名無しさんNGNG
「たらちねの」の次には「母」と書け
0518デフォルトの名無しさんNGNG
「真剣」と書いたらマジと読め
0519デフォルトの名無しさんNGNG
拝啓と書いたら敬具と書け
0520デフォルトの名無しさんNGNG
肉を煮込んだら灰汁を取り除け
0521デフォルトの名無しさんNGNG
鰹節をかいたら鍋を火にかけ
0522デフォルトの名無しさんNGNG
「姉さん」と書いたら「事件です」と書け
0523デフォルトの名無しさんNGNG
流れをぶったぎって失礼します。
RegisterClassにわたすクラス名は
ユニークでなければいけませんか?
0524523NGNG
しっかり書いてありました。
すみません、すみません。
0525デフォルトの名無しさんNGNG
恥をかいたら頭を掻け
0526デフォルトの名無しさんNGNG
BitBltとかStretchBltで、転送元、先のHBITMAPが同じでも大丈夫なんでしょうか。
画面のスクロールの処理の時に、そうなってしまうのですが。
0527デフォルトの名無しさんNGNG
>>526
スクロールの方向によってはえらいことになる。
0528526NGNG
>>527
詳しくお願いします。
方向ということは、もしかしたら、端を飛び越したときとかですかね。
0529デフォルトの名無しさんNGNG
なぜ転送先にHBITMAPが?
0530526NGNG
>>529
言葉が足りませんでした。SelectObjectしたHDCです。
0531526NGNG
>>529>>530
あっ、そういう意味ではないですね。
裏ビットマップに書きたいのでHBITMAPと言いました。

スクロール前の裏ビットマップの、スクロールしても残る位置を、
同じ裏ビットマップに描いて、残りを部分は新たに描くという感じです。
0532デフォルトの名無しさんNGNG
>>528
527じゃないが

int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for(int i = 0; i < 9; ++i)
a[i + 1] = a[i];

多分こんなようなことになると思う。
0533デフォルトの名無しさんNGNG
そういうことなら、「重なる部分は自分で考慮しないと何が起こるかわからん」が答えでないかと。
重ならない領域の転送なら、なんも問題無いよ。
0534デフォルトの名無しさんNGNG
んなもんBitBlt側で考慮してくれて、重なろうが問題なさそうだけど。
MoveMemoryみたく。
0535526NGNG
>>532
詳しく説明していただき、ありがとうございました。

>>533
自分もそんな感じに考えていました。
変更前の物を転送した後に、変更されるならいいのですが、
逆だとどうなるのかなと。実験してみます。
0536526NGNG
>>534
そうだといいのですが。実験してみます。
0537デフォルトの名無しさんNGNG
スクロール操作だとわかるならScrollDCすればいいんじゃないんですか?
0538526NGNG
おなじHBITMAPだと絵が変更されていませんでした。戻り値は正常でした。
ただ、別のプログラム中に、強引に作ったので、
ちゃんとすればできるかもしれません。

>>537
ありがとうございます。調べてみます。
0539デフォルトの名無しさんNGNG
質問です。
デスクトップカレンダーのように、常に背景に表示されているソフトを作りたいと考えています。
「常に最背面に表示」はできるようになったのですが、
「デスクトップの表示」ボタンを押すと隠れてしまいます。
何かいい方法はないでしょうか。
0540デフォルトの名無しさんNGNG
MFCで作ったアプリって、別段ライブラリを一緒に配布したりしなくても動きますか?
0541526NGNG
>>537
RECTが分からないので勉強してみます。
0542デフォルトの名無しさんNGNG
>>540
faq

static link
0543デフォルトの名無しさんNGNG
>>539
壁紙をカレンダーに摩り替える。
0544(・∀・)ニヤニヤNGNG
>>539
WM_SIZEで最小化されたことを検知して、
自分で元に戻してやればいいんじゃねーの?
0545デフォルトの名無しさんNGNG
>>542
そのものに組み込めと言うことですか・・・
MFCってMSのライブラリのくせに、標準じゃないんでしょうか・・・
0546デフォルトの名無しさんNGNG
イヤだったら付けずに出して、「動かない」と文句言ってきた客には
「あなたの環境は標準的ではありません」と突っ返せばよし。
0547デフォルトの名無しさんNGNG
>>545
スレ違いだ

MFCスレに行きやがれ
0548デフォルトの名無しさんNGNG
>>545
パソコンは起動時にWINDOWS.EXEを実行して起動されます。MFCはこの中にはいっています。
それでも動かないのならあなたは不正なVisualStudioを使っていることになります。
恐らくコピー版を使っていると思われるのでMicrosoftに通告しときます。ご愁傷様でした。
0549デフォルトの名無しさんNGNG
すんません
お騒がせしました
0550539NGNG
>> 543
新しい壁紙にすると、カレンダーをD&Dで移動させるときに難しそうなので避けてました。

>>544
「デスクトップの表示」ボタンを押したときには、WM_SIZEのメッセージはこないみたいです。

0551デフォルトの名無しさんNGNG
そういえば、自分のパソコンに始めから付いていたDrag'n Drop CDも、
デスクトップの表示ボタンを押すと消える。
別の何かを開くと、復活するけど。
同じような現象なのかな。
0552539NGNG
>> 551
同じ現象だと思います。
例えばSamurizeなんかは理想の挙動になっているのですが・・・
0553デフォルトの名無しさんNGNG
>>552
spy++でどんなメッセージが来てるか調べれば?
0554539NGNG
>>553
はい。調べました。
「デスクトップの表示」ボタンを押してもメッセージは送られていないようです。
0555デフォルトの名無しさんNGNG
>>554
本当に調べた?
思いっきりWM_SIZE送られてるんだけど。
0556デフォルトの名無しさんNGNG
WM_SIZE(SIZE_MINIMIZEDとSIZE_RESTORED)がキッチリ来るな。
何を調べたのかと(ry
0557539NGNG
>>555
>>556
すいません。確認してみたら、普通のアプリケーションだったらメッセージがくるようですね。
調査不測でした。

調べてみたところ、私のプログラムでは親ウィンドウを作成する際に、WS_EX_TOOLWINDOWを指定していたため、
子ウィンドウにWM_SIZEがこなかったようです。
(WS_EX_TOOLWINDOWを指定したのは、親ウィンドウをタスクバーに表示させない為です)

ここら辺を直せばメッセージをキャッチできそうですね。
お手数おかけしました。
0558デフォルトの名無しさんNGNG
mallocと書いても、freeと書かなくてもよい
0559デフォルトの名無しさんNGNG
windows.exeって何
0560デフォルトの名無しさんNGNG
>>559
windows.comのこと?
0561デフォルトの名無しさんNGNG
windows.mpg
0562560NGNG
win.comだったorz
MFCって別の(ry

一応、張っておきますね
■MFC相談室 mfc11.dll■
ttp://pc5.2ch.net/test/read.cgi/tech/1088084875/
0563デフォルトの名無しさんNGNG
int型の変数をTextOutで描画しようとするとエラーになってしまうのですが、
intを描画するにはどうすればいいですか?
0564デフォルトの名無しさんNGNG
>563
wsprintf
0565デフォルトの名無しさんNGNG
>564
sptintfとの違いはあるのでしょうか?

それと、MFC使うよりもWin32APIで作った方がプログラム実行が僅かに
速いって本当なんでしょうか?
0566デフォルトの名無しさんNGNG
wsprintfはfloat使えないぞ!気をつけろ!

> プログラム実行

何のプログラムだ?
0567デフォルトの名無しさんNGNG
本日のマツケンショーのプログラムでは最後にマツケンサンバが入っています。
0568デフォルトの名無しさんNGNG
画面を描画するのに、
CreateCompatibleBitmapやCreateCompatibleDC
で裏画面を作成し描画しているのですが、
画面全体を新たに再描画(真っ白に)する場合、
それまで使っていた裏画面を破棄して新しくメモリを作成する方法と、
画面を背景の色で塗りつぶす(FillRectとかそんな感じで)方法があると思うのですが、
どちらが速いのでしょう??
環境はWinXP+VC6.0+APIです。
0569デフォルトの名無しさんNGNG
>>565
MFC固有のdllの初回読み込み(OS起動以後)に時間がかかるってだけでしょ。
2回目以降の起動ではほとんど関係ないかと。
実行パフォーマンスを理由にしてMFCを使わないというのは稀。
2次配布問題やファイルサイズ・カスタマイズ効率の面からMFCを使わないというのはあるけど。
0570デフォルトの名無しさんNGNG
ウィンドウプロシージャべた書きでいけるような極単純なものならMFC使わないほうがほんの少し効率がいいんじゃないか?
大して意味はないレベルにせよMFCのウィンドウ−C++オブジェクトマッピングはコスト0じゃない。
0571デフォルトの名無しさんNGNG
定番の言い方だと、体感できるほどの差ではない、かな。
0572568NGNG
>>571
どちらでも大差無いって感じですかね。
0573デフォルトの名無しさんNGNG
MFCはサンクじゃなくてマップを使ってるから
検索の分遅いんじゃないか?
0574デフォルトの名無しさんNGNG
>>568
後者・・・じゃないかなぁ。
せっかくだから、測定してみるといいんじゃない?
0575デフォルトの名無しさんNGNG
それ以前にCreateCompatibleBitmapで作成したてのビットマップって何色かで塗りつぶされてる保証なんかあったか?
どのみち作成後に塗りつぶすなら再作成の意味は無い気がするんだが。
0576デフォルトの名無しさんNGNG
>>575
NT系ならセキュリティ上の理由から塗りつぶされてると思うが
期待しちゃいけない気がするな
0577568NGNG
そうですね,確かにCreateCompatibleBitmapの後に塗りつぶしてましたorz
FillRectで塗りつぶす方法で良さそうですね.

あと話が変わるのですが,
複数のウインドウプロシージャで変数を共有したいのですが,
どうすればよいでしょう?
変数のポインタを渡せば良さそうなのですが,
どこで渡せばいいのやら・・・
0578デフォルトの名無しさんNGNG
>どこで
好きなところで。

グローバルにしてもいいし、
上位のオブジェクト(たとえばアプリケーションクラスのインスタンス)とかに持たせて、
その上位オブジェクト経由でアクセスするとか。

どちらも嫌な場合は、CreateWindowの最後の引数とか。
0579デフォルトの名無しさんNGNG
> 複数のウインドウプロシージャで

複数のウィンドウクラス間で、ということ?
0580568NGNG
>>578
今はグローバルで宣言していますが,変数が多くなってきたので
クラスか構造体のポインタを他のプロシージャに渡せればいいなと思いました.
とりあえず,CreateWindowの最後の引数に渡す方法をやってみます.
0581デフォルトの名無しさんNGNG
>>577
速さを気にするんだったらブラシ用意してFillRectより、CDC::FillSolidRectみたいに
SetBkColor→ExtTextOutの方が速いはず。
0582デフォルトの名無しさんNGNG
>>581
あれ、背景色を元に戻してないよな。
いいのかMicrosoftがそんなことで…
0583デフォルトの名無しさんNGNG
まぁ、塗りつぶしに使いたい色=背景色にしたい色って状況のほうが多いだろう、と。
でも、一言注意書いといて欲しいよな。
0584デフォルトの名無しさんNGNG
少なくとも 2001/10以降のMSDNには
 >メ モ FillSolidRect を呼び出すと、以前に SetBkColor を使って設定した背景色が、
 >clr で指定した色に設定されます。
と書いてあるケドナー
0585デフォルトの名無しさんNGNG
MSDNはネットで見ろってことなんだろ。
0586デフォルトの名無しさんNGNG
よろしくお願いします。
プログラム実行中に Windows が休止状態に入った場合、その状態から
復帰した後に特別な作業を行いたいんですが、これを感知する方法が
あれば教えてください。
動作させたい OS は Windows 2000 SP4 です。
0587デフォルトの名無しさんNGNG
wm_powerbroadcastとかなんとか
0588デフォルトの名無しさんNGNG
他のアプリケーションにメッセージを送るにはどうすればいいですか?
0589デフォルトの名無しさんNGNG
メッセージを送ればいい。
0590デフォルトの名無しさんNGNG
メッセージを送りたいアプリのHWNDを取得して
SendMessage() でいいんでしょうか・・・?

取り合えずHWND取得からやってみます。
ありがとでした。
0591デフォルトの名無しさんNGNG
ただしポインタが絡むものは普通に送っても無駄だからな。
0592デフォルトの名無しさんNGNG
システムイメージリストについて教えてください。
これはアプリケーションが破棄してはいけないと言われますが、
(9x系だけかな?)それって全部のプロセスで中身が共通だからですよね?

と言う事は、アプリケーションから勝手にアイコンを登録したりすると
再起動するまで残りつづけるって事なんですか?
2000では破棄しても問題ないし、アイコンを好きなだけ追加しても
プロセスを起動しなおすと中身が初期化されています。

それでもやっぱりいじらない方がいいと思うのですが、
システムイメージリストとアプリケーション独自のアイコンを
ひとつのツリービューやツールバーで利用したい場合、
どうするのがいいのですか?
0593デフォルトの名無しさんNGNG
質問です。
トップレベルのモードレスダイアログを同時に2つ作成しようとしています。
メッセージループには2つの IsDialogMessage() を組み込んでいるものとします。
このとき、片方のダイアログの上で MessageBox() 等でモーダルダイアログを表示すると、
独自のメッセージループに突入してしまうため、もう片方のモードレスダイアログでは
TABキーによるフォーカスの移動ができなくなってしまいますよね。
スレッドを分ければ解決するのですが、できればマルチスレッドにはしたくないのです。
シングルスレッドでこの問題を回避するいい方法があればご教示ください。
0594デフォルトの名無しさんNGNG
>>592
システムイメージリストから必要なアイコンをコピーして使えばいいだけでは?
0595 ◆Z0vd5w812U NGNG
>>593
両方ともモードレスにして、モーダル風にふるまわせれば?
0596デフォルトの名無しさんNGNG
>>593
>もう片方のモードレスダイアログでは

モーダルダイアログを表示したら、モードレスダイアログは inactive なんじゃ・・・
0597デフォルトの名無しさんNGNG
>>593
自前でTABキー等を処理する。
0598ほんたまNGNG
おみゃ〜らよ、APIをパブリック名でDLL内から文字列検索すると、
9割方のAPIはヒットする。
だが残る1割のAPIは文字列検索してもヒットしないぞ。
ちゃんとそのDLL内に記述されているのにだ。
これがどういうことかわかるかな?
0599デフォルトの名無しさんNGNG
そんなこともわからんのか
0600デフォルトの名無しさんNGNG
>>598
自分じわかるかな?
0601デフォルトの名無しさんNGNG
>>595
うーん、確かにそういう手もありそうですが…結構面倒になりそうですね。

>>596
最初はアクティブではありませんが、表示されたモーダルダイアログは
もう片方のモードレスダイアログとは被所有関係にないため、
表示中でもアクティブにすることは可能なわけです。

>>597
自前で処理するのは最後の手段かなと思っていたのですが…考えてみます。

レスをいただいた皆さん、どうもありがとうございました。
0602593NGNG
↑ >>601 は >>593 の書き込みでした。
0603デフォルトの名無しさんNGNG
>>601
WH_KEYBOARD のローカルフックで TABキーだけ一括処理する。
0604デフォルトの名無しさんNGNG
Windowsのロックが解除されたことを知るにはどうしたらよいのでしょうか。
LockWorkStationでロックをして
ロックが解除されたら別の処理に移るようにしたいのですが・・・。
0605593&601NGNG
>>603
どうもありがとうございます。
自分がローカルフックを使おうとしなかった理由は、
グローバル変数を導入することを避けたい気持ちもあったからです。
でもシングルスレッド限定だとフックを使うのが一番よさそうですね…。
0606デフォルトの名無しさんNGNG
>>604
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか
調べるとか
0607デフォルトの名無しさんNGNG
>>605
グローバル変数なんか必要ないけど? 
0608605NGNG
>>607
え…そうなんですか?
モードレスダイアログのハンドルをフックプロシージャに渡すのに必要な気がしますし、
少なくとも SetWindowsHookEx() の戻り値であるハンドルを
フックプロシージャ内の CallNextHookEx() に渡すためには
グローバル変数の導入は避けられないような気がしていたのですが…。
0609デフォルトの名無しさんNGNG
あるプロセスがAdministrators権限で動いているとして、子プロセスを別ユーザーで実行したいのですが
その別ユーザーのパスワードを知らない状況でそれは可能でしょうか。
UNIXのsuみたいに、権限をもっているユーザならパスワードがいらない方法を探しています。
お知恵を拝借されてください。
0610デフォルトの名無しさんNGNG
CreateProcessAsUser
のMSDN解説をよく嫁

俺は読んだが分からなかった。スマソ
0611586NGNG
>>587
遅くなりましたが今日対象のパソコンで試したところ
WM_POWERBROADCAST で通知を受け取ることができました。
ありがとうございました。
0612デフォルトの名無しさんNGNG
Administrators権限ではそもそも必要な特権がないので
CreateProcessAsUserは無理
2000以降ならCreateProcessWithLogonWでできるけど
これもパスワードが必要
0613デフォルトの名無しさんNGNG
>>607
グローバル変数を使わない方法、私も興味があります。ぜひ教えてください。
0614デフォルトの名無しさんNGNG
>>613
プロセス間通信で共有してもいいし、
今回のケースはローカルフックなんだからハッシュとかに突っ込んでも良い。
んでもって、CallNextHookExは第一引数を無視する。
0615デフォルトの名無しさんNGNG
>>614
調べてみたら、確かにCallNextHookExは第1引数を無視するようですね。
新たな収穫でした。サンクス!!
0616デフォルトの名無しさんNGNG
SetDlgItemTextで自作ダイアログのEDITTEXTに改行されたテキストを送っても
改行されないで表示されてしまいます

スタイルの設定は
ES_READONLY | ES_MULTILINE | ES_AUTOVSCROLL
にしてあって、ES_READONLYをES_WANTRETURNにして
手入力すれば改行されるんですが、何が問題なのでしょうか

あと改行に成功してもたぶん1行目の行頭から表示されると思うんですが
最終行を一番下に表示する方法は何かあるのでしょうか
(見た目はチャットウィンドウっぽいものです 機能は全然違いますが・・・)
0617616NGNG
すみません、検索の仕方間違えてたようです・・・
\r\nじゃないと改行できないんですね
最初の質問は取り下げさせていただきます

2つ目の質問も
まずEM_SETSELにMAKELONG(0xFFFF, 0xFFFF)渡して
直後にVK_HOMEも送るという方法で回避できましたが、
こんなまどろっこしい方法しかないんでしょうか
0618デフォルトの名無しさんNGNG
>>617
EM_SETSELで最後を選択して、EM_REPLACESELかな?
0619デフォルトの名無しさんNGNG
>>617
良くwカランけど、その2つのコンボって単純に EM_SETSEL に 0, 0 でいいんじゃない?
0620デフォルトの名無しさんNGNG
>>618
何を置換するんですか・・・?NULLを渡したらアクセス違反で落ちました

>>619
それだと1行目の行頭にキャレットが行ってしまいます

やりたいことは、3行表示できるエディットに5行送り込んだとして、
_____
| I1行目
| 2行目
| 3行目        ←こうではなくて(Iはキャレットのつもり)
 ̄ ̄ ̄ ̄ ̄
_____
| 3行目
| 4行目
| I5行目        ←こういう状態にしておきたいんです
 ̄ ̄ ̄ ̄ ̄
0621616NGNG
>>618
あーわかりました
EM_SETSEL,MAKELONG(0xFFFF,0xFFFF)でEDITの最後に移動して
EM_REPLACESEL,0,<追加する文字列\r\n>の後VK_HOMEで
望む挙動を実装できました ありがとうございます
0622デフォルトの名無しさんNGNG
EM_SCROLLCARET
0623デフォルトの名無しさんNGNG
Win32でCreateWindowにてComboBoxを作成して
それをサブクラス化したのですが
置き換えたコールバックプロシージャに
WM_KEYDOWNが送られてきません。
これはなぜでしょうか?そういう仕様?
キー入力を取得したいので解決法を教えて頂けませんか?

*Edit,Button,ListView,TreeViewなどはちゃんとWM_KEYDOWNが送られてきています。

よろしくお願いします。
0624623NGNG
上記にからんだ事なのですが
リソースエディタを使わずに動的にダイアログボックス上のリソースを作成した場合に
Tabキーを押したときに次のリソースにフォーカスが移動という機能を
自分で実装しなければならないために上記のような手段にでました。

親ウィンドウに子リソースのキー入力状況などは通知されないのでしょうか?
WM_NOTIFYなどでNM_KEYDOWNなどはありますが、
あくまでもコモンコントロールであって
Editなどがあてはまらず一貫した実装に出来ません。
一番手っ取り早いのは親にTabキーが押されたことを通知する機能が実装されていれば
よいのですが・・
見た限りないようなので、サブクラス化して子からWM_KEYDOWNのときに
SendMessage(hParent,WM_KEYDOWN, wParam, lParam);
とするぐらいしか方法は思いつきませんでした。

どうしたらよいのでしょうか?
0625デフォルトの名無しさんNGNG
ドロップダウンリストにすりゃ送られてくるだろ。
コンボボックスで送られてこないのは、インプットフォーカスがあるのが
コンボボックスそのものではなくて中にあるエディットだから。

で、ダイアログの機能を実現したいなら
IsDialogMessageとかモードレスダイアログで検索しなさい。
0626デフォルトの名無しさんNGNG
624 CreateWindowでWS_TABSTOP立ってないのでは?
0627623NGNG
>>626
セットしてます
0628デフォルトの名無しさんNGNG
ランチャなんかでよくあるような、
起動するとポップアップメニューが出て、項目を選択すると
それに応じた作業をこなした上で終了する、というツールを作りたいんです。
ポップアップメニューだけを表示させるにはどうしたらいいのでしょうか?

今は試しに何もしないウィンドウをCreateWindowしておいて
そのWM_CREATEのところでCreatePopupMenuしてメニューを作成して
TrackPopupMenuした上でPostQuitMessageしてみてるんですが、
当然一瞬何もしないウィンドウが表示されてから終了します。
ウィンドウをSW_SHOWしないでおくと、メニューがカーソルと重なっただけで消えてしまって
メニューを選択できません。
何か上手い方法はないものでしょうか?
0629デフォルトの名無しさんNGNG
>>628
冷やかしは(・∀・)カエレ!!
0630628NGNG
>>629
…一応マジなわけですが。
0631デフォルトの名無しさんNGNG
>>628
もう寝るので質問だけ。
PostQuitMessageしている理由は何ですか?
しなければいいのでは?と思うので…
0632デフォルトの名無しさんNGNG
>>631
メニューを選択して、それに応じた作業をこなし次第終了させたいからです。
0633デフォルトの名無しさんNGNG
>>628
0x0か1x1のサイズで作れば見えないんじゃない?
0634デフォルトの名無しさんNGNG
C,C++の宿題スレから誘導で来ました。
DLL側のcppファイルに
declspec(dllexport) int flag;
を宣言して、
EXE側のヘッダファイルに
declspec(dllimport) int flag;
を宣言して、cppにインクルードしました。
EXE、DLLの両方で共通のフラグを使おうと思ったのですが、
デバッガでトレースすると、EXE側で1に設定したflagが
DLL側の関数に入るとflagの値が0になってしまいました。
フラグのメモリアドレスを見ると、DLLとEXEで異なっていて
別領域が取られているようです。EXE、DLLの両方で共通の
同じフラグを使用するには、どのようにexport,importをすれば
よいのでしょうか?長くなってすいません。
0635デフォルトの名無しさんNGNG
>>634
フラグ用のインターフェース関数を用意して
exeとdllでのフラグのやり取りはその関数経由で行えば良いのでは?
0636デフォルトの名無しさんNGNG
>>634 こんな感じで。
[exe]
#include "dll.h"
int main(void)
{
printf("%d\n", dll_get_flag());
dll_set_flag(1);
return 0;
}

[dll]
int flag;
dll_get_flag(void){ return flag; }
dll_set_flag(int f){ flag = f; }
0637デフォルトの名無しさんNGNG
>>634の通りやって、ちゃんと意図どおりになったど。
0638デフォルトの名無しさんNGNG
>>635-636
ありがとうございます。libファイルを使って静的リンクさせる場合は
[dll]の関数の頭にdeclspec(dllexport)を宣言すればよいのでしょうか?
0639609NGNG
>>610
>>612
ありがとうございます。
なるほど。
ということは、Windowsではパスワード無しでsudoみたいなことをする方法はないって事なんでしょうか?
その辺を調べる方法はないものでしょうかねぇ

#Cygwinにsuってないんだっけ?あるとすれば、その辺のソースをみればいい?
0640デフォルトの名無しさんNGNG
>>639
suだってsudoだってパスワードは必要だろうが。
0641639NGNG
上には書いてあるんですが、もちろんどのユーザーからでもということではなくて、
特権をもっている場合でいいんです。
UNIXだったら、rootからsuするのにパスワードいりませんよね?(UNIXというか僕はLinuxしかしらないのですが(汗))
そこから連想して、WindowsだったらAdministratorでできないかなと想像してます。
その辺、できるのかできないのか、できるとしたらどうすればいいのか。
ちょっとでもヒントになりそうなことがあったら、ぜひお教えください。
重ねてお願いします。
0642デフォルトの名無しさんNGNG
>>641
WindowsはUNIXではなくAdministratorはrootではありません。
Administrator権限を持つユーザーでしかないです。
0643デフォルトの名無しさんNGNG
質問です。
メニューから項目を選んでからクライアントエリアをクリックすると
座標値が得られ、それをメッセージボックスで表示させたいんですけど、

メニューの項目を選んだ時点で(クライアントエリアをクリックしてないのに)メッセージボックスが表示されてしまうんです。(座標値は0,0)
こういう場合どういうふうに組んだらいいんでしょうか?
0644デフォルトの名無しさんNGNG
今現在どういう変てこな造りになっているのかわからんとねー
0645643NGNG
プログラムは、
case WM_COMMAND:
hMenu = GetMenu(hWnd);
hdc = GetDC(hWnd);
switch (LOWORD(wp)) {
case ZAHYOU:{
  case WM_LBUTTONDOWN:

  pt.x=LOWORD(lp);
  pt.y=HIWORD(lp);
  wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
  MessageBox(hWnd,szBuff,"タイトル",MB_OK);
 }
こんな感じなんですが、わかりますでしょうか・・?;}
0646デフォルトの名無しさんNGNG
break;
死ね。
0647デフォルトの名無しさんNGNG
デバイスコンテキストで文字を表示する際に文字のフォントサイズを小さく表示するにはどうすれば
いいのですか?
0648デフォルトの名無しさんNGNG
>>645
わかんにゃい
何をやっているのかさっぱり
0649デフォルトの名無しさんNGNG
>>647
CreateFontして、SelectObject
0650デフォルトの名無しさんNGNG
>>649
レスありがとうございます
CreateFontして、SelectObjectを調べてみます
0651デフォルトの名無しさんNGNG
>>643=645
かなり深刻に勘違いしていますので、
C (C++) と Win32 APIの入門書等を見て勉強したほうがよいです。
0652デフォルトの名無しさんNGNG
>645
こんな感じのコードでいいのかな?

// これをどっかに宣言
static bool fViewZahyou = false;

case WM_COMMAND: {
 switch (LOWORD(wp)) {
  case ZAHYOU: {
   // 次のクリックでは座標を得る処理をする、という意味で
   fViewZahyou = true;
   break;
  }
 }
 break;
}

case WM_LBUTTONUP: {
 if (fViewZahyou) {
  pt.x=LOWORD(lp);
  pt.y=HIWORD(lp);
  wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
  MessageBox(hWnd,szBuff,"タイトル",MB_OK);
  fViewZahyou = false;
 }
 break;
}

>651 の言う通り、まず C/C++ の文法をしっかり勉強するように。
0653デフォルトの名無しさんNGNG
Windows XP SP2 Platform SDK でまつた。
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm
0654デフォルトの名無しさんNGNG
結局ATLのサンクはどうなったのかと。
0655デフォルトの名無しさんNGNG
>>654
http://pc5.2ch.net/test/read.cgi/jisaku/1094220209/11-23 あたり参照
0656デフォルトの名無しさんNGNG
やっと新SDK出たか
0657デフォルトの名無しさんNGNG
壁紙をクライアントウィンドウに表示したいので
外部画像ファイル(bmpやjpg)をクライアントウィンドウの背景に設定したいのですが
どのようにすればいいでしょうか?

画像 背景などで検索してもリソースから入手するものばかりです。

壁紙の位置を知る方法はレジストリの
マイ コンピュータ\HKEY_CURRENT_USER\Control Panel\Desktop\OriginalWallpaper
から取得する事はわかりましたが
その画像をクライアントウィンドウの背景にする方法がわかりません。

どうか教えてください
0658デフォルトの名無しさんNGNG
WinXPで他のウィンドウのIMEのモードを変えたいのですが、
GetForegroundWindowで取ってきたHWNDをImmGetContextに
入れてもNULLしか返ってきません。自分のウィンドウがたまたま
最前列だった場合は、自分のIME制御はできたのですが、何が足
りないのでしょうか。
0659デフォルトの名無しさんNGNG
>>657
>>2
0660デフォルトの名無しさんNGNG
>>658
NT系だと他のスレッドのIME監視するの面倒じゃなかったっけ.
0661デフォルトの名無しさんNGNG
>>659
どれでしょうか?
0662657NGNG
聞くだけでは失礼だと思ったので
一応>>2のリンク先を見たところ
二つがリンク切れ(一個は表示できない?)でした。

もう二つを見てみましたが
思わしきリンクが見つかりません。
どこのどれを見ればいいか、もしくは検索のヒントを教えてください
0663デフォルトの名無しさんNGNG
>>662
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
0664657NGNG
>>663
上下で分かれてて、下の一番上がWin32〜となってたので
下がWin32API用のリンクかと勘違いしてました
上も入ってるんですね。

ちなみに下のリンクは全部みましたが
思わしき内容がありませんでした。

せっかく張っていただいたWin32 API入門では
残念ながらリソースからBMPファイルを読み込む内容しか書かれていませんでした。

今から猫でもわかるプログラミングの方を読んでみます。
0665デフォルトの名無しさんNGNG
>>664
ttp://www.wotsit.org/download.asp?f=bmp
ttp://www.wotsit.org/download.asp?f=lzwexp
ttp://www.wotsit.org/download.asp?f=itu-1150
ttp://www.wotsit.org/download.asp?f=png

あとはSetDIBitsToDevice/CreateDIBSection/BitBlt/StretchBltあたりだ

いまさら教えても文句はいうけどお礼は言わないよということか>メアド欄
相当に失礼な奴だな。
0666657NGNG
>>665
何か勘違いをしているようですが
教えてくれている方に向かって文句を言うほどバカではありません。
口は悪いですがリンク先を教えてもらったりしてるだけで心の中ではありがたく思ってます。
更に使用関数の名前まで教えていただき感謝のきわみです。
ありがとうございます
0667663NGNG
>>664
http://black.sakura.ne.jp/~third/system/winapi/win.html
・DIB ファイルヘッダ
・DIB 情報ヘッダ
・DIB ピクセルビット
・Windows DIB
・DIB の表示

http://www.kumei.ne.jp/c_lang/index.html
の方は170〜172章

WIN32APIと呼べるかどうか分からんが、
336章にJPEGなども表示できる方法がある(環境限定)

COMだが、JPEGに関してはOleLoadPictureなども使える
0668デフォルトの名無しさんNGNG
>>664
蛇足。心の中でどう思ってようが構わないが表に出すな。
付け加えれば教えてもらってるのに素直にお礼言わないってどういうこった。
頭膿んでるんじゃねぇか?
0669デフォルトの名無しさんNGNG
>>657
>>661
>>662
>>664
>>666
0670デフォルトの名無しさんNGNG
あの質問を相手にするほうもどうかと思うが。
0671657NGNG
>>667さんが>>663さんということは>>665さんは>>663さんじゃないのか…
>667さん、ありがとうございます
とりあえず色々試行錯誤してみます
0672デフォルトの名無しさんNGNG
ではここで新しいPlatformSDKの主な変更点をどうぞ
 ↓
0673デフォルトの名無しさんNGNG
>>672
「新しい Platform SDK」っていう表現は微妙。
単独では使えないし。
0674デフォルトの名無しさんNGNG
バージョンアップしたのがTable/MDAC/MSIだけじゃ
あんまり俺には関係ないな。
0675デフォルトの名無しさんNGNG
>>673
どういう表現ならいいんだ?
0676デフォルトの名無しさんNGNG
ナウい Platform SDK
0677デフォルトの名無しさんNGNG
差分とかじゃないの?
0678デフォルトの名無しさんNGNG
差分てことは新しいってことじゃないのか
0679デフォルトの名無しさんNGNG
新しいってことは差分てことじゃないのか
0680デフォルトの名無しさんNGNG
じゃあ「新しい Platform SDK」という表現でいいな。
改めてどうぞ
 ↓
0681デフォルトの名無しさんNGNG
XP SP2に対応しました。

以上
0682デフォルトの名無しさんNGNG
ポカーン・・・
0683デフォルトの名無しさんNGNG
またこっそり新しいAPI入れてるんでしょ?そうなんでしょ?
0684デフォルトの名無しさんNGNG
古くする差分だったらどうするニダ
0685デフォルトの名無しさんNGNG
>>684
新しいSDK=新しくするSDKって意味じゃないべ。
新しく出たSDKって意味だべ。
0686デフォルトの名無しさんNGNG
>>683
頭おかしいのか?
0687デフォルトの名無しさんNGNG
追加API一覧とかつけてほしいよ
0688デフォルトの名無しさんNGNG
どっかにあったぞ
0689デフォルトの名無しさんNGNG
マジでか
0690デフォルトの名無しさんNGNG
ウソでした
0691デフォルトの名無しさんNGNG
ホントだって。
http://msdn.microsoft.com/library/en-us/winprog/winprog/functions_by_release.asp
http://msdn.microsoft.com/library/en-us/win9x/append_4cs3.asp
あーでもXPSP2はまだ入ってないな
0692デフォルトの名無しさんNGNG
自己解決しました
0693デフォルトの名無しさんNGNG
spy++を使わずに届いたメッセージをフックしてくれるソフトってありますか?
どうも探しても見つかりません。
0694デフォルトの名無しさんNGNG
メッセージをフックした上でメッセージを表示してくれるプログラムです
0695デフォルトの名無しさんNGNG
>>691
おまえ神だろ
0696デフォルトの名無しさんNGNG
なんでspy++じゃだめなの
0697デフォルトの名無しさんNGNG
>>693
http://www.windows-spy.com/
とかは?
0698デフォルトの名無しさんNGNG
C+Win32APIでウィンドウズアプリケーションを作っているのですが、
最大化できなくする方法(最大化ボタンを無くす)を教えてください。
WNDCLASS.styleにCS_*だと思うのですが、見つかりませんでした。
0699デフォルトの名無しさんNGNG
WS_MAXIMIZEBOX
0700698NGNG
>>699
できました。ありがとうございました。
0701デフォルトの名無しさんNGNG
>>696
VC++持ってないので…

>>697
ありがとうございます
0702デフォルトの名無しさんNGNG
ステータスバー上にマウスがきたら、マウスアイコンを変更させようとお
もって、WM_MOUSEMOVEが特定の位置にきたらseticonを使用して変えよう
としたのですがうまくいきません。
ステータスバーをcreatewindowexでつくったので、その前にWNDCLASSEX
にステータスバーを処理するためのメッセージ処理関数を登録して
RegisterClassExを実行しました。RegisterClassExの戻り値は0なので
うまくいくはずはないのでしょうが、そもそもこのような手順であってい
るのでしょうか?
0703デフォルトの名無しさんNGNG
>702
ステータスバーというと msctls_statusbar32 の事かな。
もしくは STATUSCLASSNAME か。ってか、同じだけど。
で、メッセージ処理関数を置き換えるという発想は正解。
でも方法は間違い。次のようにする事。

// msctls_statusbar32 オリジナルのプロシージャを退避させておく変数
static WNDPROC original_procedure = 0;
static LRESULT CALLBACK my_statusbar_procedure (HWND .. /* 略 */ ..) {
 /* ここでやりたい事をすればよい */

 /* 重要。自分で処理しないメッセージは必ず元のプロシージャに任せる事! */
 return CallWindowProc (original_procedure, hwnd, msg, wParam, lParam);
}

HWND create_my_statusbar() {
 HWND statusbar = CreateWindowEx ( /*略。普通にステータスバーを作る */ );

 /* こうやってメッセージ処理関数を置き換える */
 original_procedure = (WNDPROC)SetWindowLong (
       statusbar, GWL_WNDPROC, (LONG)my_statusbar_procedure,);

 return statusbar;
}
0704デフォルトの名無しさんNGNG
>>697
それ、Win9x系では死ぬほど重いんだよな…。
0705702NGNG
>>703
うまくいきました〜
トンクス!
0706デフォルトの名無しさんNGNG
WirteFileの非同期書き込みって処理がすぐ帰って来るだけで
スレッドセーフなわけではないですよね?
0707デフォルトの名無しさんNGNG
>>706
WriteFile はどう呼び出してもスレッドセーフだよ。
呼び出し側のコンテキストもOS内のステータスも壊れないし、
書いただけちゃんと書かれる。

書き込みを同期化してくれるわけではないけど(先方がデータグラム型ソケットの場合を除く)。
0708デフォルトの名無しさんNGNG
SetTimer、KillTimerがありますが、
それのタイマーを0にするAPIがあるなら教えてください。
0709デフォルトの名無しさんNGNG
>>708
ないと思う。

0にしてどうするの?というか、なぜ0にしたいの?
0710708NGNG
>>709
例えば、ゲームのカーソルを0.5秒単位に点滅させる処理で、
0.5秒毎にWM_TIMERが発生しますが、
ユーザーが十字キーを動かしたときに、時間を0に戻して、
次からの点滅のタイミングを同じにしたいのです。
KillTimerした後、すぐSetTimerすればそれができると思うのですが、
APIがあればそちらの方がいいかなと。
0711デフォルトの名無しさんNGNG
>>710
ウィンドウに関連付けてるなら、出来そう

以下、MSDNより抜粋
>hWnd パラメータで NULL 以外の値を指定し、
>hWnd パラメータで指定したウィンドウに、
>nIDEvent と同じ値のタイマが既に割り当てられている場合、
>新しいタイマは既存のタイマを置き換えます。

>SetTimer 関数がタイマを置き換えた場合、
>そのタイマはリセットされます。
>したがって、現在のタイムアウト時間が経過すると
>1 つのメッセージが送信されますが、
>それまでのタイムアウト時間は無視されます。
0712708NGNG
>>711
詳しくありがとうございます。
KillしてすぐSetする方法でやってみたいと思います。
0713デフォルトの名無しさんNGNG
POPサーバーにアクセスするAPIを教えてくださ
0714デフォルトの名無しさんNGNG
>>712
711を読む限りkillしないてもいいんでない?
0715デフォルトの名無しさんNGNG
>>713
gethostbyname(), socket(), connect(), send(), recv(), close()
MAPI を提供するメーラがあって、そのアカウントが使いたいなら MAPI 経由でもいいかも。
0716デフォルトの名無しさんNGNG
標準スタイルのボタンやチェックボックスはDrawFrameControlで描画できますが、
同様にタブを自前で描画する方法はありませんか?
0717デフォルトの名無しさんNGNG
>>715
あ、それ系のAPIでやるんですか、ありがとー
0718デフォルトの名無しさんNGNG
>>716
uxtheme
嫌ならボタンの上半分とかでそれらしく描画するしかないな
0719708NGNG
>>714
それでもいけました。ありがとうございました。
0720デフォルトの名無しさんNGNG
WM_PAINTがキューにもう一つあるなら、
その回は描画しても無駄なのでスキップする

という処理をしたいのですが上手くいきません
どのようにすれば良いのでしょうか?今はこうやって失敗してます。

case WM_PAINT:{
 MSG m;
 if( PeekMessage( &m, hWnd, WM_PAINT, WM_PAINT, PM_NOREMOVE ) ) return 0;

 //以下描画処理
}
0721デフォルトの名無しさんNGNG
WM_PAINTはキューにひとつしかないけど何がしたいの?
0722デフォルトの名無しさんNGNG
システムが勝手に1つにまとめてくれるわけだな
0723デフォルトの名無しさんNGNG
つーか、ウィンドウの無効領域を自動的にまとめて、暇そうなときにWM_PAINTを発行するんじゃなかったか?
0724デフォルトの名無しさんNGNG
>>721-722
レスありがとうございます。まとめてくれるんですね。道理で上手くいかないわけだ。

ヘルプ見ても該当の記述が見つからないので、重ねてすいません。
WM_MOUSEMOVEとかならば、この方法で良いのでしょうか?
0725デフォルトの名無しさんNGNG
APIとSDKはどう違うんですか?
0726デフォルトの名無しさんNGNG
猫でウインドウに関連付けられているメニューは、ウインドウ破棄と同時に捨てられるみたいな事が書いてあるのですが、

HMENU menu1=CreateMenu();
HWND hwnd1=CreateWindowEx(..., menu1, ...);

HMENU menu2=CreateMenu();
HWND hwnd2=CreateWindowEx(..., menu2, ...);

と二つのオーバーラップウインドウを作った場合、どうも最後に作られたメニューは破棄されるけど
それ以前に作ったメニュー(この場合はmenu1)は破棄されないようなのです。
以下3, 4...と作っていくと、menu2のDestroyMenuが成功するようになります。

何か大きなミスをしているような気がするのですが、ウインドウメニューと破棄の関係について
正確に掛かれているページってどこかに無いでしょうか?
0727デフォルトの名無しさんNGNG
そのウィンドウに関連付けられたメニューだけが破棄されるのは
分かってるか?
0728デフォルトの名無しさんNGNG
ウインドウが閉じた(WM_DESTROYが送られた後)タイミングで破棄されるから
明示的に閉じたウインドウ以外は、破棄される前にDestroyMenuが呼ばれてるのかな
だからDestroyMenuが成功してるんだと思う。
0729デフォルトの名無しさんNGNG
タブコントロールにスライダーコントロールが乗っかっているWINアプリがあるのですが、
このスライダーコントロールを別のWINアプリを作りたいなあと思っています。
このときにスライダーコントロールのハンドルをどうやったら取得できるのでしょうか?
0730デフォルトの名無しさんNGNG
>>729
自分の書いた文章読んで意味わかるか?
0731デフォルトの名無しさんNGNG
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
上ので、WndProcはどこで呼び出しているのでしょう。
0732デフォルトの名無しさんNGNG
ですぱっち
0733731NGNG
>>732
ありがとうございました。
0734デフォルトの名無しさんNGNG
>>729
なんかなぞなぞみたいでつ
0735デフォルトの名無しさんNGNG
>>729
スルーですね。
0736デフォルトの名無しさんNGNG
SetWindowsHookExを使って"コピーされた"ってのを知りたいんですけど
WH_CALLWNDPROCRETを使ってWM_COPYを見ていればいいんですか?
0737デフォルトの名無しさんNGNG
だめ
0738デフォルトの名無しさんNGNG
C+ウィンアプリは、イベントがあるまでOS?で待ちながら、
イベントが発生すると、GetMessageでそれを得て、
TranslateMessageで使いやすく翻訳し、
DispatchMessageでWndProcを呼び出し実行する、
という感じでいいのでしょうか。

また、TranslateMessageとDispatchMessageの引数が、
constポインタなのはなぜでしょう。

TranslateMessageはGetMessageで得たものをポインタで渡し、
中で書き換えるとイメージしたのですが、
constだと書き換えられないような気がするのですが。

また、DispatchMessageは実行するだけだから、
書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。
0739デフォルトの名無しさんNGNG
TranslateMessageはメッセージを書き換えないで、
WM_(SYS)KEYDOWNからWM_(SYS)CHARを生成したりしてキューにポストする。
書き換えちゃったらKEYDOWN系がこなくなる。
0740デフォルトの名無しさんNGNG
ポインタなのは構造体コピーより速いから。じゃねーかな。
0741738NGNG
ありがとうございます。

>>739
そういえば、キーを押した時、2回メッセージが来ているような
気がする事があったのですが、もしかしたらそれかもしれません。

>>740
なるほど。
自分は、引数がNULLでも動く関数の時は、constポインタにする事が
ありますが、そういう利点もあったのですか。
0742デフォルトの名無しさんNGNG
>>738
> TranslateMessageで使いやすく翻訳し、
TranslateMessageはただWM_KEYDOWN/UPなどからWM_CHARなどのメッセージを作り出しているだけだから、それじゃ間違い。
WM_CHARなどのメッセージが要らなければ、TranslateMessageを呼ぶ必要も無い。

> TranslateMessageはGetMessageで得たものをポインタで渡し、中で書き換えるとイメージしたのですが、
そうじゃない、PostMessage(それかWin内部でごにょごにょ)で送り出すので書き換える必要は無い。

> 書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。
構造体を直接関数の引数にすると、いちいちコピーする時間が掛かる。
なので代わりにポインタ(あるいは参照)にするのごく一般的に行われる。(sizeof (MSG)は28だがsizeof (MSG*)なら4)
その場合、通常の値渡しのように関数に渡した変数の中身が変わらないことを表明するためにconstポインタ(あるいはconst参照)にするのは常識。
0743738NGNG
>>742
さらに詳しくありがとうございます。
すごく勉強になりました。
0744デフォルトの名無しさんNGNG
次スレはスレタイにWin64の文字も入れてください
0745デフォルトの名無しさんNGNG
Win64は別スレにした方がよくね?
0746デフォルトの名無しさんNGNG
んだ
0747デフォルトの名無しさんNGNG
>>745
話題が分散するだけで、あんまり意味ないような感じがするけどどうでしょ。
しかも物凄く過疎な予感もするし。16->32みたいにそんなに違うわけでもないし。
0748デフォルトの名無しさんNGNG
質問する前に、「Win64についてですが・・・」とでも
書き添えてくれるのならいいけど、ここじゃルール守るヤツの方が
少数だからなぁ。
0749デフォルトの名無しさんNGNG
一緒が良いよ。
0750デフォルトの名無しさんNGNG
当面は【Win64可】をスレタイに入れればいいんじゃない。
0751デフォルトの名無しさんNGNG
別でいいよ。
0752デフォルトの名無しさんNGNG
実際にWin64の質問が増えてからでいいって。
今までほとんど無いんだから今のところ現状維持で。
0753デフォルトの名無しさんNGNG
ただ単に「WindowsAPI質問箱」にするだけじゃ駄目なん?
0754デフォルトの名無しさんNGNG
それじゃWinFXも入る予感
0755デフォルトの名無しさんNGNG
俺の持ってるWindowsプログラミングに関する唯一の本は
パラメータの型としてSIZE_Tとなってるところが、全てDWORDです。
そろそろ新しい版を買えことかな。AdvancedWindows3edです。
0756デフォルトの名無しさんNGNG
( ´_ゝ`)フーン
0757デフォルトの名無しさんNGNG
マウスボタンをLR同時押しするとWM_*BUTTON〜メッセージが来ないマウスと、
両方通知されるマウスがある。
ハード依存なのか、それともドライバなのかなぁ。
何か情報ないでしょうか?
0758デフォルトの名無しさんNGNG
どっちもありうる
0759757NGNG
ドライバだった。
同時押し時にホイールとして機能するようになってたよorz
0760デフォルトの名無しさんNGNG
Cのウィンアプリで、コールバックを使わずに組むのはダメなのでしょうか。
以下のプログラムのような感じなのですが。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=6

うまく言えないのですが、タイトルの時は、タイトルの処理だけに当たり
フィールドの時は、フィールドの処理だけとしたいのです。
普通のやり方だと、グローバル変数、static変数を
使わなければいけない所もでてきてしまいます。
手続き型っぽくしたいのです。
0761デフォルトの名無しさんNGNG
ウィンアプリはイベントドンブリが基本だから、
注文したカツどんがすぐ出てくるとは限らないぞ
0762デフォルトの名無しさんNGNG
>>760
ゲーム進行用のスレッドを作ってそこであれこれやるのじゃだめか?
0763760NGNG
>>761
詳しくお願いします。

>>762
スレッドが難しくて分からないです。
眼で追いやすい手続きっぽいのがいいです。
0764デフォルトの名無しさんNGNG
>>755
DEPなんて影も形もなかったころから将来PAGE_EXECUTEをサポートする
プロセッサが現れるかもしれないからちゃんとVirtualProtectしておけと
書いてありましたね。
0765デフォルトの名無しさんNGNG
LR同時押しは依存症
0766デフォルトの名無しさんNGNG
>>764
あれはいい本だ。ところで
ttp://www.wintellect.com/about/instructors/richter/prog_apps.aspx
に第4版の訂正が載っていて、
「DLL の注入と API フック」の章では
オリジナルでは単に WriteProcessMemory だけだったが、
VirtualProtect で PAGE_EXECUTE_READWRITE を設定しろと書いてある。

この訂正の理由が DEP 関係なら理解できるんだけど
> The sample fails to hooks some applications.
「一部のアプリで失敗する」っていう理由がよく分からない。
同じ環境でも成功するアプリと失敗するアプリがあるの? なんで?
0767デフォルトの名無しさんNGNG
WS_EX_CLIENTEDGEのスタイルを指定したときの内側の枠の幅はどうやれば取得できるのでしょうか?
EDITとかに好みのフォントを設定した後、最適な高さにリサイズしたいのですが、
GetTextMetricsではフォントグリフの高さしか取得できず、ウインドウをその高さにリサイズすると
当然文字が欠けてしまいます。
0768デフォルトの名無しさんNGNG
化けるわけないじゃん
0769デフォルトの名無しさんNGNG
>>767
GetWindowRect()
GetClientRect()
ClientToScreen()
これらを使えばスタイルが変わってもプロシージャの使いまわしが化膿。
0770デフォルトの名無しさんNGNG
透過転送を使いたいがためだけにイメージリストを使うのってアリですか?
0771デフォルトの名無しさんNGNG
SendInput関数・INPUT構造体について質問です。
これを使用したいのですが、なぜかコンパイルエラーに
なってしまいます。ヘッダにしっかりと定義の記述があるのですが、
「error C2065: INPUT' : 定義されていない識別子です。」
のようなエラーになってしまいます。user32.libなども、
読み込む設定になっています。

どうすればよいでしょうか?

環境
winxp vc6.0 sp6
0772デフォルトの名無しさんNGNG
>>771
#if (_WIN32_WINNT > 0x0400)
0773デフォルトの名無しさんNGNG
>>771
_WIN32_WINNT
0774773NGNG
すまん、かぶった
0775デフォルトの名無しさんNGNG
_WIN32_WINNT 0x0500 と定義してあります。
それでも、ダメなようです。

変数の.を打ち込んだときに、リストは出てきます。
(インテリジェンス機能?)

それでも、コンパイルが通らないんです…。
0776デフォルトの名無しさんNGNG
>>775
ヘッダのインクルードより前に#defineしてるか?
0777760NGNG
>>760の書き方はなぜいけないかまだ分かりません。

HandleTitleの所のメッセージチェックの所に、
DispatchMessage(&msg);を書いて、
WndProcにif(game == Title)を条件に、
そのメッセージチェックを書けば同じ処理になると思うのですが。

DispatchMessageが、ただWndProcに行くだけと考えているので
そう書いたのですが、他にも何か処理をしているのでしょうか。
0778デフォルトの名無しさんNGNG
モードレスダイアログをたくさん開いているとき、
IsDialogMessage(hwnd)をダイアログの数だけ実行するのですか?
それともNULLとかを指定すれば自動ですべてのウインドウに適用されるのでしょうか?
0779デフォルトの名無しさんNGNG
>>777
世の中にはメッセージキューにたまらないで直接WndProcへ行くメッセージもあるからな。
(つまりGetMessageからじゃ取り出せない)
0780デフォルトの名無しさんNGNG
>779 に先に簡潔に書かれちゃったけど,どうせ書いたから書き込んじゃえw

>777
きみはゲームで使うウィンドウを作るために RegisterClass(Ex) でウィンドウクラスを登録するだろうから
どうしても WndProc コールバック関数を書く必要がある。

それに上等なゲームなら欠かせないいくつかのメッセージは SendMessage() で送られて来る。
それらはメッセージキューにポストされるものではなく,つまり GetMessage()〜DispatchMessage() を
通過せず直接コールバックを呼ぶもののはず (だよね?少なくとも,今の時点では致命的な間違いではないはず)。
例えば WM_MOUSEACTIVATE,WM_CAPTURECHANGED,WM_ERASEBKGND,それに WM_(QUERY)ENDSESSION。
(他にも SendMessage で送られて来るものは多数)
マルチタスク環境にてユーザに親切なゲームを作りたいなら,これらのメッセージも的確に処理するべき。
0781デフォルトの名無しさんNGNG
>760==777
ゲームで使う色々な変数だが,グローバル変数を使うのがいやなら
構造体にまとめて SetWindowLong() で GWL_USERDATA にでも入れておけばいい。
WndProc の中で GetWindowLong() で取り出すんだ。

入れるタイミングは,そうだね,WM_NCCREATE でどうだ。
 if (msg == WM_NCCREATE) {
  SetWindowLong(hwnd, GWL_USERDATA, (LONG)new GameData());
  return 0;
 }

破棄するのは WM_DESTROY でもいいだろう。
 if (msg == WM_DESTROY) {
  GameData *gameData = (GameData *)GetWindowLong(hwnd, GWL_USERDATA);
  delete gameData;
  SetWindowLong(hwnd, GWL_USERDATA, 0); // 安全のためにな
  PostQuitMessage(0);
  return 0;
 }

GameData が,必ず適切に処分しないといけない特殊なリソースを使っているならば
WM_ENDSESSION でも delete gameData; を忘れてはいけない。
少なくとも WM_DESTROY は送られて来ないからね。
 (確か WM_CLOSE すらも送られて来なかったような。。。)
0782デフォルトの名無しさんNGNG
>>776
神!!!!!!!!

…というより、こんな基本的なことを忘れていたモレは
いったいなんなんだろうかと小一時間。

マジで反省してきます。スレ汚しすいません。
0783760NGNG
ありがとうございます。

>>779
そうだったのですか。それだと、あのやり方だとダメですね。

>>780
同じく、あの方法だと、より詳しく知っていないと危険ですね。

所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
コールバック先を変える事が出来るのでしょうか。
それなら、TitleWndProcにタイトルの事だけ書くことが出来、
自分の考えに近いものが出来そうなのですが。

>>781
知らないやり方でした。勉強してみます。

ただ、うまく組めば、キャラクターのHPとかのデータを、
ローカル==autoで置いて置けるので、何か悔しかったもので。

アイテムのデータとかは、グローバル、staticになるので、
その方法が使えそうです。
0784デフォルトの名無しさんNGNG
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。
教えてください
0785デフォルトの名無しさんNGNG
よく考えるとスレタイの「API質問箱」ってわかりにくいタイトルだよな.
テンプレに「Win32APIとはなんぞや」ぐらい書いてあった方が良いかもね.
このページへの直リンでもいいけど.
http://black.sakura.ne.jp/~third/system/winapi/win1.html

0786デフォルトの名無しさんNGNG
宣伝はやめてください。
0787デフォルトの名無しさんNGNG
>>786
リンク張らなければいいだけでしょ
0788デフォルトの名無しさんNGNG
今、785にリンク貼ったこと自体が宣伝ですね。
0789デフォルトの名無しさんNGNG
Win32APIが何かわからん奴はそもそもここに来ないだろ。
0790デフォルトの名無しさんNGNG
>>783
> 所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
> Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
> コールバック先を変える事が出来るのでしょうか。

SetWindowLongPtr(hwnd, GWLP_WNDPROC, FieldWndProc);でできる。
0791760NGNG
>>790
ありがとうございます。やってみます。
0792デフォルトの名無しさんNGNG
>>786
いやなら見なきゃいいだけでしょ。
0793デフォルトの名無しさんNGNG
Web上のテキストファイルをファイルに保存したいのですが、
URLからメモリに取り込むところがわかりません。
CreateFileもURLでは無理みたいなので、どうしたらいいでしょうか。
0794デフォルトの名無しさんNGNG
FileMappingを使ってプロセス間通信を行いたいのですが、
テンポラリファイルを作らないでファイルマッピングを行う場合最大サイズを指定しなければなりません。
状況によってこのサイズが極端に変わるのですが、
目いっぱい大きくとって4Gとか指定してもいいのでしょうか。
0795デフォルトの名無しさんNGNG
>>793
ttp://nienie.com/~masapico/api_sample_inet04_c.html
0796デフォルトの名無しさんNGNG
>>792
宣伝必死ですね
0797デフォルトの名無しさんNGNG
リッチエディットコントロールについて質問です。
「文字列」という単語をマウスで前方からゆっくり選択していくと「文」「字列」という風に、
1文字づつ選択されずに一気に2文字や3文字が選択される事がよくあります。
これはリッチエディットのバグ(仕様)なんでしょうか?
それとも何か設定を与えると回避できるものなんでしょうか?
ワードパッドでも確認できます。
0798デフォルトの名無しさんNGNG
クソ仕様
0799デフォルトの名無しさんNGNG
>>797
IEでもなるよね。イライラする。
0800797NGNG
最悪ですね。
エディットコントロールを拡張するか自作するか。
いや、今日はもう寝よう…。
0801デフォルトの名無しさんNGNG
ワードパッドでは「単語を自動選択」のチェックで動作を変更できるから
方法はありそうな気がする
0802797NGNG
>>801
そういやMFCのサンプルでワードパッドのソースコードありましたね。
ちとダイヴしてきます。
0803デフォルトの名無しさんNGNG
ツリービューに LVS_EX_CHECKBOXES オプションを付けてチェックボックスを表示させたのですが
チェックボックスがチェック/解除されたタイミングを知るにはどうすればいいのでしょうか?
WM_NOTIFYにそれらしいメッセージは飛んできませんでした。
WM_NOTIFYのNM_CLICK等を拾って自分で変更があったかを確認してやるしかないのでしょうか?
0804797NGNG
原因がつかめました。
ECO_AUTOWORDSELECTION
リッチエディットにこのオプションフラグが設定されているとテキスト選択に不具合が出るようです。

フラグが立っているようならばフラグを下げてやればいいですね。
SetOptions(ECOOP_AND, ~(DWORD)ECO_AUTOWORDSELECTION);

>>801
ヒントありがとうございました。
0805デフォルトの名無しさんNGNG
>>803
http://www.codeproject.com/listctrl/listcheckbox.asp
WM_NOTIFYでLVN_ITEMCHANGEDが通知されるのを捕まえる
0806803NGNG
>>805
感謝感謝!!
0807デフォルトの名無しさんNGNG
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。
0808デフォルトの名無しさんNGNG
そうですか
0809デフォルトの名無しさんNGNG
ワロタ
0810デフォルトの名無しさんNGNG
スタートメニューの終了オプションや、他のアプリケーションが
スタンバイ移行の要求をした場合に、それを止める方法は無いの
でしょうか?

電源プロパティのアイドルタイマーによるスタンバイ移行は、
SetThreadExecutionStateで止めることができるようですが、
↑のスタンバイ要求は止められないようです。

どなたか教えていただけないでしょうか。
0811デフォルトの名無しさんNGNG
WM_POWERBROADCASTを処理する
0812デフォルトの名無しさんNGNG
>>811
ありがとうございます。WM_POWERBROADCASTに関連したMSDNを
見てきてがんがります。
0813デフォルトの名無しさんNGNG
入力デバイスが接続されたのを関知したいのですが、デバイスインターフェイスGUIDであるところの
GUID_CLASS_INPUTの定義がどこにあるのか判らず、困っています。
誰か教えてください。
0814デフォルトの名無しさんNGNG
GUID_CLASS_INPUTでIncludeディレクトリをぐぐる
0815デフォルトの名無しさんNGNG
>>814
その「ぐぐる」の使い方は始めてみた
0816デフォルトの名無しさんNGNG
grepすると書こうと思ったら反射的に「ぐぐる」になってしまったorz
0817813NGNG
>814
残念ながら見つかりませんでした。
Webでもググってみたんですが情報が全然ありません(辛うじてDDK関連の情報があるのみ)。
悲しいのでしばらく寝込みます。
0818デフォルトの名無しさんNGNG
>>817
うん、DDKに入ってるヘッダ(hidclass.h,poclass.h)に定義されてる
0819デフォルトの名無しさんNGNG
>>813
DDKのhidclass.hにて(゚∀゚)ハケーソ!!
0820デフォルトの名無しさんNGNG
ウィンドウについてるスクロールバーの端っこの部分(三角が書いてあるところ)
っていつ描画されるんですか?
0821デフォルトの名無しさんNGNG
描画すべきとき
0822デフォルトの名無しさんNGNG
もしくは、スクロールバーの端の部分を再描画する方法・APIを教えてください。
SetScrollInfoだと端っこは再描画してくれません。
0823デフォルトの名無しさんNGNG
>>822
ぜんぜん検証してないテケトーな意見だが、
ウィンドウごと再描画すればいいんじゃね?
0824813NGNG
>818,819
ありがとうございます。しかしDDKってWebで配布してないんですよね…
ググったときにヘッダファイルが引っ掛かっていたので、それを使ってみることにします。
0825デフォルトの名無しさんNGNG
CreateThreadで作ったスレッド内ではCランライム関数を使ってはいけないそうですが、
newや__try __catchやSTLも使えないんでしょうか。
だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。
_beginthreadexにするのは他人が作ってる部分なので無理なんです。
0826デフォルトの名無しさんNGNG
>825
s(n)printfするためだけにもう一個自分で_beginthread(ex)してスレッド作れば?
0827デフォルトの名無しさんNGNG
>>825
>だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。

1行ごとに処理するとかなんとかして、そこを改善した方がヨサゲ・・・
0828デフォルトの名無しさんNGNG
>>825
CreateThread()を使ってるアフォに_beginthreadex()を使うよう説得する。
CreateThread()と_beginthreadex()は引数の並びが同じなので、変更は楽。
(ただし、スレッドに渡す関数の型が違うのでキャストする必要がある。)
この仕様変更を受け入れるよう、きつく催促することをお薦めする。
0829デフォルトの名無しさんNGNG
>>825
どうあってもだめな場合は、Shlwapi.hの関数群を使う。
MSDNをStrCpy StrCat などでググってみれ。

ん?それ以前に、wnsprintf()は本当にstdio.hのを使ってるのか?
同じ名前の関数が、Shlwapi.hもあるぞ。確認しる。
これらはIEのコンポーネントの一部だ。
0830デフォルトの名無しさんNGNG
>>825
スタティック変数が他スレッドからの呼び出しで破壊される等の深刻な問題ではなく、
リソースリークを起こすだけなので気にしないで使っちゃうってのもまぁありかも。

リソースが深刻なほど少ない環境や、長期間連続稼動させてる環境で使用される
のなら考え物ですが。
0831デフォルトの名無しさんNGNG
頭のゆるい人があらわれた!
0832デフォルトの名無しさんNGNG
('A`)ヒロシです…

MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。

('A`)ヒロシです…
0833デフォルトの名無しさんNGNG
>>832
もうそのネタ飽きた
0834デフォルトの名無しさんNGNG
MCIでのミュートはボリュームを下げろ。
0835デフォルトの名無しさんNGNG
>>825
CreateThread でつくったスレッドで使っちゃいけないのは、
Cライブラリ関数の中でも、
内部的にグローバル変数を使用している一部だけ。
sprintf は問題なし。new や try〜catch も使っていい。
それに、たとえ問題になる関数を使っても >>830 の通りなので、
常駐アプリでもない限り構わないんじゃない?
0836デフォルトの名無しさんNGNG
>>835
スレッド毎に独立した errno を TLS に割り当てる必要があるから、
実質ほぼ全ての C ライブラリ関数がダメだったと思う。
もちろん処理系次第だけど。
0837835NGNG
>>836
errno か、確かに言われてみれば…。
なるほど、835は取り下げます。
でもさすがに try〜catch は問題ないよね?
0838デフォルトの名無しさんNGNG
ダメだって書いてあるんだからtry catchは使うべきではないだろ
__try __exept __finallyで代用するのがいいんじゃないの?
0839760NGNG
>>760です。
C+ウィンアプリを、static、グローバル変数を使わず、
手続き型っぽく作りたいと言っていたものです。
以下のプログラムはどうでしょうか。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=7

>>760のでは、>>779-781で、送られてこないメッセージがある等の
ご指摘を受けたのですが、そういう致命的なエラーはあるでしょうか。

>>783>>790のコールバック先を切り替える方法では
うまく出来なく、新しい方法を考えていました。
0840デフォルトの名無しさんNGNG
OLE DragDropで、アプリケーション内でのドロップと
外部アプリケーションへのドロップで動作を変えたいのですが
この場合って適当なクリップボードフォーマットをでっち上げるのと、
フラグかなんかで場合分けするの、どっちがいいんでしょうか?
0841825NGNG
皆さんレスありがとうございます。

最初は少しぐらいリークしてもいいかと思ったんですが、呼び出し毎に
新スレッド生成・終了して蓄積されていくのでちゃんと対応することにしました。
スレッド生成元を変えてもらうのは不可能なのが困りものです。

一番変更が少なそうに思いますので、sprintf系については教えていただいた
Shlwapiのを使うことにしてみます。MSDNをちょっと読んだ感じではサービスでも
使えそうですし。
0842825NGNG
>>841 のつづきです。

__try, __except の使用はOKなのでしょうか?
libcmt.libとかをつけないとリンク時にエラーが出るので、もしかしたら
Cランタイムの一部なのかと不安だったのですが、機能的にはふつうの
ランタイム関数とは趣が異なるので大丈夫なんでしょうか。

C++のtry, catchはlibcmt.libなしでもリンクは通ったのですが、
なんか不安なのでnewやSTLも合わせて使用をやめておきます。
0843デフォルトの名無しさんNGNG
>839 いろいろ考えるなあきみは (;´Д`) 発想の方向はちょっと間違えているけど、
きみのような人は嫌いじゃない。

たとえば WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
そのコードだと、WM_PAINT も一度 DefWindowProc を抜けた後に
きみ自身の WM_PAINT 処理を行う事になるよね。
しかし、1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
さもないと思うようには描画されない。もれは経験済みだw
# いや、DefWindowProc が何をやっているか知らないから、何ともいえないけど。

そもそも、きみのコードはすでに手続き型ではなく
普通の (でも下手に喘いでいる分、滑稽な) イベントドリブンに見える。
そんなきみに漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。

LRESULT CALLBACK
WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 if (g_scene == BATTLE) HandleBattle(hwnd, msg, wParam, lParam);
 else if (g_scene == SELECT_ITEM) SelectItem(hwnd, msg, wParam, lParam);

 return DefWindowProc(hwnd, msg, wParam, lParam);
}

HandleBattle や SelectItem の中身は >839 のコードからメッセージポンプを外したもの。
あ、HandleBattle から SelectItem を呼び出すんじゃないよ。
代わりに g_scene = SELECT_ITEM; と書く。
0844デフォルトの名無しさんNGNG
自前のウインドウクラスライブラリで、ダイアログを実装しようとしているのですがうまくいきません。
下のようにすると、ダイアログを閉じたときに、
なぜか親ウインドウが他の関係ないウインドウ(エクスプローラから起動したらエクスプローラウインドウの下、VisualStudioでデバッグするとVisualStudioウインドウの下)に隠れてしまいます。
TopMost属性をもたせてから解除する方法を試しましたが、一瞬ちらつきます。APIのDialogBoxより不自然です。
どうすればいいのでしょうか。


int WND::ShowDialog()
{
EnableWindow(m_hParent,false);
bool m_EndDialog=true;

MSG msg;
while (GetMessage(&msg, NULL, 0, 0) && m_EndDialog == true)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Hide();
EnableWindow(m_hParent,true);
return DialogResult;
}
0845760NGNG
>>840
ありがとうございます。

>WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
>1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
そういえば。逆に、WM_PAINTが来た時、BeginPaint〜EndPaint、
DefWindowProc、両方ともを行なわなかった時も、おかしくなりますよね。

では、以下のはどうでしょうか。
while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...)
  {
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    ・・・
  } else
    DispatchMessage(&msg);
}

>漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。
こういうタイプのも考えていました。
ただ、これだと、SelectItemに行くとき、HandleBattleのキャラデータが、
ローカルに置いておくと当然分からないから、グローバルでないといけません。

HandleBattleにキャラデータがあり、SelectItemへ行く時、スタックに積んで、
戻り値(参照渡し)でどのアイテムか戻ってくる形にしたいのです。
0846760NGNG
又は、>>845のDispatchMessageに行かないのがダメなら、
以下のならどうでしょう。DispatchMessage(WndProc)に変数(useMessage)を
渡せないから、g_useMessageとグローバル変数を使ってしまいますが。

while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  g_useMessage = 0; //まだゲームルーチンでメッセージを使っていない
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...) {
    g_useMessage = WM_KEYDOWN;
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    g_useMessage = WM_PAINT;
    ・・・ }

  DispatchMessage(&msg);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  if(!g_useMessage) return 0;

  switch(msg)
  {
    case WM_DESTROY: PostQuitMessage(0); break;
    default: return(DefWindowProc(hWnd, msg, wParam, lParam));
  }
  return (0L);
}
0847デフォルトの名無しさんNGNG
>>846
結局普通のWndProcの使い方に近づいていってるなw
なんかゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
邪推だけど、意地でもWindosAPIなんかわかってやるもんかって感じがする。
0848デフォルトの名無しさんNGNG
最初から読んでないけど、シーン管理クラス作ってループ回すのとどう違うんですか。
0849760NGNG
>>847
>結局普通のWndProcの使い方に近づいていってるなw
始めのやり方から妥協してきているんですかね。

>ゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
>>781のやり方に近いですかね。
ただ、Cのコンソールプログラムを長くやってきたせいか、変数のスコープとかに
すごくこだわっていて、使う事がない場所からは、見えないようにしたいのです。

>意地でもWindosAPIなんかわかってやるもんかって感じがする。
確かにそうですね。必要最低限なもの以外(メッセージの部分など)は、
長くやってきたコンソールっぽく書きたいというのがありました。

ただ、逆に言うと、猫、創作プログラミングの町などの一般的な書き方は、
C言語(標準C)のセオリーから大きく離れすぎていると思います。
0850デフォルトの名無しさんNGNG
>離れすぎていると思います。

どうしてそう思うか説明できますか?
それが出来ないのなら多分あなたの感覚の方がおかしいです。
0851760NGNG
>>848
C++は殆ど分かりません。ローベルさんの所で少しかじったぐらいです。
ただ、ググってソースを見てみた所、何となくその意味は分かりました。

うまく言えませんが、自分がコンソール風で行こうとしているのに対し、
猫とかの一般の書き方をしつつ、スコープ等も考慮するという感じでしょうか。
0852760NGNG
>>850
セオリーと大きく書きすぎたほどの事ではないかも知れませんが、
やはりstatic、グローバル変数です。標準Cでは使う事が殆ど無いですから。
一般の書き方だと、使わないと組めないと思いました。
>>845のやり方が大丈夫なら、ひとつも使わずに組めると思います。
0853デフォルトの名無しさんNGNG
わからんな。
いや、わかるか。
こんなことする暇がないからC++ができたんだな。
納得したぞ。
0854デフォルトの名無しさんNGNG
>>852
グローバル・スタティック変数なんて、
Windowsのプログラム書いてても滅多に使わないけどな・・・

普通は構造体を確保して、
そのポインタをSetWindowLongでウィンドウに関連付けるとかじゃね?

>猫、創作プログラミングの町などの一般的な書き方
サンプルはわかりやすくするために、
これらの手順を省いてるだけだと思われ
0855デフォルトの名無しさんNGNG
>>854
C++ならそうかもしれんが、
Cだと('A`)マンドクセからけっこう使っちゃいそう。
っていうか実際使う。
0856760NGNG
>>845のやり方が正しいかまだ分かりませんが、何かためしに作ってみます。
そんな致命的なエラーが出るとは思わないので。

>>853
WinSDKプログラムは、C++で作る事を前提に作られているんですかね。

>>854
>サンプルはわかりやすくするために、
>これらの手順を省いてるだけだと思われ
それもあると思います。

>>855
その通りです。
0857デフォルトの名無しさんNGNG
エクスプローラのReBarの枠やフォルダツリービューの枠のように
WS_EX_CLIENTEDGEよりもずっと薄いエッジを持ったウインドウを作るにはどうすればいいのですか
0858844NGNG
サムワンヘルプミー
0859デフォルトの名無しさんNGNG
ノーバディヘルプユー
0860デフォルトの名無しさんNGNG
普通にDialogBox使えよ
0861デフォルトの名無しさんNGNG
>>860
リソースエディタで作ったウインドウではないので、DialogBoxでは駄目なんです。
.NETのクラスライブラリのような感じなんです。
0862デフォルトの名無しさんNGNG
Hide()は何やってるの?
0863デフォルトの名無しさんNGNG
>>857
ナントカSTYLE_FLAT
0864デフォルトの名無しさんNGNG
>>862
ShowWindow(m_hwnd,SW_HIDE);
こうです。m_hwndはダイアログウインドウのハンドルです。
0865デフォルトの名無しさんNGNG
>>861
だったらDialogBoxIndirect使え。
.NETのクラスライブラリみたいなやつとかどうでもいいことは言うくせに
肝心の関連しそうな周辺コードを一切出さないのは何のつもりだ?
0866デフォルトの名無しさんNGNG
不謹慎かもしれませんが、教えてください。

もし仮に年号が新たに変わった場合、
GetDateFormatでその新しい年号を取得するためには、
どのようにすれば良いでしょうか?
0867デフォルトの名無しさんNGNG
>>866
WindowsUpdateするしか無いんじゃないの?
0868デフォルトの名無しさんNGNG
>>844
Hide() するまえに親を Enable するとどうなります?
0869デフォルトの名無しさんNGNG
>>864
SetWindowPos(m_hwnd, NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW | SWP_NOACTIVATE |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
0870デフォルトの名無しさんNGNG
>>865
すみません本当にすみません
>>868
ご助言ありがとうございました
>>869
そうやるとできました。本当にどうもありがとうございました。
0871 ◆FIcNi4f8js NGNG
>>859
三人称単数現在のsは?
0872デフォルトの名無しさんNGNG
すいません、
CreateWindowExでWS_EX_CLIENTEDGE付きのスタティックコントロールを作って
みたのですが、この境界線の幅というのは、どうやって変えれば良いのでしょう
か?
具体的には、もっと細い境界線にしたいのですが、宜しくお願い致します。
0873デフォルトの名無しさんNGNG
回答を無視して繰り返し質問する奴には教えない
0874デフォルトの名無しさんNGNG
>>871
その言い方、あなたは抄録か忠一ですね
0875872NGNG
>>873
数スレ前まで遡ってみましたが、回答らしきものが見当たらなかったので質問
したのですが…
0876デフォルトの名無しさんNGNG
>>875
>>863のことじゃない?
0877デフォルトの名無しさんNGNG
マウスの移動範囲を制限できるAPIがあったと思うのですが
名前が思い出せません。どなたかご存知内でしょうか?
0878デフォルトの名無しさんNGNG
ClipCursor
0879デフォルトの名無しさんNGNG
>>877
http://www.google.co.jp/search?q=%E3%83%9E%E3%82%A6%E3%82%B9+%E7%A7%BB%E5%8B%95%E7%AF%84%E5%9B%B2+%E5%88%B6%E9%99%90&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&sourceid=mozilla-search
0880デフォルトの名無しさんNGNG
内容的には結局C#じゃなくてWinAPIなので、ここで質問させてもらいますね。

C#から任意のプログラムを最小化したりタスクバーから消したいのですが、
SendMessage(hWnd, Msg, wParam, lParam);をC#で書き直して
こんな感じでmyProcの内容を最小化させることが出来ました。
WindowsAPI.SendMessage(myProc.MainWindowHandle, WindowsAPI.WM_SYSCOMMAND,WindowsAPI.SC_MINIMIZE, -1);

myProcのアイコンをタスクバーからも消したいんですが、そのための関数はどんなものがありますか?
CreateWindowExというのを見つけましたが、これはWindowを作るときのものだから、僕の目的では使えませんよね。
0881デフォルトの名無しさんNGNG
TerminateProcess
0882872NGNG
>>876
ええっ

ぐぐることも出来無いようなレスが回答だったんですか…

本当に分からなくて困ってるんですが、もうすこしヒントを頂けませんか?
0883デフォルトの名無しさんNGNG
VC++三日目の初心者です、APIとMFCの違いも感覚でしか理解していません
いくらでもたたいてくれて結構です
画像を加工して保存がしたいのですが
HDCで保持するのとDIBデータを扱う2つがあるのですが
この2つについての、違いをご教授願いたいのです。
0884デフォルトの名無しさんNGNG
>>883
DIB も DDB も HDC で管理する点では同じだ。
読み込みは LoadImage でできるが、書き込みは自分で関数書くことになる。
詳しく説明しようとすると、ここにまんまソース晒すことになるんでやめとくが、
キーワード出しとくから、がんばってみな。

BMP形式のファイルは先頭から
BITMAPFILEHEADER 構造体
BITMAPINFOHEADER 構造体
色値の配列(型は色数によって異なる)
という形式になっている。

ファイルの取り扱いはAPIならCreateFile、MFCならSerializeかCFileだ。
0885デフォルトの名無しさんNGNG
>>880を要約すると

CreateWindowExにWS_EX_TOOLWINDOWを渡すのは、
外部から操作するのには使えなさそうだから、別の方法を教えてください

ということです。お願いします。
0886デフォルトの名無しさんNGNG
HideWindow?
0887デフォルトの名無しさんNGNG
>>885
SetWindowLongで出来るのかどうかオレにはわからない。
あとはアレだな、最小化アイコン専用のウィンドウを
つくって、本物ウィンドウと連携させるとか。
0888デフォルトの名無しさんNGNG
プロセスを終了することなく親ウィンドウを閉じて作り直すこのって
どうゆう手順になりますか?
0889デフォルトの名無しさんNGNG
>>888
あなたの定義で、親ウインドウとは?
0890デフォルトの名無しさんNGNG
>>888
そういうことが出来る造りにしておく。
他プロセスのウィンドウの話なら、基本的に無理。
0891デフォルトの名無しさんNGNG
>>889
最初に開いたウィンドウのことです。

>>890
自プロセスでやるならどういった準備が必要になるのでしょうか?
0892デフォルトの名無しさんNGNG
>>891
つまり、あなたのアプリではあらゆるウインドウが全て
WM_DESTROY に対して PostQuitMessage を発行するわけか
0893デフォルトの名無しさんNGNG
>>882
Googleだけが調べる方法じゃないでしょ。

WS_EX_CLIENTEDGEが定義されているヘッダファイルから、なんとかFLATを
GREPするとか。
0894デフォルトの名無しさんNGNG
アプリの多重起動を防ぐ為にCreateMutexするところまではわかったんですが
Mutexの名前をシステム内で一意にする方法はありますか?

適当な名前を引数にすると他のアプリと衝突しそうな気がするんですが・・
0895デフォルトの名無しさんNGNG
GUID使うとかは?
0896デフォルトの名無しさんNGNG
>>895
みんながそうしているならそれでいいんだがね
0897デフォルトの名無しさんNGNG
exeへのフルパス
0898デフォルトの名無しさんNGNG
リストビューについてなんですが、
もしかして隠しカラムを設定できますか?
MSDN見ても書いてないから無理なのかなぁ

LVCOLUMNのcxに0設定して擬似的にするしかありませんね?
0899デフォルトの名無しさんNGNG
むかつく
0900デフォルトの名無しさんNGNG
>>897
>>896
0901デフォルトの名無しさんNGNG
空から星が落ちてきて直撃しそうで怖いんですがどうしましょう?

っていう質問と似てるな。
0902デフォルトの名無しさんNGNG
゚・(つд`)・゚・
0903デフォルトの名無しさんNGNG
とりあえず日本語(全角文字)使っとけ、くそども。
「ぬるぽ....」でもなんでもOK。バックスラッシュ以外はすべてOK。
Windowsは内部的には文字列リソースをUnicodeで持つので、
海外のアプリと衝突することはかなり回避できるはずだ。
0904デフォルトの名無しさんNGNG
>Windowsは内部的には文字列リソースをUnicodeで持つので、

これと

>海外のアプリと衝突することはかなり回避できるはずだ。

これは何の関係があるの?
0905デフォルトの名無しさんNGNG
というかほんとに適当に16文字くらい使えば衝突しないと思うけど。
何を指定したって確率の問題じゃないですかー。
0906デフォルトの名無しさんNGNG
完全に回避することができない。たんなる確率の問題だから、星の直撃の心配
と同じ。偶然の一致を避けるような工夫をできるだけするしかない。ながーい文字列
とか、exe のフルパスもかなりいい感じだと思うけどな
0907デフォルトの名無しさんNGNG
でも、exeのフルパスだとコピーされたら多重起動ができる。
抜け道が簡単に出来ちゃうからダメだと思うよ。
大型アプリなら問題ないかもしれないけど…
0908デフォルトの名無しさんNGNG
>>907
セキュリティーに関連するような大事なハンドルを
デフォルトSID(=NULL)で作成する時点で駄目駄目でしょ。
親プロセスが全ての重要ハンドルを作成し、
明確に子プロセス以外アクセスできないようにするのが普通だと思う。
0909デフォルトの名無しさんNGNG
>>908
Mutex作る時に使うオブジェクトの名前が違う事になるから、
違うハンドルを作ってしまうって事では?
これについてはセキュリティ関係ないのでは…?
0910デフォルトの名無しさんNGNG
>でも、exeのフルパスだとコピーされたら多重起動ができる。

そうだね。VBのだとそういう振る舞いをするんだそうだ。

lihvwdghwelkihvwrhweruhakjabhojwejjw

こういう文字列を使った場合、偶然に一致するアプリがあるかも、って心配は
まぁ、したけりゃしてもいいけどな。
0911デフォルトの名無しさんNGNG
>>896 >>900
こっちがユニークなら、皆どうだろうと関係ないんじゃない?
0912デフォルトの名無しさんNGNG
ユニークかどうかはほかが同じことしてないかどうかに関係する
0913デフォルトの名無しさんNGNG
悪意を持って多重起動の判断を混乱させようとしているのでない限り
「GUIDに見える(けどuuidgenで生成したものではない)文字列」とか
「他のexeのフルパスに見える文字列」
をわざわざ使うとは思えないんだけど
0914デフォルトの名無しさんNGNG
悪意か善意かは問題ではない。ある演算なり、一定の規則(フルパスやGUIDもこれに入る)
を採用して文字列を取得した場合と、まったくでたらめな文字列の場合、一致する確率が
どっちが低いか、を考えるべき。exe のフルパスの場合は、異なるアプリ間で偶然一致する
のは考えづらいけど、他のディレクトリにコピーされた同じexeが二重起動される。これは
かなり現実的な問題ではある。
0915デフォルトの名無しさんNGNG
そもそもなんで多重起動を抑止したいのかって理由にもよるだろ。
0916デフォルトの名無しさんNGNG
二重起動を抑止したい理由と、名前付き Mutex の名前がユニークかどうかは関係ない
0917デフォルトの名無しさんNGNG
>>892
PostQuitMessageをスローしないだけで済むのですね(^^;
どうもでした。
0918デフォルトの名無しさんNGNG
>>914
本当にまったくでたらめじゃ確かに一致しない確率は最高だろうけど
自分の別インスタンスとも一致しないから多重起動の判定に使えない。
最低でも多重起動のチェックができる程度の何らかの規則は
導入しなくてはならない。問題はその規則が(他の規則を採用している
かもしれない文字列も含めて)偶然一致する可能性をどれだけ
減らせるか。
0919デフォルトの名無しさんNGNG
>自分の別インスタンスとも一致しないから多重起動の判定に使えない。

何いってるの?
0920デフォルトの名無しさんNGNG
>>918

すこしは頭使えよ
0921デフォルトの名無しさんNGNG
>>918はGUIDを毎回生成するとでも勘違いしてるんじゃないのか
0922922NGNG
IHTMLDocument等のHTMLに関わる
インターフェイスを使用しています。
現段階では、ActiveXのWebBrowserから
IHTMLDocumentを取得しているのですが、
ブラウザを介さず、
URLまたはHTMLテキストから
直接IHTMLDocumentを
取得したいのですが、
そのあたりの方法があれば教えて下さい。
0923デフォルトの名無しさんNGNG
簡単なのは WinInet のAPI使うのだな。ググルといっぱいサンプルが見つかるはず。
0924デフォルトの名無しさんNGNG
>直接IHTMLDocumentを取得したいのですが、

あっ、勘違い、すまん
0925デフォルトの名無しさんNGNG
SetTimerで、引数のID所で0、又は既に使われているIDを指定すると、
戻り値で空いているIDが返ってきて、それを使うという事を出来るのでしょうか。
0926デフォルトの名無しさんNGNG
どこをどう読めばそうゆう解釈が
0927925NGNG
>>926
ありがとうございます。やっぱできないのですね。
その方法が使えれば、IDをEnumなどに定義しておかなくても、
ちょこっと使いたいときに楽かなと思いまして。
0928デフォルトの名無しさんNGNG
>>893
うそ教えるな。問題のスタイルはCCS_*だから、標準的なスタイルには用意されてなくて
自前で描画するしかない。
0929デフォルトの名無しさんNGNG
>>922
mfc スレでちょっと前に (レス720前後) 同じ質問にと答えた記憶あるんだけど、
あれじゃあうまくいかなかった?
0930デフォルトの名無しさんNGNG
ローカルにあるプロセス間で通信をするのに今はソケットを使っているのですが
帯域がボトルネックになっているので改善方法を探しています。

名前つきパイプやメモリマップドファイルを使うことでパフォーマンスの向上は
のぞめますか?ストリームのようにデータを転送するのでメモリマップドファイル
にする場合は何かの方法で同期を取る必要があると思います。
0931デフォルトの名無しさんNGNG
そのままにしておいた方が、ポテンシャル高くて後々おいしいような。
0932デフォルトの名無しさんNGNG
ボトルネックになってるんだったらしゃーないような。
でも、プロセス巻通信がそんなに頻繁に起こるならいっそプロセス統合した方がよくないか?
0933デフォルトの名無しさんNGNG
.NET Framework 1.1を使うアプリを公開したいのですが、
.NETのCLRがインストールされているか調べるにはどうしたらいいですか?
0934デフォルトの名無しさんNGNG
>>933
漏れは VS .Net のウィザードで作ったインストーラプロジェクトの
インストーラでチェックしてるけど、API でチェックしたいってこと?
0935933NGNG
>>934
そうです。
0936デフォルトの名無しさんNGNG
レジストリを見るんじゃないの
0937デフォルトの名無しさんNGNG
VC++6.0を使っています。
iphlpapi.hをインクルードしたいのですが
このファイルが無いようです。
どこから拾ってくればよいでしょうか?
0938デフォルトの名無しさんNGNG
>>937
>>2
0939デフォルトの名無しさんNGNG
>>934
レジストリ見るプログラムは何で作るの?
CLRに対応してるか確認するプログラムは
CLRを使う.NETじゃ書けないってことなのかな.
.NETって面倒だね.
0940デフォルトの名無しさんNGNG
…( ゚Д゚)ポカーン
0941デフォルトの名無しさんNGNG
駐在型ソフトだと、タスクバーから表示を消して、タスクトレイにアイコンを表示していますよね?
これをするにはどうしたら良いですか?
0942デフォルトの名無しさんNGNG
駐在型?
0943デフォルトの名無しさんNGNG
ウインドウを消してタスクトレイにアイコンを登録する。
0944デフォルトの名無しさんNGNG
そのウィンドウの消し方教えてくださいよー ヽ(`Д´)ノ ウワワーン
0945デフォルトの名無しさんNGNG
DestroyWindow
0946デフォルトの名無しさんNGNG
ShowWindow
0947デフォルトの名無しさんNGNG
ウインドウ非表示の方法ぐらい
知っててくださいよー ヽ(`Д´)ノ ウワワーン
0948デフォルトの名無しさんNGNG
スタートボタンで終了したり、ShowWindow でウィンドウを消したりさせるマイクロソフトが悪い
0949デフォルトの名無しさんNGNG
馬鹿は何でもMSのせいにするからなぁ w
0950デフォルトの名無しさんNGNG
なんでもすぐ人のせいにするのは無能の典型
0951デフォルトの名無しさんNGNG
>>950
勧告陣に言ってくださいw
次スレ〜たてて
0952テンプレ1NGNG
- 過去スレ
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/ ★
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/ ★
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様
0953デフォルトの名無しさんNGNG
難民のあれか・・・。
どこかにミラーが残ってないかな?
0954デフォルトの名無しさんNGNG
part15のログなら1000まで持ってるが
0955デフォルトの名無しさんNGNG
part16のログなら1000まで持ってるが
0956デフォルトの名無しさんNGNG
( ´_ゝ`)フーン
0957デフォルトの名無しさんNGNG
part22のログなら1002まで持ってるが
0958デフォルトの名無しさんNGNG
ウィンドウのどの位置にマウスポインタがあるか調べる方法を教えてください。
調べると、GetCursorPosをして、ClientToScreenで変換するとあったのですが、
ウィンドウの位置でなく、ディスプレイの位置のなのか、正しく調べられません。
0959デフォルトの名無しさんNGNG
>>958
そこはClientToScreenじゃなくてScreenToClientじゃないか。
0960958NGNG
>>959
ホントだ。逆の方を使っていました。
ありがとうございました。
0961デフォルトの名無しさんNGNG
自分がつくったステータスバー(CreateStatusBarで作成)は、マウスを
うえにのせてもなにもメッセージをうけとったり、送信したりしないのに、
そのへんのアプリケーションのステータスバーはwm_nchittestを送信した
あとにいろいろやっています。それもどのアプリも大体共通した動作。
(メッセージのやりとりはspy++で見ました)

自分がつくったステータスバーにおいてもこれを実現するためには何を
すればいいのでしょうか?
0962933NGNG
933です。
%windir%\system32\mscoree.dllのバージョンが1.1以上だったら
.NET Framework1.1がインストールされているされていると考えてよいのでしょうか。
Win32APIな話題からそれていますが、ほかの環境ではどうなのか知りたいのでお願いします。(当方WinXPSP2)
0963デフォルトの名無しさんNGNG
>>961
サブクラス化しなさいよ
0964デフォルトの名無しさんNGNG
パート15と16持ってる人いる?
うpってもらえれば、>>1のテンプレに追加して書いたり
0965デフォルトの名無しさんNGNG
そのファイルだけコピーされてたらどうすんの?
0966デフォルトの名無しさんNGNG
>>964
両方あるけど、Janeのログだから手を加えないとだめだよね?
0967デフォルトの名無しさんNGNG
>>964
うぷろだにうぷっただけじゃすぐ消えちゃうよ
0968964NGNG
2ch系のどっかのサイトが、基本的に消さないとかいう方針のうpロダがあったんだけど…
たしか、FLASH系サイトをまとめてるやつ

>>966
HTML化したほうがよさげ。
ttp://tatsu01.at.infoseek.co.jp/
0969デフォルトの名無しさんNGNG
ほい。
ttp://up.isp.2ch.net/up/87d091951909.zip

当然すぐ繋がらなくなるから、誰か転載よろしく。
0970964NGNG
15
ttp://saba.haiiro.info/uploader/file/0587.html
16
ttp://saba.haiiro.info/uploader/file/0588.html

使おうと思ってた、with2chはお休み中だった(つд`)
0971ほんたまNGNG
WideCharToMultiByteを使って、unicodeをsift-jisに変えると、漢字などはちゃんと変換されるんですが、半角英数を変換すると文字化けするんですが…?
みなみなさまがた〜教えてくだされ〜♪
0972デフォルトの名無しさんNGNG
沢村の新コテか
0973デフォルトの名無しさんNGNG
文字化けするんですが…?

ってのはどこが質問なのかな
まあ、普通はそんなことにならないので答えようも無いが。
0974ろろNGNG
>>971さん
WideCharToMultiByte のオプションがまずいのではないかな?
どんなふうに呼び出しているの?
0975デフォルトの名無しさんNGNG
プッシュボタンコントロールの外観を、
テキストではなくBMPにすることはできますでしょうか?
0976デフォルトの名無しさんNGNG
出来ます。
0977デフォルトの名無しさんNGNG
>>976
ありがとうございました。頑張ってみます。
0978ほんたまNGNG
>>975
おみゃ〜よ、オナードローボタンにすればいいよ。
つくりかたは「猫でも…」に書いてあるよ。自分じわかる?
>>974
WideCharToMultiByte(CP_ACP,0,(unsigned short *)pctext,tempsize2,temptext,tpsize2-1,NULL,NULL);
というふうに呼び出しています。
pctextとtemptextはchar型の文字列です。
まずファイルのunicode文字をpctextに1字1字バイナリコピーします。
半角英数の「OK」なら「4F 00 6B 00」というのがその値です。
この時点で、pctextの内容を画面に表示してみると、unicode文字なのにすでに「ok」と表示されます。
でもこれを上のapiを使ってsift-jisに変換してからtemptextを表示すると、何故か「?」と文字化けして表示されるのです。
漢字や半角カタカナを変換する場合はまったく問題ないのですが…?
0979デフォルトの名無しさんNGNG
S-JISのコードページはCP_ACP?
0980デフォルトの名無しさんNGNG
そうですか。
0981デフォルトの名無しさんNGNG
自己解決しました。
0982ほんたまNGNG
「ok大下容子」という文字列の場合、
変換前のunicode文字列を表示すると「ok'Y・Nケ[P[」になり、
変換後のsift-jisを表示すると「?大下容子」になります。
つまり半角英数は変換前のほうがちゃんと表示され、漢字は変換後にちゃんと表示されます…?
みなみなさまがた〜教えて〜♪
0983デフォルトの名無しさんNGNG
だから、普通はそんなことにならないから。
というわけで、終了
0984デフォルトの名無しさんNGNG
>>978
tmpsize2, tpsize2 とかの実際の値はどーなってる?
WideCharToMutiByte() の返り値は?

日本語 Windows なら CP_ACP で問題はないです。
0985ほんたまNGNG
勘違いでした。
エヘ♥
0986デフォルトの名無しさんNGNG
他のアプリのボタンを押したいのですが
ツールバーの中にあるボタンのウィンドウハンドルはどうやったら取得できますか?
0987デフォルトの名無しさんNGNG
wchar_t unitext[] = L"ok大下容子";
std::vector<char> tmp;
tmp.resize(::WideCharToMultiByte(CP_ACP, 0, unitext, -1, NULL, 0, NULL, NULL));
::WideCharToMultiByte(CP_ACP, 0, unitext, -1, &tmp[0], tmp.size(), NULL, NULL);

もんだいねぇけど。
0988デフォルトの名無しさんNGNG
>>986
ありません
0989デフォルトの名無しさんNGNG
ないですか
座標で押すのかな
位置が変わったりしないんだろうか
0990デフォルトの名無しさんNGNG
あります
0991デフォルトの名無しさんNGNG
>>989
座標からアイテムの情報が分かるから、
それを拾ってツールバーの親にメッセージを投げてやればいい。
0992デフォルトの名無しさんNGNG
thx
そのやりかたであたってみます
0993デフォルトの名無しさんNGNG
どうやってテキストを表示していますか?UTF-16LEだと最初の1オクテットには
oとkが含まれているので0x00を無視するような方法で出力してればokって文字列が
最初に見える。
そうじゃないのに「ok'Y・Nケ[P[」っていうのが見えるならファイル読み込みの部分
で「4F 00 6B 00」を「4F 6B」にしちゃってる。
0994デフォルトの名無しさんNGNG
wifstreamを使ってないとか
ifstreamでバイナリモードにせずに読んでるとか
そんなとこじゃないの
0995デフォルトの名無しさんNGNG
しかし沢村は相変わらずのズレっぷりだな
0996デフォルトの名無しさんNGNG
次スレまだ〜?
0997デフォルトの名無しさんNGNG
まだ
0998デフォルトの名無しさんNGNG
埋めちゃうよ?
0999デフォルトの名無しさんNGNG
だめ
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。