5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API 質問箱 Build7

1 :デフォルトの名無しさん:02/11/07 16:41
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

過去スレ
Win32API 質問箱 Build6
http://pc3.2ch.net/test/read.cgi/tech/1032548635/
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html


2 :デフォルトの名無しさん:02/11/07 16:41
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

http://big.freett.com/scheme_a/num1000.swf

3 :デフォルトの名無しさん:02/11/07 16:48
>>1

>>2 せっかちさん

4 :デフォルトの名無しさん:02/11/07 16:56
1 乙
2 のタイムスタンプが素晴らしい。
リンクのフラッシュはもっと素晴らしい。誰が作ったんだ。

5 :デフォルトの名無しさん:02/11/07 19:31
5get

6 :デフォルトの名無しさん:02/11/08 20:35
ダイアログを生成して、ユーザにいくつかの文字列を選択させます。
その文字列をlist<string>などで返したいのですが、どういう手段が考えられるでしょうか?

DialogBoxParamを用いてlist<string>のポインタを渡してやれば良いとは
思いますが、もう少しスマートな解決法を模索しています。

7 :デフォルトの名無しさん:02/11/08 23:22
CD−ROMをRAW読み込みするにはASPIつかわないと駄目なんでしょうか。
CD-ROMドライブを直接読み込んだらRAWなしのISOイメージになってしまいます。

8 :デフォルトの名無しさん:02/11/09 03:53
前スレから持ち越し。
このコードはリンクするライブラリをマルチスレッド対応版にするだけで動くんだが何故だ?
_beginthreadex() って要らないの?

struct ThreadInfo { HANDLE hMutex; char TestStr[12]; };

DWORD WINAPI TestFunc(LPVOID ThreadData)
{
ThreadInfo &Info = *(ThreadInfo *)ThreadData;
std::string RetStr("result: "); const char *sep = ",";
char IDBuf[64]; sprintf(IDBuf, "Thread 0x%08X Info", GetCurrentThreadId());
WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); char *s = strtok(Info.TestStr, sep); ReleaseMutex(Info.hMutex);
while(s) {
RetStr += s; RetStr += " - ";
WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); s = strtok(NULL, sep); ReleaseMutex(Info.hMutex);
}
MessageBox(NULL, RetStr.c_str(), IDBuf, MB_OK);
return 0;
}

int main()
{
DWORD Thread1ID, Thread2ID; HANDLE hMutex = CreateMutex(NULL, TRUE, NULL);
ThreadInfo Info1 = { hMutex, "ab,cd,ef,gh" }, Info2 = { hMutex, "12,34,56,78" };
HANDLE hThread1 = CreateThread(NULL, 0, TestFunc, &Info1, 0, &Thread1ID);
HANDLE hThread2 = CreateThread(NULL, 0, TestFunc, &Info2, 0, &Thread2ID);
ReleaseMutex(hMutex);
WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE);
return 0;
}

9 :8:02/11/09 03:54
で、前スレで 「名前を指定してCreateMutexしなきゃ」 と言われたんだけど、
名前付きミューテックスと名前無しミューテックスとで、何か動作が変わるの?

10 :デフォルトの名無しさん:02/11/09 04:37
MTでなければ、strtokが死ぬ。
MTであれば、beginthread*を使わずとも、必要な情報は
OnTheFlyでライブラリが用意する。ただし、その情報を格納
するのに使ったcallocは、DLL版でないと開放されない。
(beginthread*なら、開放される)

11 :デフォルトの名無しさん:02/11/09 04:49
>>9
前スレ読んでないのでその文脈で名前付きが必要なのかは分からんが、
名前付き同期オブジェクトは、同じ名前を指定する事で複数のプロセス
の間で共有できる(いちいちハンドルを複製して相手に渡す必要が無い
ので扱いが楽)

1プロセス内(の各スレッド)からしか使わないなら名前無しでいい。

12 :デフォルトの名無しさん:02/11/09 05:01
前スレ(Build6)を保存しときますた。
Build4は未だにdat落ちしたままなのか…

-=-=-=-=-=-=-=-=-=-=
ここまで読んだ
-=-=-=-=-=-=-=-=-=-=

13 :8:02/11/09 05:37
>>10
そうなのか・・・。
動きはするけど後片付けしないと・・・。
らじゃ、サンクス。

>>11
8 のコードを指して言われた。
でもこのコードだけで言えば必要無いよね。
サンクス。

14 :前スレ:02/11/09 06:57
前スレ996〜998の話が丁度いい所で終わっちまってる。
続き聞かせて

15 :デフォルトの名無しさん:02/11/09 07:05
>>14
あれはそのつもりのネタだろ

16 :デフォルトの名無しさん:02/11/10 05:25
少しお聞きしたいのですが、
WindowsXPproでユーザーアカウントの画像を
ランダムに変更するプログラムを作りたいんですよ。
それでレジストリ書き換えて
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Hints\(ユーザー名)\PictureSource)
C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\ユーザー名.bmp
のフォルダに画像を生成させるとこまではできたのですが、
そのあと表示を更新させる方法がわかりません。
手動でなら、
コンパネ→タスクバーのプロパティ→スタートメニューのカスタマイズ
を開いて全てOKでとじれば更新されるのですが・・・。
どなたかご存じの方がいらっしゃれば宜しくお願いします。

17 :デフォルトの名無しさん:02/11/10 22:03
Win2k で使えて、WinNT6 で使えない API 関数を調べたいのですが、
どこかに良いサイトはありますか? オフィシャルにある?



18 :デフォルトの名無しさん:02/11/11 04:17
>>17
そんな API がどうしてあると思ったの?

19 :デフォルトの名無しさん:02/11/11 07:56
>>17
なんでNT5、あるいはXPという表記じゃないの?

20 :デフォルトの名無しさん:02/11/11 10:12
>>19
XPはNT6じゃないから(NT5.1)、と言ってみる

21 :デフォルトの名無しさん:02/11/11 13:24
一定時間PCに入力(キーボード・マウス)がないと
何かの処理をするってゆ〜のを実現する方法ってないですかね?
自アプリへの入力だけぢゃなく、他アプリへの入力も考慮に入れたいんですけど・・・


22 :デフォルトの名無しさん:02/11/11 13:54
>>21
スクリーンセイバー。
またはフック。

23 :デフォルトの名無しさん:02/11/12 01:47
DLL内で共有する変数を#pragmaで宣言したいんですが、
変数が2次元配列の場合はどうやって初期化すればいいですか?
今はこのように初期化してます。
#pragma data_seg(".shared")
int data = 0;
int pnt[1000]={0,};
#pragma data_seg()

POINT型を使いたいのですが、初期化方法がわかりません。

24 :デフォルトの名無しさん:02/11/12 02:29
唖然・・・。
初期化の方法もまともに知らないで DLL に手を出しちゃうの?

int array[3][3] = {
{ 11, 12, 13 },
{ 21, 22, 23 },
{ 31, 32, 33 }
};

第一、POINT は 2 次元配列じゃない。構造体。

POINT pt = { 10, 20 };

つーかそもそも、DLL 内の共有域を初期化しても、コードによってはどっから
どんな更新があるかわからんぞ。

25 :デフォルトの名無しさん:02/11/12 02:32
>>23
(Cの)構造体や、その多次元配列でも、= {0};でいける。
POINT p[10][20][30] = {0];

26 :デフォルトの名無しさん:02/11/12 02:40
>>23
つーか、0 初期化したいだけなら、グローバルにはその必要が無い。
グローバルは初期化指定しなくても 0 初期化される事が保証されている。

27 :デフォルトの名無しさん:02/11/12 03:00
>>26
それは一般論だろ。
この場合初期化しないとせっかく宣言した .shared セクションではなく
.bss に領域が取られてしまうの。

28 :26:02/11/12 03:43
>>26
本当だ。今知った。

でも、一般論じゃなくて C/C++ の規格の話なのだが。
まずくないのか?

29 :26:02/11/12 05:31
あ、規格というのは data_seg がどうのという話じゃなくて、グローバルなのに
dup(?) になるって話。

30 :aru:02/11/12 09:01
スレ違いだと思うので、ごめんなさい。
でも、もし知っている人がいたら教えてくだされ。

WindowsXP DDKのデバッグ情報をモジュールに入れ込むにはどうすればいいんですか?
PDBを作らないように設定しようと思ったけど、うまくいかないし…。
おかげでビルドしているPCでしかデバッグできなそう。
デバッグPCでデバッグしたいのになぁ。
makefileをいじったけど、全然うまくいかないし (T_T)


31 :デフォルトの名無しさん:02/11/12 09:19
>>28-29
ここはWin32 APIスレなんですが。
C/C++ の規格の話ならスレ違いでしょ。
http://pc3.2ch.net/test/read.cgi/tech/1036876790/
http://pc3.2ch.net/test/read.cgi/tech/1035005882/
VC++に依存しない話という意味で一般論と書いたの。

32 :デフォルトの名無しさん:02/11/12 09:21
で、Win32環境に限って言えばBSSセクションはゼロクリア
されることが保証されているので普通はまずくない。
プロセス間で変数を共有するとか特殊なことがしたいときに
だけ問題になるけどそれはすでにC/C++の規格の話ではない。

33 :デフォルトの名無しさん:02/11/12 10:14
Win32 API スレと厳密に言うなら、VC++ 固有の話はスレ違いだと思うが。

34 :デフォルトの名無しさん:02/11/12 10:40
>>30

外してたらスマンが、
PDBで無くデバッグ情報を作る(ファイル内に)ようにして
rebaseで.dbgファイルを作ればできた気がする。

35 :デフォルトの名無しさん:02/11/12 11:53
プロセス間通信などは考慮して作られていないプロセスの
メモリアドレスの内容を直接読む方法ってありますか?

36 :デフォルトの名無しさん:02/11/12 12:11
VirtualQueryEx とかかな。

37 :デフォルトの名無しさん:02/11/12 12:16
VirtualQueryExで得られるのはメタ情報であって
「読む」という言葉から一般にイメージするのは
ReadProcessMemoryのほうでは

38 :35:02/11/12 12:19
>>37
ありがとう。試してみます。

39 :35:02/11/12 14:14
読めずにFALSEが返ってきます。
何がまずいんでしょうか;;
(Win2000sp3、Adminです。)

#include <windows.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
DWORD dwBase = 7471220; //読み込むアドレス
LPCVOID lpBaseAddress = (LPCVOID)dwBase;
int cbRead = 2; //2バイト読む
LPTSTR lpBuffer = (LPTSTR)malloc(cbRead);

HWND hWnd = FindWindow("Notepad", NULL);
BOOL bResult = ReadProcessMemory(
hWnd,
lpBaseAddress,
lpBuffer,
cbRead,
NULL
);
if (bResult == FALSE){
cout << "メモリの読み取りに失敗しました。" << endl;
}
cout << lpBuffer <<endl;
return 0;
}

40 :35:02/11/12 18:41
ハンドルを勘違いしてたので修正しましたがだめだったのでエラーコード
取ってみると
「ReadProcessMemory要求またはWriteProcessMemory要求の一部だけを完了しました。」
と出ました。どこが間違ってるんだろう;;

41 :35:02/11/12 18:43
#include <windows.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
DWORD dwPid;
LPTSTR lpError;
DWORD dwBase = 9460301;
LPCVOID lpBaseAddress = (LPCVOID)dwBase;
int cbRead = 1; // 1バイトだけ読む
LPTSTR lpBuffer = (LPTSTR)malloc(cbRead);
// プロセスハンドルの取得(メモ帳)
HWND hWnd = FindWindow("Notepad", NULL);
GetWindowThreadProcessId(hWnd, &dwPid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
if(hWnd == 0){
cout << "メモ帳が起動されていません。" <<endl;
return 0;
}
BOOL bResult = ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, cbRead, NULL);
if (bResult == FALSE){
cout << "メモリの読み取りに失敗。" << endl;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpError,
0, NULL
);
cout << "Error MSG: " << lpError <<endl;
}
cout << lpBuffer <<endl;
return 0;

42 :デフォルトの名無しさん:02/11/12 19:28
あるクラスに参照カウントを持たせ、InterlockedIncrement./InterlockedDecrementで
マルチスレッド対応にしようとしたのだが…

void ref() {
InterlockedIncrement(&m_ref); 
}
void release() {
 if (InterlockedDecrement(&m_ref) == 0) {
  delete this;
 }
}

ところが、delete thisの直後にref()が呼ばれると、m_ref自体が解放された領域にあるため、
とんでもない値になってしまう。参照カウントをメンバー変数にするのが間違い?
どうしたらいんだろう?マルチスレッドのエキスパート様の降臨おながいします。

43 :42:02/11/12 19:30
マルチスレッドプログラミングのスレを発見したのでそちらに移ります。ゴメソ

44 :デフォルトの名無しさん:02/11/12 20:31
staticじゃないメンバ関数をコールバックさせることはできますか?
おねがいします。

45 :デフォルトの名無しさん:02/11/12 21:06
>>44
コールバック関数にthisを渡してやれば解決できない問題なの?

46 :デフォルトの名無しさん:02/11/12 21:12
OpenGLの描画を行うと画面下につけたステータスバーが消えちゃうんですが
回避する方法を教えてください。

glviewportやglscissorsを使ってOpenGLの描画範囲を制限しても駄目でした。

VC++&SDKです。

47 :名無し@沢村:02/11/13 02:15
皆々様方〜教えてくだされ〜♪
stopボタンを押したときにforループを抜けるようにしたいんですが、どうすればいいですか?

48 :デフォルトの名無しさん:02/11/13 02:52
>>47
WinAPIはしらんけど、
for文の脱出条件にフラグ一個置いといて、ボタン押したら
フラグ立てたら?

49 :名無し@沢村:02/11/13 06:42
>>48
それはやってみました。
が、forループの間、ボタン自体押せなかったっス。

50 :デフォルトの名無しさん:02/11/13 06:43
なぜWin32APIを知らずにここで答えてるんだろう…

51 :デフォルトの名無しさん:02/11/13 06:46
>>49
PeekMessageとforループあたりで検索すればサンプルが見つかるかも

52 :デフォルトの名無しさん:02/11/13 07:27
ふつうMulti Threadにするとおもふ

53 :デフォルトの名無しさん:02/11/13 08:35
この程度なら普通マルチにしないが。
マルチは嫌われるぞ。

54 :デフォルトの名無しさん:02/11/13 08:56
>>46
MainWindowの中にChildWindowを貼り付けて、それをOpenGL化するよろし。
ただしこれを受け付けないグラフィックカードがあるから注意されたし。

55 :デフォルトの名無しさん:02/11/13 12:16
マルチって嫌われるんですか?

56 :デフォルトの名無しさん:02/11/13 13:07
UNIXのatexit( )関数のように終了時に実行される関数を登録するAPIは
ありますか?
ただいまpdhEnumObjectItems()を使ったプログラムをテストしているのですが、
なかなかmainにおいてreturnしたあと、なかなかプロンプトが返ってきません。
そこでatexitのようなものを試しに使ってみたいと思いました。

よろしくお願いします。

57 :デフォルトの名無しさん:02/11/13 13:10
http://www.microsoft.com/japan/developer/library/vccore/_crt_atexit.htm
逝ってきます・・・

58 :名無し@沢村:02/11/13 16:02
皆々様方〜、教えてくださらんか〜?
InvalidateRect((HWND)param,&rect,FALSE);で画面を更新すると画面がちらちらしてきたないのだが、
ちらちらしないで画面を更新するにはどうしたらいいのですか?
皆々様方〜、教えてくださらんか〜?

59 :デフォルトの名無しさん:02/11/13 16:09
オフスクリーン デバイスコンテキスト

60 :デフォルトの名無しさん:02/11/13 17:50
CS_*REDRAWを削除
WM_ERASEBKGNDを処理

61 :46:02/11/13 21:08
>>54
おお、なるほど。
やってみたらちゃんと動きました
ありがとうございます

62 :デフォルトの名無しさん:02/11/14 04:26
TV_INSERTSTRUCTのitem.lParamって好きな値って
構造体のポインタとかいれて、後で使ったりするための変数?

好きな値いれていいのかな?

63 :デフォルトの名無しさん:02/11/14 04:35
>>62
イイ!

64 :デフォルトの名無しさん:02/11/14 06:25
急にお好み焼きそばが食べたくなった。

65 :デフォルトの名無しさん:02/11/14 13:19
唐揚げを食え。

66 :デフォルトの名無しさん:02/11/14 13:29
唐揚げうまうまって何のことかと思ったら
空ageにかけてたのか

67 :デフォルトの名無しさん:02/11/14 21:36
クライアント領域が完全に隠れているかどうかを調べるにはどうしたら良いですか?

68 :デフォルトの名無しさん:02/11/14 22:28
 厨房な質問ですいません。
WM_ENDSESSIONなどをヘルプで引くと、
「このメッセージを処理するアプリケーションは、 0を返さなければなりません。」
とかかれていますが、メッセージに値を返すにはどうしたら良いのでしょうか

69 :デフォルトの名無しさん:02/11/14 22:30
>>68
return 0;

70 :752:02/11/14 23:43
一つ聞きたいことがあるのですが、
整数があって、特定の桁数にそろえて文字列(CString)
に代入するにはどうすればいいでしょうか?
例:
int i = 20;
CString s;
5桁にそろえるとき、
sに00020という値が欲しいわけです。


71 :デフォルトの名無しさん:02/11/14 23:50
>>70
スレ違い。

72 ::02/11/15 00:31
>70
Format
っていってるだろ
頭悪いのか?
マルチしね。

73 :デフォルトの名無しさん:02/11/15 00:45
>>72
時間見れアフォ。

74 :デフォルトの名無しさん:02/11/15 01:12
シャットダウンのイベントを取得する方法って何かありませんか?

75 :デフォルトの名無しさん:02/11/15 01:15
シャットダウン時にイベントを取得する方法を知っていたら、教えていただけませんか?

76 :デフォルトの名無しさん:02/11/15 01:18
WM_QUERYENDSESSION/WM_ENDSESSION

77 :67:02/11/15 01:44
すいませんが誰かわかりませんか?

78 :デフォルトの名無しさん:02/11/15 01:52
透過ウインドウの話ってかなり既出かもしれませんが、
生きてる過去ログあさってみたけどほとんど見つからず。
手ほどきお願いします。
Googleで引っかかったまともなHPは
http://techtips.belution.com/ja/vc/0005/
これぐらいでした(検索キー 透過ウインドウ)

79 :78:02/11/15 02:03
自己レスです。
SetLayeredWindowAttributesでいけるみたいです
「透明ウインドウ」で検索すると結構引っかかりますね、鬱だ・・・。

80 :デフォルトの名無しさん:02/11/15 02:10
>>77
何がしたいのかわからんが、
GetUpdateRgn()で空のREGIONが返ってきたらとかいうのはダメかな。
試してないけど。

81 :67:02/11/15 03:00
>>80
常にレンダリングしていまして、
クライアント領域が他のウインドウに完全に隠れている状態では
レンダリングを中止させようと考えています。
基本的なことが良く分からないのでとりあえずリージョンについて調べてみます。
どうもありがとうございました。

82 :68:02/11/15 06:23
>>69
 Delphiで、Application.OnMessageを使った時はどうすれば良いのでしょうか?

83 :デフォルトの名無しさん:02/11/15 09:30
>>81
常にInvalidateRect(NULL, TRUE)するとか。
完全に隠れていればWM_PAINTが発生しない。

84 :デフォルトの名無しさん:02/11/15 12:35
>>81
GetClipBox を使えばよろしい。


85 :デフォルトの名無しさん:02/11/15 13:53
おいおまいら、
エディットコントロールのオーナードロー(自前で描画)ってできませんか。
やっぱ1から自作するしかないんでしょうか?

カーソル移動(マウス/キーボード)とかクリップボード周りの実装とか禿げしく面倒なヨカーン

86 :デフォルトの名無しさん:02/11/15 14:13
よくわからんけど、オーナードローするならカーソル移動は実装しなきゃ
逝けないんじゃないのか?
(EM_OWNERDRAW なんてのが MSDN に見当たらないからできなさそうだけど)

87 :デフォルトの名無しさん:02/11/15 16:05
クリップボード回りはそんなに面倒ではないよ。

88 :デフォルトの名無しさん:02/11/15 16:41
というか、カーソル移動とかに比べたら全然簡単だけど。
API 調べたらすぐ終わる。

89 :デフォルトの名無しさん:02/11/15 16:47
そういや、リストビューで、「左キー押したら左セルに、下キー押したら
下セルに」みたいな処理してたら、なんとなくパチモンエディタみたく
感じたことがある・・

90 :デフォルトの名無しさん:02/11/15 20:23
うぃ、おまいさんら!

DLL内から、WMメッセージを取得する方法を教えてください。
でも、EXE本体は全くいじれない。

91 :デフォルトの名無しさん:02/11/15 20:46
おなじプロセスに居るなら、サブクラス化したらええやん。

92 :デフォルトの名無しさん:02/11/15 21:00
>>82
メインフォームにWM_ENDSESSIONのメッセージハンドラを作って
そこで処理してから message.Result に返したい値を入れる。
っちうかスレ違いじゃメルシィボケェ。

93 :デフォルトの名無しさん:02/11/15 21:34
ファイルの一覧をリストビューで表示しているのですが、
IEで右クリックすると出て来るポップアップメニューと
同じ物を作るにはどうしたらいいのでしょうか。

94 :デフォルトの名無しさん:02/11/15 21:43
TrackPopupMenu、、、というわけではなく、
Shellのメニュー用インターフェースがどうこう、という話?

95 :デフォルトの名無しさん:02/11/15 22:10
>>94
オリジナルのポップアップは作れるのですが、
IEと同じ挙動(ファイルの種類によって違うメニューがでる)にできないのです・・・

96 :デフォルトの名無しさん:02/11/15 22:16
test

97 :デフォルトの名無しさん:02/11/15 22:17
IEじゃなくてEだろ

98 :67:02/11/15 22:26
リージョンのハンドルを作成しなくてはいけないことと、
WM_PAINTが発生しない状態かどうか判断しにくいということで、
結局>>84さんの方法で行かせてもらいました。
遅くなりましたが、レスくれた方々どうもありがとうございました。


99 :デフォルトの名無しさん:02/11/15 23:32
>>95
MSJ97/4号のWicked Code。
だが、これはファイル一つ用だけのメニューしか出せない。
複数のファイルのメニューをだすには、ファイル数分のITEMIDLISTを取得する必要がある。
また、「送る」を実装するにはIContextMenu2を使う。

100 :デフォルトの名無しさん:02/11/16 00:47
エディットコントロール使わずにエディタ作ろうと思ってるんだけど、
データは1行ずつをリストで管理して、表示の時(WM_PAINT)に表示開始行まで
リスト移動させて、1ページ分TextOutで表示させてるんだけど、遅いマシンだと
スクロール時にかなり画面がちらつく。

で、CreateCompatibleDCでつくったDCにTextOutして1ページ分書き終えたあと
BitBltしたんだけど、これだとなぜか全く表示されない。

ちらつかせないためには、どうしたらいいの?

101 :デフォルトの名無しさん:02/11/16 01:18
>>100
スクロールする時にScrollWindowEx使ってるか?
あと、PAINTSTRUCTのrcPaintに更新領域が入ってるから、
その中に入るテキストだけ描画するようにすれば軽くなる。

メモリDCには、ビットマップ作ってSelectObjectしておかないと
描画しても無意味。

102 :デフォルトの名無しさん:02/11/16 01:29
>>101
スクロールはウインドウスタイルにスクロール属性つけて、WS_HSCROLL,VSCROLL
を処理してる。

>メモリDCには・・
そうだったのか。。って、ビットマップ作るってどういうこと?

103 :デフォルトの名無しさん:02/11/16 01:38
> スクロールはウインドウスタイルにスクロール属性つけて、WS_HSCROLL,VSCROLL
> を処理してる。
つーかその「処理」の内容。

104 :デフォルトの名無しさん:02/11/16 01:42
>>103
単に内部の変数(開始行)を加減して、InvaridateRectして、
SetScrollPosでスクロールバーを変更してるだけです。
ScrollWindowExは使ってないです。

105 :デフォルトの名無しさん:02/11/16 03:51
なぜ ScrollWindow(Ex)? を使わない。
1ページ全部 TextOut で描画し直すよりも ScrollWindow(Ex)? でスクロールして、
新たに画面内に入ってきた行だけを再描画した方が速いだろうに。


106 :デフォルトの名無しさん:02/11/16 05:45
ボリュームコントロール→トーン→デジタル出力
のON・OFFを切り替えるにはどうすればいいですかね?

107 :デフォルトの名無しさん:02/11/16 09:50
コントロールのウィンドウ内位置の座標を
取得する方法を教えてくらはい。

108 :デフォルトの名無しさん:02/11/16 09:54
GetWindowRect

109 :デフォルトの名無しさん:02/11/16 10:45
してからScreenToClient

110 :デフォルトの名無しさん:02/11/16 14:01
IWebBrowser2を使用してHTMLイメージ全体を
取得するにはどうすればよいのでしょうか?


111 :デフォルトの名無しさん:02/11/16 17:58
Windowsは大部分がCOBOLで書かれているそうだ。
C/C++&asmで記述されているMacOSXと比べて基本性能がケタ違いに低い。

112 :デフォルトの名無しさん:02/11/16 18:13
>111
( ´д)ヒソ(´д`)ヒソ(д` )

113 :デフォルトの名無しさん:02/11/16 18:25
ライブラリ関数について質問です
Video for WindowsライブラリのcapGrabFrame関数で取り込んだ画像を
RGBの配列に変換する方法をご存知の方教えてください。
イメージバッファには読み込まれてると思うんですが、
capSetCallbackOnFrame等を使わずに
そこをどうやってプログラムから参照すればいいのかわかりません。
よろしくお願いします。

114 :デフォルトの名無しさん:02/11/16 19:04
1 行目からしてスレ違いな気がしないでもない

まー漏れ Video for Windows わかんねーけど

115 :デフォルトの名無しさん:02/11/16 22:18
リッチエディットコントロールで、RTFの画像を表示したいのですが、
どうすればできるでしょうか?MFCが使えない環境なので、困っています。

116 : :02/11/16 22:33
>>111
ファミリーベーシックって聞いたよ。
直接ゲイシが言ってたから間違いない。

117 :デフォルトの名無しさん:02/11/16 22:41
>>111 >>116
スレ違いだから出て逝ってくれ。

118 :デフォルトの名無しさん:02/11/17 00:36
>>106
mixer...で始まるAPIの使い方を調べてみるといいんじゃないかな。
ボリュームコントロールと同等のことをするサンプルコードが
あったはず。

119 :デフォルトの名無しさん:02/11/17 04:06
IWebBrowser2をオフスクリーンに描画する方法を教えて下さい。
メモリデバイスコンテキスト作ってSetDCとかできないんでしょうか?

120 :デフォルトの名無しさん:02/11/17 23:50
>>119
TextOut(hdc,0,0,"IWebBrowser2",strlen("IWebBrowser2"));

121 :デフォルトの名無しさん:02/11/18 02:20
keybd_event 以外で
起動しているIEへBackSpaceキーを送りたく、
ハンドルはIEのタイトルバーの所の値として

SendMessage(***, WM_KEYDOWN, VK_BACK, 0);
SendMessage(,*** WM_KEYUP, VK_BACK, 0)

としても、だめでした;。 どうしたら良いでしょうか?

122 :デフォルトの名無しさん:02/11/18 02:22
WM_CHAR

123 :デフォルトの名無しさん:02/11/18 02:23
訂正
×SendMessage(,*** WM_KEYUP, VK_BACK, 0)
○SendMessage(***, WM_KEYUP, VK_BACK, 0);

124 :デフォルトの名無しさん:02/11/18 02:25
>>122
おお、 早速ありがとう!!
そのてがありましたね。試してみます。

125 :106:02/11/18 02:42
>>118
レス、サンクス。
私もそれについては多少調べてみたんですが、
各ラインに対してMuteや音量の設定はできるようなのですが
デジタル出力のON・OFFに関する設定は見つかりませんでした。
mixerMessageを使えばいけるかなとも思いましたが
どんなメッセージを送ったらよいのか、さっぱりわかりませんでしたし。
使ってるサウンドカードはAudigyなんですけど
ドライバに対するプログラミングリファレンスなんて
転がってないですよねぇ?(^^;


126 :デフォルトの名無しさん:02/11/18 03:03
for(;;){
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
if(!GetMessage(&msg, NULL, 0, 0))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
/*これ。*/
if((fni = (*fns[fni])(&gst)) < 0) break;
}
}

のif((fni = (*fns[fni])(&gst)) < 0) break;
ってどういう意味なの?

127 :デフォルトの名無しさん:02/11/18 03:11
>>126
fnsは関数へのポインタへのポインタもしくは関数へのポインタの配列。

fni番目に格納された関数へのポインタを用いて、その関数を間接的に呼んでる。

128 :デフォルトの名無しさん:02/11/18 03:18
C++なら、operator[]が定義されたクラスかもしれんなあ・・・

129 :デフォルトの名無しさん:02/11/18 09:54
そんな変態は無視汁
マクロ定義されてたらとか言い出すとキリがねえ

130 :デフォルトの名無しさん:02/11/18 17:47
#define private public

131 :デフォルトの名無しさん:02/11/18 19:20
現在、リモートTV録画予約を構想中です。
1.メールBOXに予約メールが届いたら、
  録画マシン(Xp)をACPIを使用して起動させる。
  (by ルータ&MailBOXマシン)
2.Xp 予約処理をOutLookマクロにより、
  予約メールGET時、予約処理を行う。
   2.a:iEPGで生成される同フォーマットで
      予約情報ファイル作成、配置。
   2.b:Xpのタスクに登録。
   2.c:休止状態にする。
というフローです。
その中で、
2.b、2.cの処理をAPIを呼んで行いたいのですが、
ご存知の方、ご教授ください。
ATコマンドは休止からの復帰をさせることができません。

132 :デフォルトの名無しさん:02/11/18 19:53
↓ これ分かる人いません?
http://pc3.2ch.net/test/read.cgi/tech/1018239290/316

133 :デフォルトの名無しさん:02/11/18 20:23
>>131
2.b 「Task Scheduler」でMSDNを検索しる
2.c SetSystemPowerState(FALSE, TRUE) ただしNT系のみ

134 :デフォルトの名無しさん:02/11/18 20:25
自分(実行ファイル)のファイルハンドルを取得し、
ReadFileで読み込むという作業をしたいのですが
CreateFileでINVALID_HANDLE_VALUEが返ってきてしまいます。
どのようにしたら取得できるでしょうか?(↓自分が書いたもの)
hFile = CreateFile("crackme1.exe", GENERIC_READ, 0, NULL, OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL, NULL);

135 :デフォルトの名無しさん:02/11/18 20:29
>>134
FILE_SHARE_READ

136 :134:02/11/18 20:35
>>135
即答ありがとうございます。
FILE_SHARE_READにしてみたのですが
INVALID_HANDLE_VALUEが返ってきてしまいました。
もうすこしがんばってみます。

137 :デフォルトの名無しさん:02/11/18 20:41
>>136
それで、できるはずですが、ファイルパスは合ってますか?
::GetModuleFileNameで取得した値を使ってみるとか。

138 :デフォルトの名無しさん:02/11/18 20:43
というか、GetLastErrorの値ぐらいみれ。

139 :デフォルトの名無しさん:02/11/18 20:46
crackme1.exe

140 :デフォルトの名無しさん:02/11/18 21:16
全言語のページから#defineを検索しました。 約11,000,000件中1 - 10件目
全言語のページから#endifを検索しました。 約1,790,000件中1 - 10件目
全言語のページから#ifdefを検索しました。 約808,000件中1 - 10件目
全言語のページから#undefを検索しました。 約460,000件中1 - 10件目
全言語のページから#ifndefを検索しました。 約411,000件中1 - 10件目


141 :134:02/11/18 21:26
>>137
GetModuleFileNameで取得した値でできました。ありがとうございます。
>>138
2でした。って漏れFormatMessageの使い方わからん(;´д`)

142 :デフォルトの名無しさん:02/11/18 21:53
ErrorLookup 値:2
指定されたファイルが見つかりません。

143 :デフォルトの名無しさん:02/11/18 21:57
>>141 >漏れFormatMessageの使い方わからん
MSDNの FormatMessage() のところに、サンプルもろに出てますよ?

144 :デフォルトの名無しさん:02/11/18 22:08
マウスを制御するAPIの名前までは調べたのですが、どうもうまく動かん。
キーボードの制御は出来た。マウスを自分の思う位置に動かして、クリック操作などを制御したい。
操作するウィンドウは、自アプリ外。Win9x系で動けばいいです。
アドバイス頼む!
                 ┌─┐
                 |ま|
                 |た |
                 │く │
                 │る│
                 │ね.|
      ヤホィ    イェェア   │ !!.│
                 └─┤    ニコニコ
    ヽ(´∀`)ノ ヽ(´∀`)ノ  (´∀`)ノ    ( ´∀)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎

145 :デフォルトの名無しさん:02/11/18 22:47
Win32APIの関数などをヘルプファイルにして簡単に
検索できるようにしたものってありますか。

bccでやっているけど、いちいちmsdnみるのが面倒で(ダイヤルアップ回線なので)。

146 :デフォルトの名無しさん:02/11/18 22:50
ヽ(´∀`)ノ 

147 :デフォルトの名無しさん:02/11/18 22:55
>>145
MSDNに加入しる!
ライブラリサブスクリプション(技術資料だけ)なら安くてオフラインで読める。

148 :デフォルトの名無しさん:02/11/18 22:56
というか、PlatformSDKに付いてくる英語のならロハだし、
それで充分だろ。日本語訳ってたまにdでもない
間違いとかあるし。

149 :119:02/11/19 00:02
>>120
オゥ、即答ありがとう。
解決しました。

150 :デフォルトの名無しさん:02/11/19 00:21
マジかよ?!

151 :118:02/11/19 01:30
>>125
あ、「トーン」でしたか。
ろくに読まずに書いてしまいました。すみませぬ。
mixer系APIからは直接操作できないっていうか仕様が調べられない
部分ですか。うーん。どうすればいいんだろ。

っていうかこのあたり、サウンドカードによって同じような名前の
ミキサーラインでもタイプが違ってたりして混乱しますよね。

152 :デフォルトの名無しさん:02/11/21 08:46
NT限定でいいんだけど、
%SystemRoot%\System32\〜
みたいなパスを
C:\WINNT\System32\〜
みたいに正式なパスに変換してくれるAPIってないんかな?

153 :デフォルトの名無しさん:02/11/21 12:10
ExpandEnvironmentStrings
つーか、ちったぁ検索しろや。機能そのままの名前じゃんかよ。

154 :デフォルトの名無しさん:02/11/22 00:57
Win95+IE5の環境で、SHGetSpecialFolderLocationにCSIDL_APPDATAを
渡して実行しても失敗してしまいます。
このAPIで取得するにはどうしたら良いのでしょうか?

155 :デフォルトの名無しさん:02/11/22 01:31
そのフォルダは 95 にある?



156 :デフォルトの名無しさん:02/11/22 01:40
無かった気がする。

157 :デフォルトの名無しさん:02/11/22 01:59
SHFolder.dllを明示的にリンクしてSHGetFolderPathを呼び出すしかないんでしょうか・・・

158 :デフォルトの名無しさん:02/11/22 06:50
どなたかタスクバーのプロパティを起動する方法を知りませんか?
VBなら
Dim oShell As Object
Dim hwndTask As Long
hwndTask = FindWindowEx(0, 0, "Shell_TrayWnd", vbNullString)
Call SetForegroundWindow(hwndTask)
Set oShell = CreateObject("Shell.Application")
oShell.TrayProperties
でいけるみたいなんですが、CにはCreateObject関数も
Object型に相当する物も見あたりませんでした。
他のコンパネみたく*.cplファイルも無いみたいだし。
宜しくお願いします。

159 :158:02/11/22 11:51
>>158
自己レスです。
CoCreateInstanceを使えばいけました。
スレ汚し申し訳ない。


160 :デフォルトの名無しさん:02/11/23 17:17
よく最前面のウィンドウに張り付くようなソフトがありますが、任意のウィンドウが最前面
になったタイミングというのはどうやって取得しているのでしょうか?

161 :名無し@沢村:02/11/23 23:58
皆々様方〜、私はいま複数のトラックを鳴らすところで大変苦労してるんですが、なんとか同時に複数のトラックを鳴らすとこまではできたのですよ。
でもあともう一歩なんです…!
もう一歩というのは、トラック2つでもシングルトラックを鳴らすのに比べて、速度が半分に落ちるし、鳴り方もぎこちないんです…。
これがそのコードですが、あとどこを直せばいい…?
教えてくだされ〜♪

for(i=0;i<=i_Sum_Track[i_longest_Track];i+=2)
{_Time= timeGetTime();
for(l=0;l<16;l++)
{t[l]=0;
for(j_i=0;j_i<Onpu_Index[i_longest_Track];j_i++)
{k[l]=j[l]*8;
if(CodeCount[l]!=0)
{if(i==t[l])
{midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000));
midiOutShortMsg(hMidiOut, (DataCode[l][k[l]]) + (DataCode[l][k[l]+1] * 0x100)+(DataCode[l][k[l]+2] * 0x10000)); // Note On
}
t[l]+=DataCode[l][k[l]+3];
if(i==t[l])
{while (Play_Tempo(DataCode[l][k[l]+3])>=timeGetTime()-_Time);
midiOutShortMsg(hMidiOut,(DataCode[l][k[l]+4])+ (DataCode[l][k[l]+5] * 0x100)+(DataCode[l][k[l]+6] * 0x10000)); // Note Off
j[l]++;
}}}}}


162 :デフォルトの名無しさん:02/11/24 00:17
マルチポスト(・A・)イクナイ

163 :デフォルトの名無しさん:02/11/24 02:17
リソースエディタで作ったエディットボックスの文字の色を変えるには
どうしたらいいですか?

164 :デフォルトの名無しさん:02/11/24 02:38
MFCを使わずに、自分のウインドウにhtmlファイルを表示したいのですが、
どうしたらできるでしょうか?

165 :デフォルトの名無しさん:02/11/24 02:45
>>163
オナードロウ

>>164
IWebBrowser2(だったかな)

166 :デフォルトの名無しさん:02/11/24 02:49
>165
エディットボックスってオーナドロー出来なかった気がする、、、

167 :デフォルトの名無しさん:02/11/24 03:03
>>166
サブクラス化してとかでも無理?

168 :デフォルトの名無しさん:02/11/24 03:10
OnCtlColor WM_CTL_COLOR スペル違ったらスマソ

169 :デフォルトの名無しさん:02/11/24 03:12
>The WM_DRAWITEM message is sent to the owner window of an
>owner-drawn button, combo box, list box, or menu when a visual aspect of
>the button, combo box, list box, or menu has changed

170 :デフォルトの名無しさん:02/11/24 03:14
>>167
それで、描画するためのデータはどこから持ってくる?

171 :デフォルトの名無しさん:02/11/24 03:44
WM_CTLCOLOREDITのwParamがエディットコントロールのHDCだから
それでSetTextColor()できる気もするな。

172 :デフォルトの名無しさん:02/11/24 07:09
>>165
さんくすです。
IWebBrowser2のNavigate2を使い、htmlやjpegが表示できますた。

でも、bmpを表示しようとしたら、ペイントが立ち上がったり、
開くかどうか聞いてくるダイアログがでたりしました。
でも、ときどき表示されたりもします。原因がさっぱりわかりません。
何か、先行して処理する必要があるのでしょうか?

173 :デフォルトの名無しさん:02/11/24 14:40
Win32 static libraryで、どういう関数にWINAPIをつけたら良いのでしょうか。
内部で使う関数には付けず、外部に公開する関数だけにつけておけばよいのでしょうか?

174 :デフォルトの名無しさん:02/11/24 15:08
>>173
ハァ?

175 :デフォルトの名無しさん:02/11/24 15:17
calling conventionのことか?
そのライブラリが激しく内輪ならべつにどうでもいいと思う

176 :デフォルトの名無しさん:02/11/24 16:10
>>175
激しく内輪でなければ?

177 :デフォルトの名無しさん:02/11/24 16:26
その lib をどういう位置付けにするかですべき事が変わるだろ。

178 :デフォルトの名無しさん:02/11/24 17:25
とりあえず自分で作ったライブラリの関数にWINAPIを付けたい理由を聞かせてくれ。

179 :デフォルトの名無しさん:02/11/24 18:04
C言語以外から呼ぶことを考えるなら、WINAPIというかstdcallにするべきでは?
(ついでに、C規約より少しだけ効率いいし)

180 :デフォルトの名無しさん:02/11/24 18:06
>>179
dynamic linkならそれも考慮するかもしれんが・・・

181 :179:02/11/24 18:19
>>180
んー、Delphiならbccとリンクできるし、
gccはC++に限らずFortranとかAdaとかでミックスランゲージできるし……ちと苦しいか。

正直staticの文字を見逃してました。スマソ

182 :デフォルトの名無しさん:02/11/25 12:49
Explorerで、ファイルのプロパティの概要で得られる、
コメント、キーワード、分類などので情報を
設定するには、どうすればいいですか?

183 :デフォルトの名無しさん:02/11/25 13:24
>>182
プロパティから設定できます。

184 :デフォルトの名無しさん:02/11/25 13:36
>>183
APIとか、コードでやりたいとおもわれ。

185 :182:02/11/25 14:30
やりかたわかりましたので結構です。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/the_summary_information_property_set.asp

186 :デフォルトの名無しさん:02/11/25 16:03
あるフォルダが存在するかどうかを知るにはどのAPIを使えばよいのでしょうか?

187 :デフォルトの名無しさん:02/11/25 16:56
>>186
Win32APIなら、FindFirstFile()
標準C Libraryなら、_findfirst()


188 :デフォルトの名無しさん:02/11/25 17:02
>>186
SetCurrentDirectory とか CreateFile でもいけそうだけどなー。> 教えて君

189 :デフォルトの名無しさん:02/11/25 17:33
_stat

190 :デフォルトの名無しさん:02/11/25 18:24
いつも思うんだけど、
こういう質問をする「教えてクン」って、
後で仕事をきちんと完成させることができたかどうかが気になる。
つか、ちょっと心配になるよ。

191 :デフォルトの名無しさん:02/11/25 18:31
2ちゃんねるで聞くよりも検索した方が早いと思うしね。
もし>>186が検索をしていないとすると、
>>187の回答を得るまでに>>186は53分間も待たなければならなかったわけでしょ。
教えてクンはまたーりしているんだなぁ...

192 :デフォルトの名無しさん:02/11/25 18:33
どなたか Win32API WriteProcessMemory を使ったごくごく簡単なサンプルを......
環境はwin2k vc5 です。
Web上にあった物はまともに動きません......

193 :デフォルトの名無しさん:02/11/25 18:41
エクスプローラーが落ちた時に、
児童復旧する
タスクトレイ
のプログラム方法を教えてください。


194 :デフォルトの名無しさん:02/11/25 18:50
_beginthreadのハンドルをHANDLEにキャストしてWaitForSingleObjectに使えるらしいんですが
INFINITEにしたら際限無く待ちつづけるのですが、他がおかしくてキャストは間違いないのでしょうか?

195 :デフォルトの名無しさん:02/11/25 18:52
↑スレッドはちゃんとexitThreadで終了しています

196 :デフォルトの名無しさん:02/11/25 18:58
>>194
それができるのはexの方。
Win32マルチスレッドプログラミングって本読んでね。

197 :デフォルトの名無しさん:02/11/25 19:07
>>193
RegisterWindowMessage TaskbarCreated をgoogle

198 :デフォルトの名無しさん:02/11/25 19:17
>>197
サンクス。

199 :デフォルトの名無しさん:02/11/25 20:11
>>195
どうもです。CloseHandleがいるやつですね。

200 :デフォルトの名無しさん:02/11/25 23:26
> 標準C Libraryなら、_findfirst()

おいおい・・・

201 :デフォルトの名無しさん:02/11/25 23:56
>>186
漏れなら、GetFileAttribute()とかPathIsDirectory()かな。
ハンドルを閉じる手間がないから。

202 :デフォルトの名無しさん:02/11/26 01:41
PathIsDirectory() は素でリンクできないからキライ

203 :デフォルトの名無しさん:02/11/26 03:37
>>188
マルチスレッドで破綻する
失敗したときどこにファイルを作るかわからない
話にならんな
こういうインストーラーを作りたいなら止めないが
http://pc3.2ch.net/test/read.cgi/tech/997727326/56-

204 :203:02/11/26 03:39
あ、ひょっとしてどんなに煽られようと必ずお節介な奴が
答えて教えてクンの「聞いたもの勝ち」になるのがムカつくから
自分で答えを調べられない奴には分からない程度に嘘教えたのかな
だったら邪魔してスマソ

205 :デフォルトの名無しさん:02/11/26 03:42
>>203
そこの 57 の反応が素直に笑える。

206 :デフォルトの名無しさん:02/11/26 04:26
虫眼鏡みたいなウインドウを作ろうと思っています。
自分のウインドウの下のイメージを取得するにはどうしたらいいでしょうか?

207 :デフォルトの名無しさん:02/11/26 07:52
> 自分のウインドウの下のイメージを取得する

できるかなあ?
できないんじゃないか?

208 :デフォルトの名無しさん:02/11/26 09:50
「ウインドウの下のイメージ」なんて(WindowがLayered化
されてない限り)存在しないので不可能です。
WM_PRINTに対応してたらなんとかなるかも

209 :デフォルトの名無しさん:02/11/26 10:57
質問ですが、Winの印刷で、一つの印刷ジョブでA4→B4→A4・・・とかの
異なるサイズの印刷ってできますかねぇ?
ジョブ分けると、スプーラからのメッセージがちょっと・・・

210 :デフォルトの名無しさん:02/11/26 13:41
>>208
半透明ウインドウとかはどうやってるの?

211 :デフォルトの名無しさん:02/11/26 13:46
ホットゾヌの書き込みウインドウが半透明になっている下で、
スレッドがスクロールしたりするんですけど。
画面からはみ出したりすると、他のウインドウも下に見えるし、どうやってるの?これ。

212 :デフォルトの名無しさん:02/11/26 13:48
>>210
それがLayeredなウィンドウ。

213 :デフォルトの名無しさん:02/11/26 13:52
>>212
Layered化すれ(どうやってするんだろう・・・)ば、下のイメージが取り出せるのですか?

214 :デフォルトの名無しさん:02/11/26 14:33
>>209
ResetDCで行けそうな気はするが、このファンクションは
DEVMODEのどこまで書き換えられるのかイマイチ掴めないんだよな。

215 :デフォルトの名無しさん:02/11/26 14:33
>>213
Win2kからは簡単に出来るよ。

216 :デフォルトの名無しさん:02/11/26 15:32
ReadやReadlnでは、Enterキーが押されるまで帰ってきませんが、
キーボードの押された1文字読み込める関数はあるのでしょうか?
ググってみたのですがダメでした。よろしくおねがいします。


217 :216:02/11/26 15:36
cut:「やReadln」

218 :デフォルトの名無しさん:02/11/26 16:07
>>192
debug privilege
一般的に使われるものではないから、素人に質問しても無駄だと思われ


219 :216:02/11/26 16:15
add:「getch()以外で」

220 :デフォルトの名無しさん:02/11/26 16:16
>>210
SetLayeredWindowAttributes
で検索しる

221 :デフォルトの名無しさん:02/11/26 17:12
>>219
GetKeyState
WM_KEYDOWN


222 :デフォルトの名無しさん:02/11/26 17:17
>>218
素人って誰だよ

223 :デフォルトの名無しさん:02/11/26 17:31
>>220
ありがとうございました。できますた。

224 :デフォルトの名無しさん:02/11/26 18:51
PropertySheet() で作成するダイアログでWinXPの新しいコントロールを
使うようにしたら、どのようにしたらいいんでしょう?
manifestは書いてみたものの変わらず、PROPSHEETHEADER にもそれらしい
項目はありませんでした。

225 :224:02/11/26 19:10
なんか日本語が崩壊してる・・・(´Д`;)

× PropertySheet() で作成するダイアログでWinXPの新しいコントロールを
  使うようにしたら、どのようにしたらいいんでしょう?
○ PropertySheet() で作成するダイアログでWinXPの新しいコントロールを
  使わせるようにするには、どのようにしたらいいんでしょう?

226 :216:02/11/26 19:57
>221
レスありがとうございます。
さっそく、挑戦してみます。

227 :デフォルトの名無しさん:02/11/26 20:11
int ch;
SetConsoleMode( GetStdHandle(STD_INPUT_HANDLE), 0 );
while( ch = fgetc(stdin), ch != EOF)
fputc( ch + 1 , stderr );

228 :216:02/11/26 20:45
>227
ありがとうございました。ジャストでした。
感謝、感謝、感謝です。


229 :216:02/11/26 21:13
>>227
お礼です。
http://www.skku.ac.kr/~bkasia/board/cwb-data/data/kbhwdata/

230 :デフォルトの名無しさん:02/11/26 21:19
>>229
韓国の大学ではそういう授業があるんですか?

231 :貧民:02/11/26 22:05
猫プロのWinSDK第18章で、
bcc32 でコンパイル&実行できた人っています?
どうしてもダイアログのメニューが出てこないんですが。

リソースはばっちりだと思うんだけどなぁ。

232 :貧民:02/11/26 22:26
うあ。
プロシージャの中の switch からっぽで、
リソースだけくっつけてコンパイルしてもメニューが出ないぢゃねーか。
bcc32 で Windows プログラミングって・・むちゃ?

233 :デフォルトの名無しさん:02/11/26 23:06
>>232
bcc32というかWindows(GUI)プログラミングをC++で作るのに
GUIエディタが無いのがむちゃ。

234 :デフォルトの名無しさん:02/11/26 23:11
>>233
んなこたーない。
メニューは全て動的に作って、追加する。
コントロールも全て動的に作って追加する。
別にGUIツールが無くても問題ない。

235 :貧民:02/11/26 23:18
んー。全部動的に・・・てのはやりたくないです。

Borland C++ Compiler に付属の
brcc32 (リソースコンパイラ)でリソースをコンパイルして、
bcc32 (コンパイラ)で .c をコンパイルして、
brc32 (リソースシェル)でコンパイルした .res を .exe にくっつけて
やってるんですが、これって何か陥りやすいミスってあります?

236 :デフォルトの名無しさん:02/11/26 23:31
ここでメニューが出ないといえばたいがいMAKEINTRESOURCEで解決

237 :デフォルトの名無しさん:02/11/27 00:01
>>235
素直にBCCDeveloper使え。

238 :貧民:02/11/27 02:13
>>236
ごめん。巣でわからないです。
つか、MAKEINTRESOURCE調べてもわからなかった・・・。
これと猫プロSDK18章ってなんか関係すんの?

>>237
BCCDeveloper 入れてみました。
cygwin 上で vim + GNU make とどっちがいいんだろ。
しばらく使ってみよ。

239 :デフォルトの名無しさん:02/11/27 02:29
DLLを明示的リンクしたいのですが

DLLEXPORTした関数(HOOK)が

?HOOK@@YAHHP6G

みたいに変な関数名になるのですが、
綺麗に出来ませんか?

240 :デフォルトの名無しさん:02/11/27 02:35
defファイルを書く
extern"C"を使う

241 :デフォルトの名無しさん:02/11/27 02:42
スゲー。アリガd。

242 :デフォルトの名無しさん:02/11/27 03:37
猫プロの本が出るみたい。
あれが全部本になるんだろうか? 
それともC#?
http://www.kumei.ne.jp/c_lang/shoseki/noflash.htm

243 :デフォルトの名無しさん:02/11/27 04:17
VC6でですが、
現プロジェクトのmain.cpp以外を
スタティックライブラリとして
生成したいのですが、

やっぱり
スタティックライブラリのプロジェクトを作って、
地道に全ソースをプロジェクト追加
しないとダメなのでしょうか?

階層がいっぱいあって、めんどくさいのです。
ビルド→構成→追加(コピー)
から、出来そうな気がするのですが。
出来ないでしょうか?

244 :243:02/11/27 04:19
API質問じゃなかった。
間違えましたすんません。

245 :224:02/11/27 06:31
レスついてない・・・ ⊃Д`;)

あれから PROPSHEETPAGE の項目に hActCtx なんてのが comctl32 ver.6.0 から
増えていることが分かったけど、何に使うのかよく分からない(苦笑)。
(どうやらmanifestに書くような内容を記述するみたい)
これが関係してるのかな?

246 :デフォルトの名無しさん:02/11/27 07:20
リソースに manifest の xml を参加させる。

247 :デフォルトの名無しさん:02/11/27 09:18
猫プロ、Editを「エジット」と記述するのさえなければ、
いいんだけどなぁ。違和感ありまくり。

#スレ違いスマソ。

248 :デフォルトの名無しさん:02/11/27 10:18
>>222
スマソ。言葉が悪かった。
それを専門又は相当詳しいやつがいないと厳しいという意味。ちょっとだけ特殊な世界なので。



249 :デフォルトの名無しさん:02/11/27 10:32
>>247
「エヂット」じゃなかったっけ。

250 :デフォルトの名無しさん:02/11/27 10:49
>>242
出ても買わん。C言語ポインタ完全制覇があれば十分。

251 :デフォルトの名無しさん:02/11/27 11:02
>>247
ローマ字入力で「ディ」が出せなかったものと思われ
最近の記事ではちゃんとエディットになってる(w

252 :デフォルトの名無しさん:02/11/27 12:22
>>250
( ゚д゚) ポカーン

253 :デフォルトの名無しさん:02/11/27 14:12
ツールバーのボタンのそれぞれを好きな寸法にしたいのですが、
どんな方法があるのでしょうか。

254 :デフォルトの名無しさん:02/11/27 14:18
TBSTYLE_AUTOSIZE でできました・・・。

255 :悲しい:02/11/27 20:06
デスクトップに文字列表示できないかと思って
以下のコード書いたんですがうまくいかないんです。
なぜうまくいかないんだ。
よかったらどなたか教えてくれませんか?

HWND hDesktop;
HDC hDC;
RECT rectDraw;
const char str[] = "Desktop!";

hDesktop = ::GetDesktopWindow();
hDC = ::GetDC(hDesktop);
::GetClientRect(hDesktop, &rectDraw);

::DrawText(hDC, str, strlen(str), &rectDraw, DT_CENTER);
::ReleaseDC(hDesktop, hDC);


256 :悲しい:02/11/27 20:07
何にも表示されないんです・・・。


257 :デフォルトの名無しさん:02/11/27 20:51
CString* をchar* に代入するには いかそ?

258 :デフォルトの名無しさん:02/11/27 20:55
>>257
コンパイルでUNICODE定義していないなら、

CString *aaa;

aaa になんか値が入る。

char* p = (char*)(*aaa);

259 :デフォルトの名無しさん:02/11/27 21:26
>>255
試してないが、
CreateDC("DISPLAY",NULL,NULL,NULL);
でどうだ?

260 :うれしい:02/11/27 22:27
>>259
うまくいった!
感謝!
あなた神です。


261 :デフォルトの名無しさん:02/11/27 22:49
>>259
それだと「デスクトップ」じゃなくて画面全体じゃないか?
っていっても、260で喜んでるので、そういうものが欲しかったのか。
普通デスクトップって言ったら、Explorerの画面全体を覆ってる
リストビューのこと指すと思うんだがなあ。

262 :デフォルトの名無しさん:02/11/27 22:56
>>261
(゚Д゚)ハァ?

263 :デフォルトの名無しさん:02/11/27 22:59
>>261
窓でのデスクトップの定義について
小2週間くらい勉強してこい

264 :デフォルトの名無しさん:02/11/27 23:07
>>262-263
(゚Д゚)ハァ?

265 :デフォルトの名無しさん:02/11/27 23:08
( ゚д゚)ポカーン

266 :デフォルトの名無しさん:02/11/27 23:11
>>261-264
俺にもわかるように説明してくれ


267 :デフォルトの名無しさん:02/11/27 23:16
>>266
(゚Д゚)ハァ?


268 :デフォルトの名無しさん:02/11/27 23:24
>>266
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/desktops.asp
これでも読め

269 :デフォルトの名無しさん:02/11/27 23:28
>>261
「Explorerの画面全体を覆ってるリストビュー」って
どれのこと?
・・・あーそういうことだったのか! やっとわかった!


270 :デフォルトの名無しさん:02/11/27 23:31
>>269
(゚Д゚)ハァ?

271 :デフォルトの名無しさん:02/11/27 23:41
・・・で、真の厨房は誰だったんだ?


272 :デフォルトの名無しさん:02/11/27 23:43
( ゚д゚)ポカーン

273 :デフォルトの名無しさん:02/11/27 23:44
270


274 :デフォルトの名無しさん:02/11/27 23:47
つれた!!

275 :260:02/11/27 23:50
>>261
その「Explorerの画面全体を覆ってるリストビュー」って
どうやって取得できるんですか?
よかったら教えてもらえませんか。


276 :デフォルトの名無しさん:02/11/27 23:51
>>271
261です。
「Explorerの画面全体を覆ってるリストビュー」がデスクトップか否かに関わらずアホだから。

277 :デフォルトの名無しさん:02/11/27 23:53
>>275
FindWindowとかでProgram Managerを検索して、
その子ウインドウでクラスがSysListView32になっている奴を捜すんじゃないの?

278 :デフォルトの名無しさん:02/11/27 23:53
>>275
やったことないけどGetWindow(GetDesktopWindow(),GW_CHILD);
とかで取れないか?

279 :デフォルトの名無しさん:02/11/28 00:13
>>278
それは安全か?

280 :デフォルトの名無しさん:02/11/28 00:13
だめなんだなー
それじゃー

281 :デフォルトの名無しさん:02/11/28 00:23
今Spyで見てみたら、

デスクトップ
 +ProgramManager
    + SHELDLL_DefView
       + SysListView     ←これ

だった。

282 :名無し@沢村:02/11/28 00:32
皆々様方〜、ツールバーだが、ツールバーにビットマップを標示すると、
色が表示されずにグレーになったり、使ってるうちにだんだんイロがあせてきたりするんだが、
これはどうやったら直せるのですか?
ちなみに画面のプロパティの詳細は256色です。

283 :デフォルトの名無しさん:02/11/28 00:34
>>282
モニタを買い換えろ。

284 :デフォルトの名無しさん:02/11/28 01:09
また沢村かよ・・・

285 :デフォルトの名無しさん:02/11/28 09:38
>>283
Macじゃあるまいしモニタを買い換えても意味ないだろ。
ビデオカードを買い換えないと。とかマジレスしてしまうテスト

286 :デフォルトの名無しさん:02/11/28 12:41
WinMain() の中から直接 DialogBox() をコールしてダイアログボックスを
表示するアプリを作っているのですが、キーボードイベントをうまく扱え
ません。
ネットで調べてみると、どうも「ダイアログボックスには WM_KEYDOWN
イベントが飛んでこない」ようです。
「ウインドウのサブクラス化」も試みてみたのですがうまくいきませんでした。
やはり、親ウインドウがないダイアログボックスではキーボードイベントを
扱うことは出来ないのでしょうか?

287 :デフォルトの名無しさん:02/11/28 12:57
>>286
できるけど、どーしたいん?

288 :デフォルトの名無しさん:02/11/28 13:19
>>286
SetWindowsHookEx()

289 :286:02/11/28 13:27
>>288
そのものずばりでした。ありがとうございます。

290 :デフォルトの名無しさん:02/11/28 14:55
>>287 が可哀相に思えるのは俺だけか?

291 :287:02/11/28 15:17
>>290
いいのいいの。

292 :デフォルトの名無しさん:02/11/28 15:59
今タイムタグ付き歌詞ファイルを読み込んで色を変えながら表示していく
("[00:01:00]あ[00:02:00]い[00:03:00]うえお\n"のような文字列を読んで解析)
プログラムを作っています。
内部では
struct
{
 int msec;
 char *text;
 int mode; // 0なら一行分、1なら色を変える部分のみのテキスト
} * dataのようなものを作って持たせています。
上の例だと
data->msec==1000,data->mode==0,data->text=="あいうえお"
(data+1)->msec==2000,(data+1)->mode=1,(data+1)->text="あい"
(data+1)->msec==3000,(data+1)->mode=1,(data+1)->text="あいうえお"

DrawTextかTextOutだけでうまいことやれる方法はないですかね。
mode=0のものを書いた後にTextOutすると後から書いた領域がちょっとだけ大きくなって
先に書いたものが消えちゃうんです。
BitBltで透過転送してたら重くて使い物にならなかった。

293 :224=245:02/11/28 17:35
解決しますた。

リソースにmanifestを含める場合、manifestのリソースIDを必ず1にしないと
いけなかったのですな。
VS.netだったからそのへんは適当にやってくれるもんだと思ってた・・・鬱

manifestを外部ファイルにしても反映されなかったんだけど、それはmanifest
のファイル名が間違っているという単純ミス。逝ってきます。
exe_no_namae.manifest じゃなくて exe_no_namae.exe.manifest なのね。

ってなわけで今はちゃんとXPのビジュアルスタイルでダイアログが表示されてまする。

294 :デフォルトの名無しさん:02/11/28 17:44
なんだそんなことか。

295 :デフォルトの名無しさん:02/11/28 18:06
でも勉強になったよ。ありがとう。

296 :289:02/11/28 18:48
続きです・・・

Win2k では WM_ACTIVATEAPP でフックを呼ばないと、他のアプリでの入力後、
フックが切れることがある。が、Win9x でそれをやると100%クラッシュする!!
今回は OS の判定ルーチンを入れて対応しましたが・・・(Win9x では
WM_INITDIALOG でフックを呼ぶようにした)
このような経験された方いらっしゃいます?

297 :名無し@沢村:02/11/28 19:25
皆々様方〜、いろいろありあとうございました、皆々様方〜!
私はここでコールバックタイマーを使用しろとか、複数トラックのデータをマージしてひとつのデータにまとめろとか、いろいろなアドバイスをいただきました。
でもはっきりいってそんな面倒なことはしたくなかったんです…。
はっきりいって手抜きに近い楽なやりかたで複数トラックをちゃんと演奏する方法を見つけたかったんです。
でもついにその方法が見つかったんです!!
その完璧なルーチンをここに乗せますから、皆様方も楽にmidiシーケンサーをつくるときの参考にしてください、皆々様方〜!

for(i=0;i<=i_Sum_Track[i_longest_Track];i++)
{for(l=0;l<16;l++)
{t[l]=0;
if(CodeCount[l]!=0)
{for(jj[l]=0;jj[l]<Onpu_Index[l];jj[l]++)
{kk[l]=jj[l]*8;
if(i==t[l] )
{
_Multi_Time[l]= timeGetTime();
midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000));
midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000));
midiOutShortMsg(hMidiOut, (DataCode[l][kk[l]]) + (DataCode[l][kk[l]+1] * 0x100)+(DataCode[l][kk[l]+2] * 0x10000)); // Note On}
t[l]+=DataCode[l][kk[l]+3];
if(i==t[l] ) { while (Play_Tempo(DataCode[l][kk[l]+3])>=timeGetTime()-_Multi_Time[l]);
midiOutShortMsg(hMidiOut,(DataCode[l][kk[l]+4])+ (DataCode[l][kk[l]+5] * 0x100)+(DataCode[l][kk[l]+6] * 0x10000)); // Note Off } }} }}


298 :デフォルトの名無しさん:02/11/28 19:29
おいお前ら!
visual stdio .NET買ったんですけど
付属のヘルプにすべてのAPIの日本語の解説はあるのですか?

299 :デフォルトの名無しさん:02/11/28 21:44
>>298
全てはない。
重要と思われるウィンドウメッセージの説明も英語だから注意しれ(w
というか、その為のこのスレか?

300 :275:02/11/28 21:44
>>277
ありがとう。
あんたが正しかったよ。
マジで感謝。


301 :デフォルトの名無しさん:02/11/28 21:52
windows.hとかのヘッダファイルはどこで最新のものをダウンロードできますか?
microsoftのサイトだとは思うんですが、なかなか見つかりません。

302 :デフォルトの名無しさん:02/11/28 21:58
>>301
↓ココダヨ
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

303 :301:02/11/28 22:06
>>302
ありがとうございます

304 :デフォルトの名無しさん:02/11/28 22:36
ウィンドウのリサイズを左右のみに限定したい。

限定する事自体は WM_GETMINMAXINFO ですぐにできたんですが、
ウィンドウの角にマウスカーソルを持っていった時にマウスカーソルが
斜め矢印になってしまうのを抑制する事はできないんでしょうか?

305 :304:02/11/28 22:38
>>304
ごめん。自己解決。 WM_NCHITTEST でした。

306 :デフォルトの名無しさん:02/11/28 23:53
ウインドウに標準のスクロールバーをつけて(WS_VSCROLL)それを処理するコードも書いたんですが、
ずっとマウスを押してもスクロールバーが一回しか動きません。
ダイアログで同じことをするとちゃんとずっと動くんですが、、、
ウインドウを作るときになんか追加の設定とかが必要なのでしょうか?


307 :デフォルトの名無しさん:02/11/29 00:10
>>306
コードを晒せ。

308 :デフォルトの名無しさん:02/11/29 00:23
Shellに詳しい方教えてください。

SHGetDesktopFolder()でデスクトップフォルダ(IShellFolder)を取得し、
ParseDisplayNameメソッドでpwszDisplayNameにPathではなくURLを指定しても
ITEMIDLISTが作成可能です。こいつのAttributeを調べてみると、
SFGAO_BROWSABLE が立っています。説明をみると、Folderではないが、
CreateViewObjectメソッドのみ実装されたIShellFolderインターフェース
が取得可能ということ。そこで、こいつの親FolderであるIEフォルダ
(IShellFolder)を作成後、BindToObjectメソッドを使い、問題の
IShellFolderを取得しました。さらにCreateViewObjectメソッドで
オブジェクト(IShellView)も作成することができました。
が、このオブジェクトの正体は何なんでしょうか?
Folderでないためか、CreateViewWindowメソッドは失敗してしまいます。
別のView関連のインターフェースが実装されているのでしょうか?
作成できるということは何らかの使い道があると思うんですが、
MSDNを調べてみてもわかりません。よろしくお願いします。

309 :名無し@沢村:02/11/29 00:53
>>306
ぶぁっはははははーーーっ!!
スクロールバーもまともにつけられない奴がこの世にいたのか!?
ぶぁっはははははーーーっ!!
ぶぁっはははははーーーっ!!

310 :デフォルトの名無しさん:02/11/29 01:07
>>308
IEコンポじゃないの?

311 :でむぱ:02/11/29 01:14
こんにちは、Win32API厨です。
sprintf,memcpyなどは必ずwsprintf,MoveMemoryにするよう
自らはもちろん、周りの連中にも布教しており、Cランタイム関数撲滅に精を注いでおります。
が、悔しいことにmemcmpとatoiだけ同等のAPIが見つからず、泣く泣くCランタイム関数を使わざるを得ません。
こんな私めにWin32APIでこれらと同等の関数があれば、ぜひぜひ教えてくださいまし..


312 :デフォルトの名無しさん:02/11/29 01:21
まざるとうざいから、特別な理由がない限りCランタイムのにしてくれよ

313 :デフォルトの名無しさん:02/11/29 01:24
>>311
memcmp() -> CompareMemory()
atoi() -> AsciiToInteger()

314 :デフォルトの名無しさん:02/11/29 01:26
MoveMemoryってmemmoveのdefineだけど。

315 :デフォルトの名無しさん:02/11/29 01:39
ZeroMemoryもmemsetに...

316 :デフォルトの名無しさん:02/11/29 01:39
SecureZeroMemoryって、最近のMSDNのいい話と悪い話みたいな
タイトルの記事見るまでマジで意味分からなかった。

317 :デフォルトの名無しさん:02/11/29 01:41
memcmpやmemsetは通常インラインに展開されるんだから
Cランタイム撲滅には関係ないと思うんだけど

318 :デフォルトの名無しさん:02/11/29 01:51
>311
wsprintfは、"The maximum size of the buffer is 1024 bytes. "
な制限があって、昔はまった、、、
今はsnprintf使てます

319 :デフォルトの名無しさん:02/11/29 01:52
>316 ↓これですか?
ttp://www.xinada.ne.jp/~handa/tech/#m07

320 :デフォルトの名無しさん:02/11/29 02:28
見つけた。
http://www.microsoft.com/japan/msdn/columns/secure/secure10102002.asp
単なるインライン関数なんだから .NET Server でしか
使えないわけないんだがMSDNライブラリのRequirementsは
いったいなんなんだ?

321 :デフォルトの名無しさん:02/11/29 03:30
みんな沢村をまるで相手にしてないのがワラタ

322 :でむぱ=311:02/11/29 18:00
>>313 両方ともMSDNにもないっすよぉ...
>>314,315,317 VBのAPIビューアからだとKernel32.dll の各エクスポート関数
(Rtlなになに)を呼んでいるのに、VC++はなぜにmemmove,...にしてしまうんだろ!?
悔しぃ…。
ちなみに、#defineでRtlEqualMemory !memcmp(s,t,l) なんてのもあるんですね。
(WINBASE.H,WINNT.H)
>>318 私もはまりますた。が、懲りずにlstrcatで合成してwsprintfを使っています。
確か書式の指定方法もsprintfと微妙に違うんですよね...


323 :デフォルトの名無しさん:02/11/29 18:25
GlobalAllocと通常のmallocの違いがわからないんだけど…

324 :デフォルトの名無しさん:02/11/29 18:59
GlobalAlloc は API
malloc は C 標準関数
大違い

325 :デフォルトの名無しさん:02/11/29 19:07
malloc() はプロセスヒープからメモリを割り当てる。
HeapAlloc(GetProcessHeap()) とほぼ同じだが、free() は HeapFree() と違って
ヒープにメモリ領域を返さず、次に呼ばれる malloc() のために取っておく。

GlobalAlloc() はグローバルヒープ (システムヒープ) からメモリを割り当てる。
クリップボードのデータ等、共有の目的で使用する。
共有メモリのためアドレスが定まっておらず、その領域を使うには GlobalLock() で
固定する必要があるが、固定したままだと他のプロセスから使用できない。
Windows 9x では 4 MB 未満のメモリブロックを想定して設計されているので、
それ以上は代わりに VirtualAlloc() を使えとある。

326 :デフォルトの名無しさん:02/11/29 19:54
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/comparing_memory_allocation_methods.asp
これってGlobalAlloc、LocalAlloc、HeapAlloc(GetProcessHeap)は全部同じってことじゃないの?

327 :デフォルトの名無しさん:02/11/29 22:01
使ってみてから言ってる?

(Win32 では) GlobalAlloc() と LocalAlloc() は全く一緒。
しかし GlobalAlloc() と HeapAlloc(GetProcessHeap) は、HGLOBAL を得る事が
できるかどうかという点で違う。
使い方というか用途もそれぞれ全く違う。
Microsoft が同じだと述べているのは、プロセス内において作業領域としてメモリを
確保した時の事について。

328 :326:02/11/29 22:35
漏れが言いたかったのは
「malloc、GlobalAlloc、HeapAlloc(GetProcessAlloc)は確保される場所は同じなんだろ」
ということなんだが…

329 :デフォルトの名無しさん:02/11/29 22:46
mallocがどこからメモリを取ってくるかは処理系依存。
VirtualAllocから取ってきて、独自分配しても合法

330 :デフォルトの名無しさん:02/11/29 22:49
そういう話をしたいなら、ヒープもスタックもテキストも全部同じメモリの上に
載ってますが、と返してあげるけど。

で、同じだから何だって?
326 の URL にはそんな事全く書いてないし、仮にそうだとしてもそれを知ってて
何か役に立つの?

想像だけど、GlobalAlloc() はグローバルヒープをプロセス空間にマッピング
するためにプロセスヒープを割り当ててるだけで、HeapAlloc(GetProcessAlloc)
と同じように使ってくださいという趣旨ではないんじゃないの?

malloc() は 325 の通りだから HeapAlloc(GetProcessAlloc) よりも速い事も
あれば無駄なオーバーヘッドな事もある。
(重箱の隅をつつけば、326 は malloc() について何も訴えていない)

331 :デフォルトの名無しさん:02/11/29 23:23
>328
> 「malloc、GlobalAlloc、HeapAlloc(GetProcessAlloc)は確保される場所は同じなんだろ」
そりゃ x86 プロテクトモードだと、メモリ空間は 32bit フラットだからな。

ただ、ユーザが 32bit フラットなメモリ空間に直にアクセスするのは

1. プログラム書くのが大変
2. OS がリソース配分できなくなる

という問題があるので、まっとーな OS では途中に何階層か用意して、適宜メモリを
切り出して割り当てるようになってる。GlobalAlloc や malloc は、その「階層」の厚み
や中身が違う。

混ぜると core 吐きます。

332 :デフォルトの名無しさん:02/11/30 00:00
GlobalAllocはWin16との互換性のためにあるから
なるべく使うなといいつつHGLOBALを要求するAPI
(クリップボード関係とか)がある現状をどうにかしてくれ>MS

333 :326:02/11/30 00:08
漏れはヒープはプロセス固有のものであり、
ヒープにシステムヒープとかプロセスヒープとかいう違いはないと思ってた。
んで、使われ方は違うがGlobalAllocもHeapAllocも同じヒープ上に確保されると思ってた。
調べてみたが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_heapmm.asp
にあるように、ヒープには最低1個のデフォルトヒープと呼ばれるヒープが存在しており、
GlobalAllocとHeapAlloc(GetProcessHeap)は両方ともデフォルトヒープ上に確保される。
ちなみに328のmallocはLocalAllocの間違いっす。

334 :デフォルトの名無しさん:02/11/30 00:26
ヒープは複数持てるよ。mallocとかが使うのはデフォルトヒープ。
独自のヒープでメモリを管理して漏れを防いでもいいかも。

335 :デフォルトの名無しさん:02/11/30 02:13
>>332
HGROBAL は、クリップボードにデータ渡すのに丁度いいからじゃないか?
API 名がいまいちそぐわないのは気になるけど。

>>333
だからさ、レイヤーというものを理解してくれよ。
http://msdn.microsoft.com/library/en-us/dngenlib/html/heapmm_1.gif
この図を見て、「Local、Global Memory API」 の中で何か特別な事をやっている
とは思わないのか?
>>330-331 に書いてある事をちゃんと理解したか?

>>334
>>329

336 :デフォルトの名無しさん:02/11/30 02:31
>>334
なるほど、まとめて解放してくれるんですか。便利かもしれませんね。

ふと思ったのですが、malloc/free/new/deleteが実際に使うヒープは
同じでないとまずいですよね。VC同士ならイイんでしょうけど...

337 :デフォルトの名無しさん:02/11/30 02:34
>>336
マズい可能性がある。
理由はそれだけではないが、ライブラリが確保したリソースはそのライブラリに
解放させるのが定石。

338 :デフォルトの名無しさん:02/11/30 04:29
>>335
Global〜が廃止されてるCEではさりげなくSetClipboardDataの
引数なんかもHLOCALに変更されてるんだよな。
ま、Win32sを除けばHLOCAL==HGLOBALなわけだが

339 :でむぱ:02/11/30 15:28
関係ないが、なぜヒープというのかみんな知らないんだろうな(w
>>334
new して free(),malloc()して delete してみればいいんじゃないの?
確かしいたけアボーンされたと思うけど。


340 :デフォルトの名無しさん:02/11/30 15:34
まあ普通に考えれば「そんなアドレス管理してまへんがな」となるわな

341 :デフォルトの名無しさん:02/11/30 15:46
>340
世の中、そういうタチの良い malloc/free ばかりでもなく。無条件で、与えられた
アドレスは「malloc によって割り当てられたはず、したがって直前に管理データ
があるはず」とか信じてる free() も存在する。

(管理データ壊して遠からず core を吐くけど、いつ誰がどこで管理データを
壊したのかは分からない_

342 :デフォルトの名無しさん:02/11/30 15:50
ん?gnuのはモードを切り替えられたような・・・
vcもそうだったと思う

343 :デフォルトの名無しさん:02/12/01 03:29
CreateProcessとかで、コンソールアプリを起動して
その終了を確実に待つのは、
WaitForSingleObject(pf.hProcess, INFINITE);
ではだめなんですが、どーしたらいいですか?
CreateProcessの第2引数に、"cmd.exe /c xxx.exe"
としています。

344 :デフォルトの名無しさん:02/12/01 07:45
cmd.exeの終了を待ったってそりゃダメだ

345 :デフォルトの名無しさん:02/12/01 07:57
"cmd.exe /c "
何の効果があるんだ?

346 :しぃ豆 ◆FTP/Z/SD72 :02/12/01 08:26
>>345
コマンドプロンプトで cmd.exe /? と入れれば出てくる。

347 :デフォルトの名無しさん:02/12/01 09:01
そうじゃなくて、直接 "xxx.exe" でいいんじゃないかという話なのだが。

348 :真面目に質問:02/12/01 09:38
すいません、WinSock2で困っています。

ネットワークプログラミングの勉強をしている初心者なのですが、今、VisualC++6を使っていますが。
以下のとおり入力したらエラーがでました。

#include <winsock2.h>

.
.
.


WSADATA wsaData;
WSAStartup(2,&wsaData);

(エラー)
リンク中...
Network.obj : error LNK2001: 外部シンボル "__imp__WSACleanup@0" は未解決です
Network.obj : error LNK2001: 外部シンボル "__imp__WSAStartup@8" は未解決です
Debug/Network.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー
Network.exe - エラー 3、警告 0

なぜ、エラーが出るのでしょうか???教えていただけませんか?
すいません、初歩的な質問で・・・。

349 :デフォルトの名無しさん:02/12/01 09:43
>>348
wsock32.libをリンクしてないんじゃない?

350 :真面目に質問:02/12/01 09:45
>>349
ws2_32.lib をインポートすると言うことでしょうか?
インポートはどうすればいいのですか?

351 :デフォルトの名無しさん:02/12/01 09:50
>>350
それくらい自分で調べろよ。
プログラマとしての適性が無いばかりか、人間としての最低限の能力だろ。

352 :真面目に質問:02/12/01 10:05
>>349
ws2_32.lib をインポートすると言うことでしょうか?
インポートはどうすればいいのですか?

353 :真面目に質問:02/12/01 10:07
>>351
すいませんでした。
解決しました。

プロジェクト→設定→リンクタブ内で、ws2_32.libを追加しました。

まことにすいませんでした。失礼な質問をして・・・。

354 :デフォルトの名無しさん:02/12/01 13:33
>>347
それでも、けっかは同じでした。
コンソールアプリは、終了をまってはくれません。

355 :デフォルトの名無しさん:02/12/01 13:35
終わったことを知りたいのではなくて?

356 :sage:02/12/01 14:59
StrechBlt() を使うとページ違反が頻発するのですが、
これはそういうものなのでしょうか?
特に拡大Bltするとページ違反が何百Kにもなるので不安です。

357 :デフォルトの名無しさん:02/12/01 15:12
メモリをオンデマンドで確保してる、とか。

358 :デフォルトの名無しさん:02/12/01 16:39
>>354
ちゃんと待つけど。お前のプログラムがへぼいんだろ

359 :デフォルトの名無しさん:02/12/01 18:11
> コンソールアプリは、終了をまってはくれません。

何のことを指しているんだ?

360 :デフォルトの名無しさん:02/12/02 00:02
StretchBltは全てのデバイスに対して使えるわけではない。

361 :デフォルトの名無しさん:02/12/02 00:18
使えるデバイスかどうか判定する方法も書いてくれるとさらに親切だな
ちなみにGetDeviceCapsを使うわけだが

362 :356:02/12/02 00:56
>>360,361
なるほど、StretchBlt()にはそんな落とし穴が・・・
見た目正常に動いていたので謎でした。
どうもありがとうございます。助かりました。

363 :デフォルトの名無しさん:02/12/02 08:37
タイトルバーのないウィンドウってどうやって作るんですか?
これでもタイトルバーは付いちゃいますよね。

hWnd = CreateWindow(szWindowClass, szTitle, NULL, // ←スタイルにNULL指定
CW_USEDEFAULT, CW_USEDEFAULT, 256, 256, NULL, NULL, hInstance, NULL);

364 :bloom:02/12/02 08:52

http://www.agemasukudasai.com/bloom/

365 :デフォルトの名無しさん:02/12/02 09:08
WS_POPUP

366 :363:02/12/02 09:32
>>365
できました、ありがとう


367 :デフォルトの名無しさん:02/12/02 10:49
個人的に、StretchBlt はデバイス未対応だったら GDI がエミュレートすべきだと
思うのだがどうよ?

368 :デフォルトの名無しさん:02/12/02 11:09
>>343
コンソールアプリの終了を待ちたい、ということだろうが、ちゃんとできてるぞ。
ちなみに、cmd.exeを通して呼ぶのではないが、その必要性は感じない。
コンソール「アプリ」なんだからな。

とりあえず、コードを晒せや。
CreateProcessとWaitForSingleObjectの引数が重要だ。


369 :デフォルトの名無しさん:02/12/02 14:00
>>367
GDI? デバドラでは内科医

370 :デフォルトの名無しさん:02/12/02 14:06
>>369
デバイスドライバがエミュレートするならば、デバイス未対応とは言わない。
GetDeviceCaps() に応答するのはハードウェアではなくデバイスドライバ。

つーか、367 はユーザープログラムにいちいち GetDeviceCaps() させるような
作りは間違っているという話じゃないのか?

371 :デフォルトの名無しさん:02/12/02 15:38
>>370
未対応つーともっと凶悪なの見たことあるぞ
RC_STRETCHBLTが真になるのにStretchBltがずっこけるプリンタとか

372 :age:02/12/02 15:39
age

373 :デフォルトの名無しさん:02/12/02 15:45
それは、ドライバの製作元に爆弾を投下していい話じゃないのか?

374 :356:02/12/02 20:08
で、独り言というか報告ですが、
BeginPaint()で取ったHDCにもRC_STRETCHBLTが
効いてないようでした。StretchDIBits()もダメ。
BitBlt()はOKですが・・・。
結局DirectDrawのBlt()で拡大したら、ページ違反が
出なかったのでこれでいこうかと思います。

375 : :02/12/03 11:51
StretchBltは、失敗してしかも GetLastError が 0 ということってママあるよね。
一度に描画するピクセル数を減らすとかすればよいのかな。

376 :デフォルトの名無しさん:02/12/03 13:38
別スレッドで昨日から質問させてもらっていたのですが、答えが得られません
でした。教えて頂けそうな所を探していた所、専門的なこのスレッドを
見つけましたので、ここで質問させていただきます。
C言語でコンソールにsetpixel関数での描画の仕方がわかりません。
別にウインドウを開いてやるのは、やり方だけはわかるのですが
コンソールのほうに応用はできません。下に書いた感じだと思うのですが。
お教えお願いします。
#include <windows.h>
int main(void)
{
HWND hWnd;
HDC hDC;
hWnd=?
hDC=GetDC(hWnd);//描画準備
SetPixel(hDC,100,100,RGB(255,255,255));//描画
ReleaseDC(hWnd,hDC);//描画終了
return 0;
}

377 :デフォルトの名無しさん:02/12/03 13:41
>>376
FindWindowはエロいからちょっとおすすめできない


378 :デフォルトの名無しさん:02/12/03 14:31
つーかコンソールにピクセル描こうとかいう発想そのものがキチガイじみてる

379 :デフォルトの名無しさん:02/12/03 14:34
0xA800,0xB000,0xB800,0xE000
のセグメントからいじれ


380 :デフォルトの名無しさん:02/12/03 14:59
>>379
スレ違い
しかもいまどきそれで絵が書ける機種(PC-9800シリーズ
なわけだが)がどれだけあるんだ?

381 :デフォルトの名無しさん:02/12/03 16:10
379はネタだろ。
哀れな376をからかうための。
だいたい>>376よ、
お前はWindowsプログラミングの基礎がわかってないぞ。
出直してこいや。


382 :デフォルトの名無しさん:02/12/03 16:38
>>380
イタタ

383 :デフォルトの名無しさん:02/12/03 17:59
1つのクライアント領域に2つ以上のタブコントロールを配置する事って可能ですか?
タブが2つ以上じゃなくて、タブコントロール自体を2個以上配置したいのですが。
やはり、タブコントロールごとに子ウインドウを作って、その上にタブコントロールを
置くしかないんでしょうか?

384 :デフォルトの名無しさん:02/12/03 18:33
>>383
すきなだけ配置すればよいと思うのだが出来なかったか?

385 :デフォルトの名無しさん:02/12/03 18:37
>>384
タブが選択されたときの全てのWM_NOTIFYが全部同じ親ウィンドウに行ってしまうので
判別ができないんですよ。

386 :デフォルトの名無しさん:02/12/03 18:40
NMHDR::hwndFrom
はどうなった。

387 :デフォルトの名無しさん:02/12/03 18:45
>>383
Delphi使えばこんなくだらないことではまらなくてすみますよ。

388 :デフォルトの名無しさん:02/12/03 21:16
>>387
スレ違いは芯でくれ

389 :デフォルトの名無しさん:02/12/03 21:44
>>383
これ見ても意味分からなかったらDelphi/VBでも使っとけ。

WM_NOTIFY:
{
NMHDR* nmhdr=(NMHDR*)lParam;

switch (nmhdr->idFrom) {
case IDC_TABCTRL1:break;
case IDC_TABCTRL2:break;
}

}

390 :デフォルトの名無しさん:02/12/04 00:43
あるウインドウAが子ウインドウを3つくらい持ってるんだが(自力で位置調整して表示してる)
WM_SIZEでウインドウAのサイズを変えたときに子ウインドウの位置・サイズもMoveWindowで
かえてるんだけど、ドラッグしてサイズ変更してるときとかはウインドウがちらついてしょうがない。
MFCで作られたやつはサイズ変更してもほとんどちらつきは無いけど、こういうのってどうやって
SDKレベルで実装すればいいんですか?

391 :デフォルトの名無しさん:02/12/04 00:45
WM_ERASEBKGND?

392 :デフォルトの名無しさん:02/12/04 01:04
>>392
サンクス。試してみます。

393 :392:02/12/04 01:05
あ、>>391ね。

394 :デフォルトの名無しさん:02/12/04 03:55
某ネットゲーのDirectXフルウィンドウ表示を、
通常のソフトの様に表示させようと思って、
色々試したのですが、SetWindowLong SetWindowPos等を
使ってみたりしても、変更できず、色々探したのですが、
あまり有益な情報が出てこなかったので、どなたか、
何かヒントでもあれば、教えて下さい。

395 :デフォルトの名無しさん:02/12/04 05:18
>>394
デバイスリセットしないと無理だよ?
第一ソフト側で切り替えられないなら
フルスクリーン依存の処理ばっかりだろうし。

396 :デフォルトの名無しさん:02/12/04 05:36
VMWareつかう(w

397 :デフォルトの名無しさん:02/12/04 10:11
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;

if (!hPrevInstance) {
if (!InitApp(hInstance))
return FALSE;
}
if (!InitInstance(hInstance, nCmdShow)) {
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

上記のプログラムをビルドすると
「error C2275: 'MSG' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。」
となってしまうのですが、なぜでしょうか?
ファイル名を「prog.cpp」にするとビルド出来るのですが「prog.c」にするとエラーになってしまうのですが。

398 :デフォルトの名無しさん:02/12/04 10:11
システムのタスクバーやOfficeツールバーのように画面の一部分を占有するためには
どのAPIを使えばいいのでしょうか?

399 :デフォルトの名無しさん:02/12/04 10:18
>>397
行番号見てるか?

400 :デフォルトの名無しさん:02/12/04 10:39
LAN間でソケット通信をしたいと思っているのですが、
どのようなAPIを使えばいいのでしょうか?


401 :デフォルトの名無しさん:02/12/04 12:50
>>398
AppBarでぐぐる
>>400
WinSock

402 :398:02/12/04 13:15
>>401
あんがと。良い検索のキーワードが思いつかなかったよ。

403 :デフォルトの名無しさん:02/12/04 18:08
だれかBrowser Componentのhostingで、

<!--[if gte IE 5 ]>
<link rel="stylesheet" type="text/css" href="style.css">
<![endif]-->

の IEのバージョンを詐称するやり方知りませんか?


IMarkupTextFrags や IMarkupPointer あたりを使うのかと思いきや、
どっからこのInterfaceを取得してよいのかわからん・・・

404 :デフォルトの名無しさん:02/12/04 18:55
>>402
「Windows ソケット通信」でボロボロ出てきたけど?

405 :デフォルトの名無しさん:02/12/04 18:59
>>404
ほー、「Windows ソケット通信」でAppBarについて出てくるのか。

406 :404:02/12/04 19:12
  _, ,_
( ´_ゝ`) すまなかった

407 :デフォルトの名無しさん:02/12/04 19:15
>396
VMWare って DirectX 動いたっけ?

408 :デフォルトの名無しさん:02/12/04 19:22
>>407
こちらをどーぞ。
http://www.networld.co.jp/products/vmware/faq/ws_video-sound.htm

あぁVMwareほしい・・・。高い・・・。

409 :デフォルトの名無しさん:02/12/04 20:42
WinSockで質問ですが、以下のソースでconnectするとエラーになるのですが、
何が原因かwかったら教えていただきたいのですが・・

bool __fastcall TWinSock::Open( void )
{
  WORD vr = MAKEWORD(1, 1);
  WSADATA wd;
  // 初期化
  if( ::WSAStartup( vr, &wd ) ) return false;
  // ソケット作成
  if( (SocketHandle = ::socket( PF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET ){
    ::WSACleanup( );
    return false;
  }
  // 接続
  struct sockaddr_in sa;
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = inet_addr("192.168.1.22");
  sa.sin_port = htons(1);
  ::ZeroMemory( sa.sin_zero, sizeof( sa.sin_zero ) );
  if( ::connect( SocketHandle, (struct sockaddr *)&sa, sizeof( sa ) ) == SOCKET_ERROR ){
    Close( );
    return false;
  }
  return true;
}


410 :デフォルトの名無しさん:02/12/04 21:16
プログラム的に特におかしいところはないが。
つか、ちゃんと相手はいるのか?

411 :デフォルトの名無しさん:02/12/04 22:15
> エラーになるのですが

どんなエラーか書かんかい。

412 :390:02/12/04 23:59
>>391
出来ました。ありがとんございますた。

413 :デフォルトの名無しさん:02/12/05 17:31
>>410
相手はいます。
>>411
ああ、すみません。これからエラー内容を調べます

414 :デフォルトの名無しさん:02/12/05 18:00
CPUの使用率を知りたいです。
っちゅーても、ただの使用率じゃなく、指定した優先順位以上のプロセスの使用率。
たとえば、distributed.net に参加してたりすると常に100%近いですが、タスクマネージャで見ると基本優先度は「低」ですよね。これを引いた値を知りたいんです。
通常のプロセスの動作に影響を与えるCPU負荷を取得する方法を探してます。

415 :デフォルトの名無しさん:02/12/05 18:10
>>414
(゚Д゚)ハァ? 何を引くの?
優先度はタスクスケジュールのパラメータで
CPU使用率とは直接関係ないと思うのだが?

416 :414:02/12/05 18:33
>>415
全タスクの内、指定した基本優先度以上のタスクのCPU使用率を知りたいんです。(最初からそう書け?)
ソースのイメージでは以下のような感じ。
CPU使用率 = 0;
for(i = 0; i < タスク数; i++){
 if(タスク[i].基本優先度 >= 通常){
  CPU使用率 += タスク[i];
 }
}


417 :デフォルトの名無しさん:02/12/05 19:42
エクスプローラーでカット&ペーストを使ったファイルやフォルダの
移動って、同一ドライブなら(コピーが発生せずに)一瞬で終わって
しまいますが、どういう仕組みなんでしょうか?
あれと同じ事をプログラムから行いたいんですが・・。


418 :デフォルトの名無しさん:02/12/05 19:51
>>417
MoveFile()

419 :417:02/12/05 20:15
ありがとうございます。
やってみます。

420 :デフォルトの名無しさん:02/12/06 10:09
>>409
192.168.1.22の1番のポートにつないでるけど、
ちゃんとそっちでaccept呼んでる?

421 :デフォルトの名無しさん:02/12/06 12:32
エラーをちゃんと言ってくるまで放置でいいだろ
ノートンを窓から投げ捨てろに3port

422 :デフォルトの名無しさん:02/12/06 16:53
HRGN = CreateRectRgn(...);
SetWindowRgn(handle, HRGN, 1);

この HRGN はすぐに DeleteObject してしまっても良いのでしょうか?
MSDN には
The operating system does not make a copy of the region.
Thus, you should not make any further function calls with this region handle. In particular, do not close this region handle.
とありますが、ネットでサンプルを検索してみると削除してしまっている人が結構いますので・・・
英語に自信がないのでもしかしたら解釈が間違っているのかと・・・


423 :デフォルトの名無しさん:02/12/06 17:05
>>422
日本語MSDNより(SetWindowRgn)

SetWindowRgn 関数が成功すると、オペレーティングシステムは、
パラメータ hRgn で指定したリージョンを所有します。
リージョンのコピーは作りません。
したがって、以後、このハンドルを使用したり解放したりしないようにしてください。

ということで俺は律儀に保有してるよ。

424 :422:02/12/06 17:18
どうもです
削除してもちゃんと動いているように見えるので調べてみて混乱したわけですが
わたしも残す事にします
423さんありがとうございました


425 :デフォルトの名無しさん:02/12/06 18:27
>422 氏と似た内容ですが、
SetClipboardData( CF_TEXT, hmemText );
の hmemText は解放して良いのでしょうか?

MSDN には
"The application can read the data, but must not free the handle or leave it locked until the CloseClipboard function is called."
と書かれているので解放できそうなのですが
ネットでサンプルを探すとたいていは「解放してはダメ」と注意書きがしてあります。
これはいったいどういうことなのでしょうか?

426 :デフォルトの名無しさん:02/12/06 18:32
>must not free the handle
ほう、「開放できそう」、ね

427 :デフォルトの名無しさん:02/12/06 18:37
until the CloseClipboard function is called.
とも書いてあるわけだが。

428 :デフォルトの名無しさん:02/12/06 18:37
>426
until the CloseClipboard function is called

429 :デフォルトの名無しさん:02/12/06 18:42
>ほう、「開放できそう」、ね
英語見る限り別に解放しても問題ないじゃんか
CloseClipboard()呼んだ後なら...

430 :デフォルトの名無しさん:02/12/06 19:31
CloseClipboard、GlobalFreeした時は何とも無くて、
アプリケーションが終了する時にメモリエラーが発生するに100モナー。

日本語版から:
SetClipboardData を呼び出した後で、システムは、hMem パラメータで指定されたオブジェクトを所有します。
アプリケーションはデータを読み取れますが、CloseClipboard 関数を呼び出すまでは、
そのハンドルを解放することや、ロックし続けることを避けなければなりません。
(CloseClipboard を呼び出した後も、アプリケーションはそのデータにアクセスできます。)
hMem パラメータがメモリオブジェクトを指している場合、そのオブジェクトは、
GMEM_MOVEABLE フラグを指定して GlobalAlloc 関数で割り当てたものでなければなりません。


431 :デフォルトの名無しさん:02/12/06 19:33
MSDNのサンプルでも解放はしてないみたいだけど...

解放(GlobalFree)って、すなわちクリップボードの破棄になる?
っていうかクリップボードを明示的に破棄したい場合ってどうするの?

432 :430:02/12/06 19:36
EmptyClipboard()を使う。


433 :431:02/12/06 19:45
>>432 あ、確かに。

434 :デフォルトの名無しさん:02/12/06 20:31
今思うに、CloseClipboardした後アプリが死んでも、
クリップボードのデータは残るから、GlobalFree
してもいいんじゃないかな。

435 :デフォルトの名無しさん:02/12/06 21:36
(´-`).。oO(どこにのこるんだ

436 :デフォルトの名無しさん:02/12/06 21:44
GetClipboardData の場合は破棄しちゃまずいけど、
SetClipboardData の場合は問題ないんじゃない?
俺はエラー起こったことないけど…

437 :デフォルトの名無しさん:02/12/06 22:42
サンプルが解放を禁じている歴史的背景とおぼしきものがここに。
ttp://www.hidecnet.ne.jp/~sinzan/tips/win/win_tip04.htm

今の MSDN の記述からすれば解放はできそう。


438 :デフォルトの名無しさん:02/12/06 23:58
マウス使ったお絵かきプログラムで、取得したマウスの座標の
・ストローク(一本の線)の数
・一本のストロークに含まれる座標点(x,y座標)
・一本のストロークに含まれる座標点の数
を変数に保存しておきたいのですが、

typedef struct{
 int PCount;//ストロークの座標点の個数
 POINT SPoint[1000]//ストロークの座標点;//1000個決め打ち
} SPOINT;

typedef struct{
 int SCount;//ストロークの数
 SPOINT Stroke[1000];//同様に1000個決め打ち・・・
} STROKE,*PSTROKE;

STROKE a;

今はこんな感じの構造体作ってやってますが、もっと良い方法はないものかと思いまして。
特に構造体の確保やストロークの座標点などは動的にメモリに確保する方が良さそうですが。
Win32SDK+VisulaCで開発しています。

439 :デフォルトの名無しさん:02/12/07 00:23
自分ならこう。

typedef struct _STROKEPOINT{
 list<POINT> list_point//ストロークの座標点の履歴
} STROKEPOINT;

typedef struct _STROKE{
 list<STROKEPOINT> list_strokePoint;//STROKEPOINTの履歴
} STROKE,*PSTROKE;


440 :デフォルトの名無しさん:02/12/07 00:25
>>438
std::vector/list

441 :デフォルトの名無しさん:02/12/07 07:09
>>438
一応突っ込んどく。

びじゅらC

442 :デフォルトの名無しさん:02/12/07 16:26
お、なんかmodula-2みたいだ。

443 :デフォルトの名無しさん:02/12/07 19:19
動的確保するなら、

typedef struct{
 int PCount;//ストロークの座標点の個数
 POINT* SPoint;//ストロークの座標点;//1000個決め打ち
} SPOINT;

typedef struct{
 int SCount;//ストロークの数
 SPOINT* Stroke;//同様に1000個決め打ち・・・
} STROKE,*PSTROKE;

にしてmallocとかで確保すりゃ良いんじゃないの?
そもそもなんで固定長にしたんだ?
ただ、>>439みたくリスト構造にして管理する方がベターかもな。

444 :デフォルトの名無しさん:02/12/07 19:22
std::vector の方がずっといいと思う。

445 :443:02/12/07 19:22
おっとsage忘れた。
ところで>>438はC(not C++)使いだよね?

446 :デフォルトの名無しさん:02/12/07 19:25
>>444
まあ、相手はマウスだからな(w
メモリコピーのコストもそれ程気にならないだろう。

447 :デフォルトの名無しさん:02/12/07 19:33
メモリコピーのコストがイヤなら std::list
いずれにせよ、コンテナが使えるような状況で自分でリスト構造を書こうとするのは
漏れはイヤだったらイヤだ。

448 :名無し@沢村:02/12/07 20:54
皆々様方〜、教えてくださらんか〜♪
それはmidiファイルの読み込みだが、自分で保存したmidiファイルは難なく読み込めるわけよ。
だが、他のmidiシーケンサーで作ったmidiファイルは、ちゃんと読み込めるものと、読み込んで鳴らすとチンドン屋みたいな音になってしまうものとが出てくるわけよ。
ま、ほとんどのmidiファイルはチンドン屋みたいになってしまって、ちゃんと読み込めるものはほんの少しだわな…。
皆々様方〜、私はこの原因を分析した結果原因らしきものを突き止めたわけよ。
それはノートノンやオフのステータスバイトってあるだろ?90や80よ。
それを省略して本来90407F7Fみたいにするところを407F7Fと省略するだろ?
で続けて書くと90407F7F407F7Fになるわな…。
それでデルタタイムというのもあるだろ?
デルタタイムは1バイトから4バイトまでの可変長になっていて、1バイトだったら、例えば90407F7Fになるが、もし4バイト
だったら、例えば90407F7F407F7Fになるだろ?
そうすると90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別がつかんわけよ。
どちらも7F以下で同じだしな…。
皆々様方〜、90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別する方法を教えてくださらんか〜皆々様方〜♪
ぜひお願いします♪
私はいま最後の壁にぶち当たっているのですよ!!!


449 :デフォルトの名無しさん:02/12/07 21:11
>>448
ノイズ多過ぎ

450 :デフォルトの名無しさん:02/12/07 21:19
>>424
NT系だと無害そうに見えるが9xで破局する

451 :デフォルトの名無しさん:02/12/07 22:20
>>448
APIと関係ない。

452 :デフォルトの名無しさん:02/12/07 22:37
>>沢村
お前マジでうざいよ
寒いんだよ。


453 :デフォルトの名無しさん:02/12/07 23:49
>>448
スレ違いだとは思うけど・・・それと、その口調やめれ。んで、だな。
デルタタイムはすべてのメッセージの前に付く。
デルタタイムの後に、ランニングステータスバイトが、あるか、ない。
その後に、ノートの音階とかベロシティが来る。
その後は、またデルタタイムが来て、その後にランニングステータスバイトがあるかもしれないしないかもしれなくて、その後に音階とかベロシティが来る。
んで、またデルタタイムが来て、・・・って感じ。デルタタイムはすべてのメッセージの前に必ずある。わかった?

454 :438:02/12/08 01:01
みなさまレスありがとうございます。
私はC++は使ったことがなかったのでそのような方法は気が付きませんでした。
もっと勉強しなければ・・・。


455 :デフォルトの名無しさん:02/12/08 01:15
つかC++の標準リストクラス使うのもいいけど、リスト構造を全く知らないんなら
まずは自力でリスト作って理解したほうがいいと思うのだが。

456 :デフォルトの名無しさん:02/12/08 05:28
つーか、「沢村」 は定型の荒らしコピペだから、みんな以降無視してくれよ。

457 :デフォルトの名無しさん:02/12/08 12:43
>>455
禿同
表面だけ学んでも、ねぇ。

458 :438:02/12/08 19:00
リスト構造は一応理解しています&プログラムも作りました。

459 :デフォルトの名無しさん:02/12/09 20:44
済みません、教えてください。

メニューが出ていた場合に、その矩形領域を取得するにはどうしたら良いのでしょう?

クライアント領域に表示している画面イメージを取得しているのですが、他のアプリ
のウィンドウがその上にある場合には、その部分のイメージを取得したくないので
クライアント領域をクリップして、子ウィンドウのクリッピング領域をCombinRgnでOR
をとった上でイメージを取得しているのですが、
メニューに隠れた領域が、隠れた領域が、真っ黒になってしまいます。

トップレベルのウィンドウの子ウィンドウのクリップ領域もORをとってみたのですが、
症状は変わりません。そもそも、メニューからウィンドウハンドルが取れるのか
どうかも知らないヘタレです。

出来れば、くオーナードロウなどには手を出したり、メニューを出す部分に手を加えたくありません。
よろすくおながいすます。

460 :デフォルトの名無しさん:02/12/09 20:50
>>459
隠れた領域は実際に何も描かれてないのだから無理。

461 :デフォルトの名無しさん:02/12/09 21:25
言葉が足りず済みません。
メニューに関しては、メニューに隠れた部分が真っ黒になるのではなく、
メニューのイメージを含んで取得したいのです。

462 :デフォルトの名無しさん:02/12/09 22:57
>459
ポップアップメニューのウィンドウクラスは "#32768" なので
HWND hwndMenu = FindWindow( "#32768", NULL );
とやればメニューのウィンドウハンドルは取れるかも。

ただ、普通に
> クライアント領域に表示している画面イメージを取得
したのなら
> メニューに隠れた領域が、隠れた領域が、真っ黒
にはならずにメニューが取得されるはず。

具体的に何がやりたくて、どう実装してみたのかが知りたい。

463 :デフォルトの名無しさん:02/12/10 08:30
HHOOK hHookMouse = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, DLLLocal::hInstance, NULL);
HHOOK hHookMessage = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, DLLLocal::hInstance, NULL);

これで、MouseProc にはちゃんと制御が行って、CallWndProc には制御が全く来ないという
状況なのですが、原因わかる人いますか?
ちなみに、SetWindowsHookEx() そのものは両方とも成功しているっぽいです。

464 :ヘタレ459:02/12/10 11:12
>>462
ありがd。
昨日帰り道で同じ事を思いついて、今朝着てやって見たところ、思ったとおりに出来ました。
やりたいことは、あるウィンドウのクライアント領域のイメージを取りたい。
ただし、他のアプリケーションのウィンドウと重なっている部分は除く。
ただし、自分のメニューで隠れている部分は、メニューのイメージを表示する。
できあがったのは、こんな↓感じです。なにかおかしな点、改善点があったら何でもWelcome。
(つづく)

465 :ヘタレ459:02/12/10 11:13
BOOL CALLBACK EnumChildWindowsProc(HWND hWnd, LPARAM lParam)
{
  HRGNclipRgn = (HRGN)lParam;
  HRGNrgn = ::CreateRectRgn(0, 0, 0, 0);
  HDCDC = ::GetWindowDC(hWnd);
  ::GetRandomRgn(DC, rgn, SYSRGN);
  ::CombineRgn(clipRgn, clipRgn, rgn, RGN_OR);
  (void)::DeleteDC(DC);
  (void)::DeleteObject(rgn);
  return TRUE;
}
  ...
  clipRgn = ::CreateRectRgn(0, 0, 0, 0);
  ::GetRandomRgn(DC, clipRgn, SYSRGN);
  ::EnumChildWindows(m_hWnd, EnumChildWindowsProc, (LPARAM)clipRgn);
  hWndMenu = ::FindWindow(_T("#32768"), NULL);
  if (menuWnd != NULL) {
    ::GetWindowThreadProcessId(menuWnd, &pid);
    if (pid == GetCurrentProcessId()) {
      HDC DC = ::GetWindowDC(menuWnd);
      HRGN rgn = ::CreateRectRgn(0, 0, 0, 0);
      ::GetRandomRgn(DC, rgn, SYSRGN);
      ::CombineRgn(clipRgn, clipRgn, rgn, RGN_OR);
      (void)::DeleteDC(DC);
      (void)::DeleteObject(rgn);
    }
  }
  ::GetDCOrgEx(DC, &org);
  (void)::OffsetRgn(clipRgn, -org.x, -org.y);
  ...


466 :デフォルトの名無しさん:02/12/10 15:09
>>463
CallNextHookEx()してないとか。

467 :463:02/12/10 18:06
>>466
レスありがと。

でも、CallWndProc が呼ばれてないので CallNextHookEx() しようがないんですが・・・。
それとも、別の常駐プロセスがポカしてる可能性もあるって事ですか?
他にフックしてそうなプロセスがあるわけでもないのですが・・・。

ちなみに、WH_CALLWNDPROC の代わりに WH_CALLWNDPROCRET や WH_GETMESSAGE
を指定しても同様でした。

468 :デフォルトの名無しさん:02/12/10 19:24
IEで、アドレスに
http://
telnet://
ftp://
などとやった場合、そのプロトコルに応じた処理を行うけれど、
自分でそれを実装する場合にはどうすればいいの?

例えば、
xyz://
とやりたいんだけれど

469 :デフォルトの名無しさん:02/12/10 19:31
HKEY_CLASSES_ROOT\http

のマネをすりゃいいんじゃないの?
よく知らないけど。

470 :デフォルトの名無しさん:02/12/10 19:35
>>469
早速のレスthx!
ちょっと見てみたけれど、例えばftpみたいに結果を改めてブラウザに表示するには
どうすればいいんだろう?

471 :デフォルトの名無しさん:02/12/10 19:35
Pluggable Protocol Handler

472 :デフォルトの名無しさん:02/12/10 19:40
>>471
ありがとう。調べてみる。

473 :デフォルトの名無しさん:02/12/11 02:34
背景に画像を設置したエディタを作りたいのですが、方法が分かりません。教えてください。

ちなみに、今の私の現状は、EDITで作って、CTL_COLOREDITメッセージで、文字の背景を透過にしてから、画像のブラシを返したところ、画像が更新されず、昔書いた文字が消えなかった。
行き詰ったので、RICHEDITに乗り換えてみたところ、文字の背景の透過自体を受け付けてくれない気がする。さらに、画像のブラシを返すような関数が今のところ見つからないという状況です。

474 :デフォルトの名無しさん:02/12/11 03:15
起動中のプログラムにフックしてその中で呼ばれているAPIのかわりに
自作関数を呼ぶようにすることは可能ですか?

 



475 :デフォルトの名無しさん:02/12/11 04:18
>>474
可能。

476 :デフォルトの名無しさん:02/12/11 08:47
> でも、CallWndProc が呼ばれてないので CallNextHookEx() しようがないんですが・・・。
MouseProcで。なに寝ぼけてるんだ?

477 :デフォルトの名無しさん:02/12/11 11:31
>>473
その目的に近い動作をしているアプリをSpy++

478 :デフォルトの名無しさん:02/12/11 14:16
>>473

CreateBrushIndirectとかで作ったブラシを
WM_CTLCOLOREDITの戻り値として使いたいってこと?

479 :474:02/12/11 15:21
>>475
いい検索キーワード紹介してください

480 :デフォルトの名無しさん:02/12/11 15:30
"apiフック"

481 :463:02/12/11 17:17
>>476
MouseProc でならちゃんとしてるよ。

寝ぼけてると言われても、そう取れるレスじゃん・・・。

482 :474:02/12/11 17:42
>>480
ありがとう
ttp://www.users.gr.jp/ml/archive/delphi/51202.asp
こんなのみつけたので
作ってみます

483 :名無し@沢村:02/12/11 22:34
銀行のATMにアクセスするプログラムの書き方

//ネットワークに流れるデータを受信する
recive(data);
//データがATMのときは
if(data==ATM)
//1億円を自分の口座に振り替える。
sendmoney(100000000)from(anybank)to(mybank);


484 :473:02/12/12 03:04
>478
説明が悪かったですね。WM_CTLCOLOREDITで、返り値にブラシは返せましたし、画像は表示されました。
文字の背景を透過させることで、画像の上に文字も載せられました。
でも、一度表示された文字が消えないという問題が出ました。
例えば「nnnn」という文字書いて、ウインドウをスクロールさせると、
nnnn
nnnn
nnnn
nnnn
という風にディスプレイには表示されてしまうのです。
とはいえ、文字データ自体が増えている訳ではないので、画面の更新さえすれば何とかなると思ったのです。
しかし、WM_PAINTで画面全体をBITMAP画像で更新するという方法も試したのですが、昔に書いた文字が消えてしまうという問題が出てきました。
昔書いた文字データを、記憶はしているようなのですが、古いデータはWM_PAINTでの画面の更新には反応しないという仕様のようです。

RICHEDITも今ひとつ見通しが立ちません。
もしかすると、全て自作の関数で作るべきなのかもしれないと考えているところなのですが、
どの様な方法で実現できるのか、アドヴァイスをいただけませんでしょうか?

485 :デフォルトの名無しさん:02/12/12 03:37
WM_SCROLLでInvalidRect(NULL)すれ。

486 :484:02/12/12 06:59
>485
それも一度試したのですが、結局WM_PAINTが呼ばれるだけですよね。
たぶん、EDITの文字の更新はWM_PAINTを通してないと思うんです。
昔書いた文字が何故か更新されないという問題が結局残るんですが。

487 :478:02/12/12 12:11
>>486
自分もEDITをサブクラスして、
入力補完もどきを作ってみた事があるが、
どうやらGetDCして書き換えてるみたい。

>>文字の背景を透過させることで、画像の上に文字も載せられました。
SetBkMode使ったの?
だったら、EDITクラスの関知しないところだから、
自前で更新してやるしかない。

嫌な方法だけど、RedrawWindowとかMoveWindowは試した?

488 :486:02/12/12 14:29
RedrawWindow,MoveWindowは試してなかった。
今夜にでもやってみます。

でも実はEDITクラスでは多種の文字の色とかを混在できないっぽいので、
最近はRICHEDITに走ろうとしてるんです。
 でも、RICHEDITにはSetBkModeが通用しない様なんですが、無理なんでしょうか?
それとも、通知メッセージのマスクがかかっているって、「猫でもわかる・・・」にあったんですが、
それに引っ掛かっているんでしょうか?

489 :486:02/12/13 03:35
MoveWindowで何とか表示は出来るようです。
ちなみに、ソースと実行ファイル(色々試した跡があって、ソースは見にくいです。)↓
http://longhair-k.hp.infoseek.co.jp/data_html/text/Program/KoumeEditer/KE_001.exe

まだスクロールには弱い。
スクロールでの描写はまだやった事ないので調べてみます。

490 :478:02/12/13 13:28
RichEditには詳しくないので、解決方法があるかもしれないが、
過去自分もEDITクラスで色々やったが、意味不明な挙動が多々あった。
悪い事は言わないからやめとけ。

自前でクラス作った方が話が早い。
ただし、バッファ管理、描画処理等プログラミングの醍醐味満載だけどな。

491 :デフォルトの名無しさん:02/12/13 13:32
WM_GETTEXT と WM_SETTEXT に自前で応答するにはどうしたらいいの?
外部プロセスからのが捕捉できないんだけど・・・。

492 :478:02/12/13 13:49
呼び出し側でGetWindowTextを使ってる限り無理。


493 :491:02/12/13 13:50
いや、SendMessage() なんスけど・・・。
それでも結局 Get/SetWindowText() と一緒という事でつか?

494 :478:02/12/13 15:17
SendMessageならプロシージャは呼ばれるはず。
Spy++で呼ばれるウィンドウのメッセージ見てみて。

まさかメッセージループで捕まえようとはしてないよね?

495 :478:02/12/13 15:26
> まさかメッセージループで捕まえようとはしてないよね?

Σ(゚д゚lll)ガーン
そーしてまつた・・・。
どうするの? フック?
MSDN には何も書いてないみたいだけど・・・。
Spy++ で見ると、「自分の知らないところ」 が応答しているように見えまつ。

496 :478:02/12/13 15:48
MSDNライブラリ日本語版のSendMessageより:

指定されたウィンドウが、呼び出し側スレッドが作成したものであった場合、
そのウィンドウのウィンドウプロシージャがサブルーチンとして即座に呼び出されます。
指定されたウィンドウが、他のスレッドが作成したものであった場合、
システムはそのスレッドへの切り替えを行い、
次に適切なウィンドウプロシージャを呼び出します。
複数のスレッド間で送信されたメッセージが処理されるのは、
受信側スレッドがメッセージ取得コードを実行したときだけです。
送信側スレッドは、受信側スレッドがメッセージの処理を終えるまで、
ブロックされます(待機状態になります)。


だから、自前のクラスでなかったらサブクラス化しれ。


497 :491:02/12/13 16:04
495 は自分の番号間違えますた・・・。

>>496
ごめんなさい、メッセージループとウィンドウプロシージャを混同してました。
自分で RegisterClassEx() したウィンドウなんですけど、ウィンドウプロシージャに
他プロセスからのメッセージが飛んでこないです。
(自プロセスからのメッセージは捕まえられまつ)
なのに、他プロセスから WM_SETTEXT すると Spy++ で見れるウィンドウテキストが
変化するので、「自分の知らないところが応答しているように見える」 状態なんです
けど・・・。

498 :478:02/12/13 16:18
Spy++では該当ウィンドウにWM_SETTEXTは送られてるよう?

(知ってるとは思うけど・・・
ウィンドウリストの該当ウィンドウ上で右クリック->メッセージ)

499 :デフォルトの名無しさん:02/12/13 16:55
>>498
何か、OS 再起動したらちゃんと動いてくれるようになったよ・・・。
振り回してごめんなさい。
しかし、再起動で直るって事は、どっかメモリ壊してるんだろうか・・・、、

Spy++ のメッセージウィンドウでもちゃんと WM_GET/SETTEXT の S と R が
確認できますた。

でも、外プロセスからでもテキストの取得をちゃんとできるのに、Spy++ に表示
されてるウィンドウテキストが "" のままだけど、これはいいのかなあ?

500 :478:02/12/13 18:03
たぶんGetWindowText使ってるんでしょ。

501 :491:02/12/13 18:44
そうでつか・・・。
長々とありがとございますた。

502 :デフォルトの名無しさん:02/12/14 02:16
画面の解像度を取得したいのですが、仮想スクリーンの場合に
仮想スクリーン全体ではなく実際に表示されるピクセル数を
取得できる API はありませんか?
例えば、1024x768 の LCD で 1280x1024 の仮想スクリーンを使っている
場合、1280x1024 ではなく、1024x768 を取得したいのです。
GetDeviceCaps ではできないようなので困ってます。


503 :デフォルトの名無しさん:02/12/14 02:55
>>502 さんのは GetSystemMetrics() か SystemParametersInfo()
あたりで取れないのかなーなんて見ていたら

GetSystemMetrics( SM_SLOWMACHINE )

なんてのを見つけました。これが TRUEとなるマシンってどんなんですか?
くだらない質問なんですけど。

504 :デフォルトの名無しさん:02/12/14 03:55
>>502
漏れは
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
を使ってるよ。

505 :デフォルトの名無しさん:02/12/14 04:30
Under Windows 95, use GetSystemMetrics(SM_SLOWMACHINE) to check for low-end computers. It returns a nonzero value if the computer has a 386 CPU, is low on memory, or has a slow display card.

The return values (bit flags) are:
0x0001 - CPU is a 386
0x0002 - low memory machine (less than 5 megabytes)

The following is notable for video:
0x0004 - slow (nonaccerated) display card

506 :デフォルトの名無しさん:02/12/14 04:34
>>503
486 マシンでも、それが TRUE になったのを見た事が無い。

507 :デフォルトの名無しさん:02/12/14 04:42
>>506
そりゃそうだ
灯台元、、、

508 :デフォルトの名無しさん:02/12/14 05:08
灯台元暮らし

509 :デフォルトの名無しさん:02/12/14 06:13
masokoをなめるには

どのれす?

510 :コロ助:02/12/15 02:47
すいません。WinSockの質問をしたいのですが。
サーバーにHTTP接続を試みているのですが、うまく接続できません。

ソース
sock[n]=socket(AF_INET,SOCK_STREAM,0);

if(WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE))

lpServEnt = getservbyname("http", "tcp");

if(lpServEnt==NULL)
{
ser.sin_port=htons(80);
}
else
{
ser.sin_port=lpServEnt->s_port;
}

lpHostEntry=(LPHOSTENT)bufHostEnt;
ser.sin_family=AF_INET;
ser.sin_addr=*((LPIN_ADDR)*lpHostEntry->h_addr_list);

if(SOCKET_ERROR!=connect(sock[n],(LPSOCKADDR)&ser,sizeof(SOCKADDR_IN)))

HTTPだと駄目なのですが、SMTPやFTPならうまく接続できて、データも転送できます。
なぜ、HTTPだけ接続できないのでしょうか?

511 :コロ助:02/12/15 02:50
>>510
あと、
if(WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE))
の部分は、訂正して、
WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE);
ifは無しということで・・・・。

512 :デフォルトの名無しさん:02/12/15 03:34
ネットワークスレのが回答付きやすいと思う

513 :デフォルトの名無しさん:02/12/15 03:48
昔、Cか宿題スレあたりで見たHNだな
>>コロ助

514 :デフォルトの名無しさん:02/12/15 04:40
>>510
ser.sin_zeroをゼロで初期化してやればいいんじゃない?

515 :デフォルトの名無しさん:02/12/15 06:17
リストビューの詳細表示を作っているのですが、ちょっと困っていることがあります。
デフォルトの背景ではなく、過去に選択された回数によって、
背景の色を変えたいのですが、いくつか問題があります。
オーナードローで書くとなると、文字まで全部自分で書かないといけないので大変すぎます。
また、項目によって、色を変えるための情報をどこに入れたら良いのかもわかりません。
ListView_SetItemStateで設定できるのも少ないです。
グローバルにしてしまうと、更新タイミングで値が狂うのでだめです。
どうしたらいいでしょうか。

516 :デフォルトの名無しさん:02/12/15 06:44
nm_customdraw

517 :名無し@沢村:02/12/15 21:20
皆々様方〜、教えてくださらんか〜!!
それは画面のちらつきについてだが、私は最初WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画するという方式だったのよ。
でもこれだとどうしても画面がちらついてしまうので、WEBで検索してダブルバッファ方式を採用したのよ。
この検索したページのダブルバッファ方式というのは裏画面にCreateCompatibleBitmapでビットマップをつくっておいて、
描画はすべて裏画面におこない再描画するときは裏画面のビットマップを表画面に転送するというものなのよ。
これでとりあえずは全然ちらつかなくなったのよ。
でもこれだと多分モニターかグラフィックボードの性能が悪いためだと思うけど、10秒くらい放っとくと突然画面にちゃんと色が出なくなってしまうのよ。
でも他のソフトなんか画面はちらつかないし、何時間やっても画面の色が出なくなることはないので、もっとうまいちらつき防止策をやっているはずなのよ。
まあ、WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画しても10秒とまではいかないが、5分ほどで画面の色が出なくなってはいたわな…。
おそらくBITBLTを多用したためだという節が臭いわな…。
皆々様方〜、性能がボロっちいモニターやグラフィックカードでも他のソフトみたいに画面の色が出なくなったりしないいい方法を教えてくださらんか〜、皆々様方〜、お願いします〜♪

518 :デフォルトの名無しさん:02/12/15 21:21
>>517
compatibleDC

519 :デフォルトの名無しさん:02/12/15 23:19
>>517
セーフモードで動かしてみるべし。それでだめなら性能がボロだからではなく、あんたのプログラムがおかしい。(たぶんリソースの解放漏れ)


520 :名無し@沢村:02/12/15 23:21
皆々様方〜、再描画における突然色が出なくなる問題だが、原因を突き止めたぞ、皆々様方〜♪
皆々様方〜、その原因というのはブラシとペンを多用しすぎていたためじゃ〜!
試しにブラシとペンをうんと減らしてみたら突然色が出なくなることはなくなった…。
ただ、あまり減らしすぎたんで、今度は画面のみてくれがしょぼくなってしまった…。
なんとかしょぼさを最低限に食い止めるためには、どうしてもあとひとつペンヲ増やす必要があるのだが、増やして大丈夫だろうか?
また突然色が出なくなったりしないだろうか?
皆々様方〜、ブラシとペンはいつくまでつくっても画面がおかしくならないか、教えてくだされ〜、皆々様方〜♪


521 :デフォルトの名無しさん:02/12/15 23:44
>>520
ちゃんと使ったら解放してるか?GDIオブジェクト。

522 :デフォルトの名無しさん:02/12/15 23:45
>>520
リソースメータ起動させて、様子見ながらやれよ。

523 :名無し@沢村:02/12/16 00:11
皆々様方〜、ダメだ。ブラシ2、ペン3ではあまりみてくれがしょぼかったんで、
ブラシ2、ペン4に増やしてみたところ、長持ちはするが、やはり5分くらい再描画を繰り返すと、
突然画面に色が出なくなってしまうのよ。
どうもブラシ2、ペン3というのが、画面の色が出なくならないリミットらしいが、これだとあまりにしょぼすぎて完成作品がイヤになるわけよ。
どうしてもブラシ2、ペン4に増やしたいんだがなあ…。何かいい方法ない?
ところでリソースメータって何?フリーでありますか?それはどこからダウンロードできるのですか?

524 :デフォルトの名無しさん:02/12/16 00:12
>>523

>>521を無視した理由は?

525 :デフォルトの名無しさん:02/12/16 00:15
マルチポストだからじゃない?

526 :デフォルトの名無しさん:02/12/16 00:16
>>525


527 :名無し@沢村:02/12/16 00:21
>>524
GDIオブジェクトというのは知らんが、GetDCで得たDCはReleaseDCしてるし、
BeginPaintで得たDCはEndPaintしてる。
裏画面用のmemDCは複数の関数で使うからグローバルにして、WM_DESTROYメッセージの中でDeleteDCしてる。
ペンとブラシのハンドルもDeleteObjectしてる。
これですべてだが、あと何かぬかりない?
また

528 :デフォルトの名無しさん:02/12/16 00:47
DeleteObjectのまえにSelectObjectで指定をはずすのを
忘れているに400デュカーティ

529 :名無し@沢村:02/12/16 00:50
皆々様方〜、原因はペンとブラシの数にもあるが、それ以上にBITBLTを多用することにあるんじゃないかなという気がしてきたよ。
というのもリソースメータがアクセサリーの中に入っていたのを偶然発見しさっそく起動させて監視してみたところ、システムリソースとGDIリソースというのが見る見る少なくなっていくのがわかったからよ。
というのも私はファイルのデータの数だけforループさせてその分だけBITBLTで描画しているため何千回、何万回とBITBLTを使って広大な領域に描画していることになるわけよ。
何か常識で考えても何千回、何万回とBITBLTを使ったら画面がおかしくなりそうな気がしてきたわけだが、何千回、何万回もBITBLTを使って広大な領域に描画したら画面がおかしくなりますか?
教えてくだされ〜、皆々様方〜♪


530 :デフォルトの名無しさん:02/12/16 00:54
沢村がもうすぐアク制かけられるに3000BitBlt。

531 :デフォルトの名無しさん:02/12/16 00:56
プログラムを良く分かってないアフォがやることとしては
普通だと思うんだが、いかんせん書き方がウザイな。

>>529
テストするだけのプログラムを作って挙動を確かめては?

532 :デフォルトの名無しさん:02/12/16 01:24
>>529

>DeleteObjectのまえにSelectObjectで指定をはずすのを
>忘れている

533 :デフォルトの名無しさん:02/12/16 02:47
>>529

DeleteObject()に渡すハンドルの値と、その返り値を見てみろ。





534 :名無し@沢村:02/12/16 20:17
>>532
SelectObjectで指定をはずすとはどういうことですか?
それはどうやるのですか?


535 :デフォルトの名無しさん:02/12/16 20:26
>>534
SelectObjectの返り値は何のためにあると思ってんだ…

536 :デフォルトの名無しさん:02/12/16 21:31
>>534
SelectObject(hdc, (HGDIOBJ)rand());

537 :デフォルトの名無しさん:02/12/16 23:33
それは(゚д゚)ウマー

538 :デフォルトの名無しさん:02/12/16 23:43
ダブルクリックをするとき、
1度目をクリックしてから2度目をクリックするまでに
ダブルクリックとみなされるポインタ移動量の許容範囲を知りたいのですが、
調べることのできる関数ってないですか?

539 :デフォルトの名無しさん:02/12/16 23:46
>>538
GetSystemMetrics()

540 :デフォルトの名無しさん:02/12/17 01:08
>>534
ペンもブラシも、デバイスコンテキストに選択したままだと削除できんから。「最初に選択されていたペン」「最初に選択されていたブラシ」を選択し直せば、選択解除される。>>535も参照

541 :デフォルトの名無しさん:02/12/17 05:50
Win32APIはフリーソフトですか?
どこでダウンロードできますか?
教えてください

542 :デフォルトの名無しさん:02/12/17 06:00
ダウンロードでも何でも貴方の脳内でお好きなだけどうぞ。

543 :538:02/12/17 07:57
>539
ありがとう!
わかりました!

544 :デフォルトの名無しさん:02/12/17 10:54
>>541
MXにwindowsっていうのがあるからそれ落とせ


545 :デフォルトの名無しさん:02/12/17 14:04
ExcelのVBAを使って、IE(HTMLページ)上のドロップダウンリストの
各アイテムの文字列を取得しようとしたところうまくいきませんでした。

通常のアプリケーションにあるドロップダウンの場合には、正しく
取得できるのですが、IEのドロップダウンだと文字化けしたような
ものが返ってきます。

以下のようにSendMessage()で取得しようとしています。
SendMessage hWnd, CB_GETLBTEXT, idx, str

hWndはドロップダウンのハンドル、idxは取得したいアイテムの
インデックスを指定しています。

ドロップダウンは以下のような<SELECT>タグでできるやつのことです。

<select>
<option>abc</option>
<option>def</option>
<option>ghi</option>
</select>

IE上のドロップダウンの文字列を取得する方法をご存知の方、よろしく
お願いします。


546 :デフォルトの名無しさん:02/12/17 15:36
IEのドロップダウンはウィドウではないが
hWndはどこから湧いてきたんだ?

547 :545:02/12/17 16:09
FindWindowExです。
クラス名はInternet Explorer_TridentCmboBxというものみたいです。
よろしくお願いします。


548 :デフォルトの名無しさん:02/12/17 19:26
あれはhWnd持ってないはず

549 :デフォルトの名無しさん:02/12/17 20:50
>>544
ありがとうございました
ところで、Win32APIは何をするソフトなのでしょうか?
お願いします

550 :デフォルトの名無しさん:02/12/17 20:53
>>545
HTML取得してあるんだったらHTMLから取得したほうが早くないかね。

551 :デフォルトの名無しさん:02/12/18 01:32
TreeView の表示フォントを変更するにはどうしたらよい?

552 :デフォルトの名無しさん:02/12/18 01:43
>549
544を本気にしちゃダメ。
というか、Win32APIはソフトの名前じゃないよ。
http://www.wdic.org/?word=Win32API+%3ATECH



553 :デフォルトの名無しさん:02/12/18 02:29
Win82API に、非公開ファンクションとして、IsSheAVirgin というものが
あるということがわかりました。

戻り値は BOOL ということまでわかったのですが、引数がわかりません。

どなたか教えて下さい。おながいします。

554 :デフォルトの名無しさん:02/12/18 02:33
やっぱ自分でおもしろいと思ってるからageてるんだろうな

555 :デフォルトの名無しさん:02/12/18 02:33
( ゚д゚)ポカーン

556 :デフォルトの名無しさん:02/12/18 02:39
痛々しいな

557 :デフォルトの名無しさん:02/12/18 03:02
>>553-556 (・∀・)ジサクジエンデシタ

558 :デフォルトの名無しさん:02/12/18 08:25
何だ、馬鹿の国から馬鹿を宣伝しに来た馬鹿か?

559 :デフォルトの名無しさん:02/12/18 08:41
>>558
おいおい。失礼なこと言うな。
あちらではバカは崇拝の対象なんだから。
郷に入られてもあちらの郷を知る努力くらいしてやれ。

560 :デフォルトの名無しさん:02/12/18 08:43
馬鹿の国から出て来た時点で、馬鹿の方が郷に従うべし。

561 :名無し@沢村:02/12/18 09:40
>>540
すまんス。
「ペンもブラシも、デバイスコンテキストに選択したままだと削除できんから。「最初に選択されていたペン」「最初に選択されていたブラシ」を選択し直せば」の意味がわからんス。
ちなみに、私がやってみたのは、
ペン、ブラシの作成は、
void CreatePen_Brush()//ペンとブラシを作成
{
hBrush=CreateSolidBrush(RGB(255,255,255));
hBrush2=CreateSolidBrush(RGB(192,192,192));
hPen=CreatePen(PS_SOLID,1,RGB(192,192,192));
hPen2=CreatePen(PS_SOLID,1,RGB(0,192,0));
hPen3=CreatePen(PS_SOLID,1,RGB(255,0,0));
hPen4=CreatePen(PS_SOLID,1,RGB(0,0,0));
}
の中で行ない、
描画でSelectObject(hMemDC,hPen2);みたくデバイスコンテキストにhMemDCを選択してるから、
削除は、
void DeletePen_Brush()//ペンとブラシを削除
{
if(hBrush)DeleteObject(SelectObject(hMemDC,hBrush));//ブラシ削除
if(hBrush2)DeleteObject(SelectObject(hMemDC,hBrush2));//ブラシ削除
if(hPen)DeleteObject(SelectObject(hMemDC,hPen));//ペン1削除
if(hPen2)DeleteObject(SelectObject(hMemDC,hPen2));//ペン2削除
if(hPen3)DeleteObject(SelectObject(hMemDC,hPen3));//ペン3削除
if(hPen4)DeleteObject(SelectObject(hMemDC,hPen4));//ペン3削除
}
でいいのですか?

562 :デフォルトの名無しさん:02/12/18 09:42
値追うの面倒だからもしかしたらあってるかもしれんがそのやり方、なんか妙だぞ?


563 :名無し@沢村:02/12/18 09:47
ただリソースメーターを起動してみたところ、これでもGDIリソースとシステムリソースがどんどん減るっス。

564 :名無し@沢村:02/12/18 09:49
ただ画面から色が出なくなることはほとんどなくなったっス。
でもリソースの減り方が気になるっス…。

565 :デフォルトの名無しさん:02/12/18 09:49
>>563
さて、結局どのGDIリソースが解放されてないのか追ってみよう!俺は嫌だ。


566 :名無し@沢村:02/12/18 09:52
>>565
どのGDIリソースが解放されてないのかはリソースメーターではわからないのですか?
リソースメーターに減っているリソースを特定するオプションはついていないのですか?
またフリーソフトでどのGDIリソースが解放されてないのか調べることができるのはありますか?

567 :デフォルトの名無しさん:02/12/18 09:54
>>566
お前の挙げたコードの時点で明らかにおかしいんだから初心者本なりリファレンスなり見て書き直せ。

568 :デフォルトの名無しさん:02/12/18 10:00
沢村氏ね

569 :デフォルトの名無しさん:02/12/18 10:01
hOldPen=SelectObject(hMemDC,hPen);

       :

SelectObject(hMemDC,hOldPen);
DeleteDC(hMemDC);

リファレンス嫁


570 :名無し@沢村:02/12/18 10:15
>>569
hOldPenは削除しなくてもいいのですか?

571 :デフォルトの名無しさん:02/12/18 10:19
>>570
するに決まっている

572 :名無し@沢村:02/12/18 10:20
>>569
hOldPen=SelectObject(hMemDC,hPen);
hOldPen=SelectObject(hMemDC,hPen2);
hOldPen=SelectObject(hMemDC,hPen3);        :

SelectObject(hMemDC,hOldPen);
DeleteDC(hMemDC);
ですか?
それとも、
hOldPen=SelectObject(hMemDC,hPen);
hOldPen2=SelectObject(hMemDC,hPen2);
hOldPen3=SelectObject(hMemDC,hPen3);        :

SelectObject(hMemDC,hOldPen);
SelectObject(hMemDC,hOldPen2);
SelectObject(hMemDC,hOldPen3);
DeleteDC(hMemDC);
ですか?

573 :デフォルトの名無しさん:02/12/18 10:21
前者は意味ないだろう…

574 :名無し@沢村:02/12/18 10:23
>>571
SelectObject(hMemDC,hOldPen);
DeleteDC(hMemDC);
DeleteObjectC(hOldPen);
ですか?
それとも、
SelectObject(hMemDC,hOldPen);
DeleteObjectC(hOldPen);
DeleteDC(hMemDC);
ですか?



575 :デフォルトの名無しさん:02/12/18 10:25
>>574
つぅかペン切り替えになぜDCを破棄する。

576 :名無し@沢村:02/12/18 10:25
あ、わかった。
hOldPen=SelectObject(hMemDC,hPen);
hOldPen2=SelectObject(hMemDC,hPen2);
hOldPen3=SelectObject(hMemDC,hPen3);        :

SelectObject(hMemDC,hOldPen);
DeleteObjectC(hOldPen);
SelectObject(hMemDC,hOldPen2);
DeleteObjectC(hOldPen2);
SelectObject(hMemDC,hOldPen3);
DeleteObjectC(hOldPen3);
DeleteDC(hMemDC);
だね〜。違う?

577 :デフォルトの名無しさん:02/12/18 10:26
>>576
hOldPen=SelectObject(hMemDC,hPen);
hOldPen2=SelectObject(hMemDC,hPen2);
hOldPen3=SelectObject(hMemDC,hPen3);   


わかってない。

578 :デフォルトの名無しさん:02/12/18 10:27
CreateDC→CreatePenならDeletePen→DeleteDC
CreatePen→CreateDCならDeleteDC→DeletePen

作成した順とは逆に開放するのが望ましい




579 :デフォルトの名無しさん:02/12/18 10:28
>>576
Pen切り替えすぎだろう…
Pen3しか生きてない

580 :デフォルトの名無しさん:02/12/18 10:31
沢村様専用スレはここですか

581 :名無し@沢村:02/12/18 10:34
え〜と皆々様方、まとめますとですね〜♪
hPenやhPen2やhPen3は描画関数の中で破棄する。
DCは描画関数の中で破棄すると再描画されなくなるので(というのは複数の関数で使うためグローバルにして関数の外でGETしているため)
最後にWM_DESTROYメッセージの中で破棄している。
その際、最初に選択されていたDCに戻すためhOldPenというのをわざとつくって、SelectObject(hMemDC,hOldPen3);でDCを最初に戻したあと、DeleteDC(hMemDC);
でDCを破棄する…と、まあこんな感じでいいのですか?


582 :デフォルトの名無しさん:02/12/18 10:35
Yes.




-----------------------------------------------
CR


583 :デフォルトの名無しさん:02/12/18 10:38
main(argv,argc)のargv[0]と同じ文字列(exeのフルパス)を
取得するAPIはありますか?

584 :デフォルトの名無しさん:02/12/18 10:39
沢村よ、お主はDCがそもそも何なのかがわかってないのと違うか?
いっぺんCreateXXX,SelectObject,DeleteObjectが何をしているのかを
図解説明してみてはどうだ,自分に対してでいいから
脳内で説明ついてないと>>576のような変なコードを書くことになる
面倒だろうがちゃんと紙に書いてみろ,断片的なアドバイスより為になるぞ

585 :デフォルトの名無しさん:02/12/18 10:39
>>583
>main(argv,argc)

おかしいぞ。後、winmain()の引数に入ってる。

586 :デフォルトの名無しさん:02/12/18 10:42
>>583
main(argc,argv)な

GetModuleFileName

587 :デフォルトの名無しさん:02/12/18 10:42
> DC

ダ・カーポでつか?
直流電源でつか?

588 :名無し@沢村:02/12/18 10:43
>>583
winmain()の引数のLPSTR lpszCmdLineというのが、main(argv,argc)のargv[0]と同じ文字列(exeのフルパス)を
取得するAPですよ。まかせなさーいって!!

589 :デフォルトの名無しさん:02/12/18 10:43
>>587
何を煽ってるか知らんがdevice context WindowsAPI使いなら常識かと。

590 :デフォルトの名無しさん:02/12/18 10:44
>>587
紀元後の事だって

591 :デフォルトの名無しさん:02/12/18 10:44
>>588
引数をAPIとか言うなってw

592 :デフォルトの名無しさん:02/12/18 10:49
>>591
騙されるな。
AP と言っている。

593 :デフォルトの名無しさん:02/12/18 10:50
> lpszCmdLineというのが、main(argv,argc)のargv[0]と同じ文字列

(゚Д゚)ハァ?

594 :デフォルトの名無しさん:02/12/18 10:50
>>592
・・・アプリケーション?

どうでもいいが質問者はMFC使ってるに3hThread

595 :デフォルトの名無しさん:02/12/18 10:51
アクセスポイント?

---
argv[0] != LPSTR lpszCmdLine


596 :名無し@沢村:02/12/18 10:52
>>584
わかってないよ。そもそも俺はプログラマーではないからな。それはおろか学校でも習ってないし、情報処理技術者の資格すら持たんよ。
完全なド素人だよ。本ちょっと読んで覚えかじっただけ!!知らなくて当たり前だろ!!
だからもっと親切に教えてくれよな?
まあそんな俺でも昔某社のプログラムコンテストで1位になったことがあるんだよ。すごいだろ?

597 :デフォルトの名無しさん:02/12/18 10:52
>>595
ふと思ったけどじゃあコマンドラインオプションって自分で切り出さないといけないわけ?


598 :デフォルトの名無しさん:02/12/18 10:53
> どうでもいいが質問者はMFC使ってるに3hThread

どうしてそう思ったのか訊きたいけど

599 :デフォルトの名無しさん:02/12/18 10:54
Iは書いてないな。
でもAPってなんの意味だ?

600 :デフォルトの名無しさん:02/12/18 10:54
沢村最高〜!!

601 :デフォルトの名無しさん:02/12/18 10:55
PENの問題は解決したのか・・・?

602 :デフォルトの名無しさん:02/12/18 10:55
>>597
その通り。
ただし、NT には CommandLineToArgvW() がある。

603 :デフォルトの名無しさん:02/12/18 10:55
>>597
他は知らないけど俺は切り出してargv[]につめこんで
アダプタ通してアクセスしてる


604 :デフォルトの名無しさん:02/12/18 10:56
>>602
勉強になりました。

605 :デフォルトの名無しさん:02/12/18 10:56
>>603
どもども。一手間多いですなw

606 :デフォルトの名無しさん:02/12/18 10:56
> だからもっと親切に教えてくれよな?
> まあそんな俺でも昔某社のプログラムコンテストで1位になったことがあるんだよ。すごいだろ?

あほらし。

607 :名無し@沢村:02/12/18 10:58
>>584
まあ昔ちょっとプログラマーやってたことはあるよ。
経営者が20代の何も知らんやつで社員数4〜5名のちいさな会社でコンピュータのこと何も知らんやつばかりだったから昔某社のプログラムコンテストで1位になったこと言うと、間違ってプログラマーで採用してくれたんだ。
その会社はすぐつぶれたけどね。
はっきり言って俺はプログラムの完全なド素人だね!!

608 :デフォルトの名無しさん:02/12/18 11:00
> 完全なド素人だよ。本ちょっと読んで覚えかじっただけ!!知らなくて当たり前だろ!!

知らない事が当たり前かどうかは知らないが、知らない事があったら勉強しようとするのが
当たり前。

609 :デフォルトの名無しさん:02/12/18 11:00
> はっきり言って俺はプログラムの完全なド素人だね!!

いばるな。

610 :デフォルトの名無しさん:02/12/18 11:01
沢村に訊く。
馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿とはお前の事か?

611 :デフォルトの名無しさん:02/12/18 11:03
>>610
バカは崇拝の対象だ。

612 :名無し@沢村:02/12/18 11:05
>>608
知らない事があったら2chで聞いて勉強するの。
それも立派な方法。

613 :デフォルトの名無しさん:02/12/18 11:07
>>612
なぜ2ch?
周りにはいないのかい?

614 :デフォルトの名無しさん:02/12/18 11:08
まともな解答がつくか怪しい方法を立派と呼べるかは疑問。
とりわけ、そのように人の労力にあて込んで自助努力をしない人の場合では。

615 :デフォルトの名無しさん:02/12/18 11:08
>>611
またお前かw

616 :名無し@沢村:02/12/18 11:09
俺はプログラムの素人だぜ。
プログラマーと知り合うチャンスはなかったよ。
プログラマーに誰一人知り合いはいねーよ。

617 :デフォルトの名無しさん:02/12/18 11:10
>>615
オマエモナー

618 :名無し@沢村:02/12/18 11:12
>>614
俺は結構努力をするほうだぜ。
そのような努力があったから、昔某社のプログラムコンテストで優勝できたのよ。

619 :デフォルトの名無しさん:02/12/18 11:14
じゃ自分で調べて下さい

620 :デフォルトの名無しさん:02/12/18 11:15
>>618
何を作ったのか知りたい・・・

621 :デフォルトの名無しさん:02/12/18 11:16
584 に対して 596 のようなレスを返した人間の吐いたセリフとは思えんな。

622 :デフォルトの名無しさん:02/12/18 11:18
>>618
教えて君が立派と言っているおまえが努力家なわけねぇだろ
あの程度の質問なら普通、猫でもROMってくるもんだぜ

623 :デフォルトの名無しさん:02/12/18 11:19
つーか、沢村はまず腹筋 100 回。
話はそれからだ。

624 :デフォルトの名無しさん:02/12/18 11:19
> 猫でもROMってくる

意味がちょっとおかしいと思うんですけど

625 :デフォルトの名無しさん:02/12/18 11:21
お前ら!!
沢村の気持ちも考えろよ!!

沢村はな!!
沢村は・・・

・・・すまん、漏れもよくわからん

626 :デフォルトの名無しさん:02/12/18 11:23
(´-`).。oO(とうとうこんな日が来たか。。。)

627 :デフォルトの名無しさん:02/12/18 11:24
沢村ってポケモンじゃなかったっけ?
www.nintendo.co.jp/n01/n64/software/nus_p_nalj/smash/Pokemon.html


628 :デフォルトの名無しさん:02/12/18 11:25
とびげり?

629 :デフォルトの名無しさん:02/12/18 11:26
>>627
そうだ。ダウソしたポケモンII。プレイしかけだったんだ。思い出した。ありがとう。

(でも、昔のSAGA3の様な新鮮さが無いのはなぜだろう・・・。)○。

630 :デフォルトの名無しさん:02/12/18 11:26
飛び下痢?



イ、イャアァァァァァァァ・・・

631 :584:02/12/18 11:28
>>596
それは漏れも同じだ
Win32は社会人になってから同僚と一緒に憶えたし
情報処理技術者の資格取るときに勉強したこともWin32とは全然関係なかった
本を読みかじって覚えたのも同じさ

漏れなりに親切に教えたつもりだが?
ちゃんと紙に書けと言っただろ
それは漏れ自身がWin32を覚えるときの鍵になったことだからだ
大学ノート数冊使い切るくらい書きまくれ

腕利きのプロも元はど素人
断片的な質問よりどうやって這い上がったか訊いてみろ

632 :デフォルトの名無しさん:02/12/18 11:30
> 断片的な質問よりどうやって這い上がったか訊いてみろ

変な誘導は止めてくれ
むしろ板の平和の為に、去ってくれるように仕向けていただけると

633 :デフォルトの名無しさん:02/12/18 11:33
逃げろ

634 :584:02/12/18 11:38
>>632
変な誘導とは何のことだ
コテハン叩きの邪魔がイヤなのか

635 :デフォルトの名無しさん:02/12/18 11:40
>>634
だってスレ違いだろ

636 :584:02/12/18 11:40
>>635
何が

637 :デフォルトの名無しさん:02/12/18 11:42
>>636
沢村が聞き込みを始める恐れあり
>>636
沢村が聞き込みを始める恐れあり

ここはWin32API 質問箱

638 :デフォルトの名無しさん:02/12/18 11:44
584は沢村にWin32APIの事を教えていたような・・・

639 :デフォルトの名無しさん:02/12/18 11:45
ここが噂の沢村スレですか

640 :デフォルトの名無しさん:02/12/18 11:59
ついに本性を表したか教えてクンが

641 :デフォルトの名無しさん:02/12/18 12:57
>>584
一人の教えて君にスレ占領されるのはいかがなものか

>>551
カスタムドローしる


642 :デフォルトの名無しさん:02/12/18 13:27
>>ALL
つーか沢村はネタだろ・・・

643 :デフォルトの名無しさん:02/12/18 15:40
最初から放置しておけばいいものを。
これまでもこのスレや他のスレで散々奴の醜態を見てきただろうに。
ここまでくると教えてやろうと思ってる奴も相当痛い。無駄な努力はよせ。

644 :デフォルトの名無しさん:02/12/18 21:43
つーか、petzold本嫁。以上。

645 :戸塚ヨット:02/12/19 09:56
自分は初心者なんですが、
みなさんはwin32でくむとき本か何かをそばに置いてくむんですか?
それともあの膨大な量の関数やら構造体やらすべて覚えていらっしゃるのですか?

646 :デフォルトの名無しさん:02/12/19 10:32
>>645
Win32自体については本ではなくMSDNライブラリ(VCヘルプ)で見てる
机の上の紙類は,作ろうとしてるアプリの内容に関わる資料だ

647 :デフォルトの名無しさん:02/12/19 10:46
Win32 を一言で表すと?

648 :デフォルトの名無しさん:02/12/19 11:06
>>647
環境

649 :デフォルトの名無しさん:02/12/19 11:12
>>647
ぬるぽ

650 :デフォルトの名無しさん:02/12/19 13:06
>>645
Windowsプログラム初心者のときはペゾルト本見てた

651 :デフォルトの名無しさん:02/12/19 13:13
>>645
MSDN

652 :デフォルトの名無しさん:02/12/19 17:36
基本はMSDNをみながら、どうしても分からなければ参考になりそうなものを検索
間違ってもBBSなんかで質問はしない

653 :デフォルトの名無しさん:02/12/19 17:55
>>652
そうだな
たまに珍しい話を見かけて
それについてMSDNを調べることはあるが

654 :デフォルトの名無しさん:02/12/19 18:36
DialogBoxでリソースからモードレスダイアログ作って、
WM_INITDIALOG 時に、ダイアログ上にある Edit にテキストをセットすると、
全て選択された状態で表示されるんですが
選択範囲を解除するには、どのタイミングで EM_SETSEL を
送ればいいんでしょうか?

WM_INITDIALOG で送ると上手くいかないっぽいです。

655 :デフォルトの名無しさん:02/12/19 18:42
質問です。

SetWidowLong()でスタイル変更した後、SetWindowPos() で
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED
を指定してるのですが、再描画されません。
(その後、ウィンドウをつまんで移動させたりすると再描画されます)
下がその部分のコードなのですが、なにか足りないものがあるのでしょうか?

 SetWindowLong( GetDlgItem(hDlg, IDC_UNLOADHOOK), GWL_STYLE, nLastLong | WS_DISABLED ) ;
 SetWindowPos( hDlg, NULL, 0, 0, 0, 0,
   SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );




656 :654:02/12/19 18:48
すいません、自己解決しました。
0を返さないといけなかったようでつ。

657 :デフォルトの名無しさん:02/12/19 19:47
>>655
再描画の処理が足りません…

658 :名無し@沢村:02/12/19 20:25
皆々様方〜、教えてくだされ〜♪
それはトラックバーだが、現在3つのトラックバーとその他いろいろなコントロールをつけているのよ。
で、その3つのトラックバーのうちの一つだが、ウインドウを最小かしてもとにもどしたり、ファイルを開くダイアログを開いてその中のフォルダを開いたりすると消えるのよ。
もろもろのコントロールの中で、その3つのトラックバーのうちの一つだけが消えるのよ。
ためしに3つのトラックバーの順序を入れ替えてみたら消える位置に入れ替えたトラックバーがやはり消えた…。
最初FillRectで画面全体を塗りつぶしていたので再描画のとき下に隠れて描画されていないのかと思ったが、
手さぐりでいくらクリックしても反応ないのでどうもトラックバー自体がなくなってるみたいです…。
皆々様方〜、どうすればこれが直るのですか?教えてくだされ〜皆々様方〜♪

659 :デフォルトの名無しさん:02/12/19 20:37
↑相手にしない

660 :デフォルトの名無しさん:02/12/19 21:56
(・∀・) ニヤニヤ

661 :デフォルトの名無しさん:02/12/19 22:19
>>641
ありがとやした。
ところで、TreeView の各アイテム毎に指定する必要がない場合でも
個々にカスタムドローしないといけないもんなんでしょか。
なんか方法がありそうな気はするんですがわからんちんです。

662 :デフォルトの名無しさん:02/12/19 23:31
(´∀` )エヘヘ VB初心者質問スレ Part19
http://pc3.2ch.net/test/read.cgi/tech/1039859691/
から移動してきました。

Windows2000でファイルシステムがNTFSの場合、
txtやExcel、JPG等のファイルのプロパティ⇒「概要」で
作成者や、タイトル、コメント等を入力できるんですが、
その入力した内容を得るには
なんていうAPI関数使えばいいですか?

日付、ファイルサイズの取得はできたですがそれ以降わかりません

ExtendedProperty
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/shellfolderitem/extendedproperty.asp
を使えばできそうな気がするんですが、いまいちわかりません
よろしくお願いします

663 :デフォルトの名無しさん:02/12/19 23:35
C++スレよりやってまいりましたっ

C++で作成したアプリケーションについてですが
Spy++とかで確認することができる
クラス名があるじゃないですか。
あれはバイナリ(exe)にはどんな風にして格納されてるんでしょうか?

やりたいことはメインウィンドウのクラス名を
バイナリエディタで書き換えたいのです。

よろしくおながいします(´・ω・`)

664 :五右衛門:02/12/19 23:36
沢村はリソース問題は解決したのかはっきりすべし。
その返答次第では斬る。

665 :デフォルトの名無しさん:02/12/19 23:39
>>661
SETFONTじゃ変わらなかったっけ?

666 :デフォルトの名無しさん:02/12/19 23:39
>>664
トリップも付けてないし途中で出現した奴は騙り荒らしだろ

667 :デフォルトの名無しさん:02/12/19 23:51
>>663
単なる静的文字列として格納されているかもしれないし
リソースとして格納されているかもしれないし
それはアプリの実装次第。

668 :デフォルトの名無しさん:02/12/20 00:03
>>663
んなもん書き換えてどーすんだ?

669 :名無し@沢村:02/12/20 00:22
>>664
リソース問題はまだ解決しとらんよ。
長時間使ってみることがないので、いまのところ問題は生じとらんので、とりあえずほっといて、次をやってるところ…。

670 :デフォルトの名無しさん:02/12/20 00:59
沢村は斬られますた

671 :デフォルトの名無しさん:02/12/20 01:08
また、つまらぬものを…

672 :次元:02/12/20 02:04
つまり、みんなの善意は無に帰した訳だ。
そりゃぁ、五右衛門も我慢ならねぇわな。
おいルパン。次行こうぜ。

673 :デフォルトの名無しさん:02/12/20 03:43
>>668
えっとですね、そのアプリは多重起動を防止しているんですが、
おそらく、ウィンドウクラス名でチェックしてるんではないかなと思って
それを解除したかったのです。
ちなみにタイトルのキャプションは見てないようでした。

よろしくお願いします。

674 :デフォルトの名無しさん:02/12/20 03:45
>>667
アプリの実装しだいというのはどういうことでしょうか?
ちなみに静的文字列ではないようでした。
バイナリエディタで検索してみたのですが、見つからなかったので・・・。

675 :デフォルトの名無しさん:02/12/20 04:55
>>673
Mutex とかは?

>>674
本当?
それが UNICODE アプリだったりした場合は UNICODE で格納されているけど。

676 :デフォルトの名無しさん:02/12/20 06:16
>>674
普通はミューテックスを使うと思う
圧縮されいることもあったりする

677 :デフォルトの名無しさん:02/12/20 06:51
>>662
http://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.asp
のサンプルコード1


678 :デフォルトの名無しさん:02/12/20 15:31
>>675
StirlingのコードセットをUnicodeにかえて
検索してみましたが発見できませんでした・・。

>>675,>>676
・Mutexについて
もしMutexを使用していた場合、
対象バイナリを変更することによって
多重起動を可能にすることは可能なのでしょうか?

以前・・・かなり昔ですが・・・多重起動が禁止されている
ソフトを多重起動可能にする(100%ではない)
ユーティリティがあったのですが
どうやってやっていたのか不思議です。。。
バイナリが2バイトだけ直接書き換えられていました。
検索してももう見つからなかったです。

679 :デフォルトの名無しさん:02/12/20 16:09
起動チェック用Mutexの作成失敗時における
条件分岐を潰すだけだろ。

680 :デフォルトの名無しさん:02/12/20 16:43
それか、Mutexを識別する文字列をちょこっとだけ変えるとか。
でも、プログラム勝手に変えちゃダメだぜ。カタギの人なら。

681 :デフォルトの名無しさん:02/12/20 17:27
そうなん? ライセンスで別途禁止されていなければ
プログラムの著作物に関しては
電子計算機においてより効果的に利用し得るようにするために
必要な改変は認められるって例外規定があったような

682 :名無し@沢村:02/12/20 18:45
皆々様方〜、リソースのちゃんとした開放について考えてるうちふと思ったんだが、
DeleteObject(hPen);
のかわりに、
Zeromemory(hPen,sizeof(hPen));
っのは使えるの?なんかこっちのほうがちゃんと開放されそうな印象だが…。

683 :デフォルトの名無しさん:02/12/20 19:11
ハンドルってそういうことが出来ない様に抽象化されたものじゃないの?
HBITMAPやHFONTも4バイトで済むとお思いか?


684 :デフォルトの名無しさん:02/12/20 19:21
>>682
Cを一から勉強することをオススメする。

ちなみにあなたの言っていることは、
「char *x=malloc(128);と確保したメモリを、
free(x);のかわりにx=0;にした方がいいのでは?」
という質問とあまり変わらなかったりする。

685 :精神科医:02/12/20 19:26
DeleteObject==ZeroMemoryとなぜ思ったのですか?
Deleteが付けばメモリクリアする物だと思ってるのですか?
先生の薬をちゃんと飲みましたか?

686 :デフォルトの名無しさん:02/12/20 19:30
>>679
そのユーティリティは対象アプリのパスを渡すだけで
バイナリを自動的に修正していました。
外部から条件分岐の場所を判別することって
できるものなのでしょうか?

>>680
Mutexを識別する文字列はどのようにして
格納されているのでしょうか?
VC++でビルドされたものと限定しても構いません。
これがわかればそこを数バイト書き換えれば
うまくいきそうですね。

687 :名無し@沢村:02/12/20 19:44
>>684>>685
リソースを開放することと、メモリをクリアすることは違うのですか?
リソースって結局メモリのことだよね?
するとクリアと開放の違い…?
そもそも開放とは何なのですか?

688 :デフォルトの名無しさん:02/12/20 19:49
>>687
根本的に判ってない。
>リソースって結局メモリのことだよね?
違う。「リソース=資源」。メモリに限らず、デバイスとかもリソース。
リソースの確保とは、「これから漏れが使うから、他のヤシに使わせないように汁!」で、
リソースの開放とは、「使い終わったから、他のヤシに使わせて良いよん」である。どうやって
確保するかは処理系によって変わる。

689 :688:02/12/20 19:54
って、WinAPIのスレだった…「どうやって…」以降は蛇足だな。

690 :名無し@沢村:02/12/20 19:59
>>688
他のヤシとは他のソフトのこと?
hDC=GetDC(hwnd);
でデバイスhDCを確保した場合、その前にhDCを使っているソフトがあるということ?
hDCをhxxxxyyyyDCと恐らく誰も使わない名前にした場合も、他にもhxxxxyyyyDCを使っているソフトがあるから、
他のヤシに使わせないように汁、だったり、他のヤシに使わせて良いよん、だったりするわけ?

691 :名無し@沢村:02/12/20 20:07
また、プログラムの中でリソースを確保する部分はいくつかに決まっているから、
最初リソースを確保したら、最初確保した分だけリソースが減ってあとは減らないはずなのに、
使っているうちどんどん減っていくのはどうして?

692 :デフォルトの名無しさん:02/12/20 20:09
>>691
(゚Д゚) ハァ?

693 :名無し@沢村:02/12/20 20:15
あ、わかった。関数の中でリソースを確保したり開放しているからだ!
だからちゃんとリソースが開放されていないと、関数を呼び出した回数だけどんどんリソースを確保していくことになるから、リソースがどんどん減っていくんだ!!
だとすると…解決方法がわかったぞ!!
リソースをグローバルにして確保と開放を関数の外のプログラムの最初と最後の部分で1回だけやればいいんだ!!
そうするとちゃんと開放されなくてもリソースはどんどん減ることはない…と思うがどうですか?

694 :デフォルトの名無しさん:02/12/20 20:20
( ´,_ゝ`) プ

695 :デフォルトの名無しさん:02/12/20 20:24
もはや「Win32API 質問箱」ではないな


696 :デフォルトの名無しさん:02/12/20 20:28
>>沢村

問題に対する対処方法が間違っている

「こうじゃないかな」
という解決方法を思いついた時はまず自分で確かめろ

確かに答えを知っている人に答えを教えてもらった方が
楽だし速いかもしれないが、この方法では近いうちに壁にぶつかる

あと、ここは「Win32API 質問箱」であって「沢村質問箱」じゃない


697 :デフォルトの名無しさん:02/12/20 20:34
>>686
CreateMutexかGetLastErrorをフックしたらいけるかな。

698 :デフォルトの名無しさん:02/12/20 20:36
>>639
沢村君・・・
まさか、ずいぶん前に君がレスしたリソースの解放について、
まだ解決してなかったのかい?


699 :698:02/12/20 20:37
間違いた。
>693へのレス

700 :名無し@沢村:02/12/20 20:40
>>698
もう解決したよ。
リソースの開放の仕方はいまいちわからないが、プログラムの初めでリソースを1度だけ確保し、終わりに開放すれば、リソースがどんどん減ることはないということがわかったよ。
とりあえず、これで充分だよ♪

701 :デフォルトの名無しさん:02/12/20 20:47
if(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
これってどういう意味ですか?
何を調べてるのか教えてください。

702 :デフォルトの名無しさん:02/12/20 20:47
MFCアプリの場合は、ウィンドウクラス名は動的に生成されているがな

703 :デフォルトの名無しさん:02/12/20 20:47
「お前が何を調べているのか」教えろ

704 :名無し@沢村:02/12/20 20:53
>>701
君、y.dwFileAttributesが何なのかはよくわからないが、恐らく処理系で定義されているファイル属性についての構造体だろう。
またFILE_ATTRIBUTE_DIRECTORYというのは、言葉の意味から「ファイル属性はフォルダです」という直訳が出てくるよ、君!!
そうすると & は論理and演算子だから、「もしy.dwFileAttributesが「ファイル属性はフォルダです」ならば」という直訳が出てくるよ。
そうすると漠然とながら意味がわかるだろ?どうかね、君!?

705 :名無し@沢村:02/12/20 21:21
>>701
君、お礼は!?君!?
いいかいくだいていうと、FILE_ATTRIBUTE_DIRECTORYは多分ファイル属性を表わす定数なんだよ。
何とか.hの中で
#define FILE_ATTRIBUTE_DIRECTORY 1
みたく定義されているはずなんだ。
また恐らく他にも、
FILE_ATTRIBUTE_xxxとか
FILE_ATTRIBUTE_yyyとか
FILE_ATTRIBUTE_のつく定数がたくさん定義されているはずなんだ。
そして、y.dwFileAttributesも多分ファイル属性についての構造体メンバで、
if(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
以前にy.dwFileAttributesにFILE_ATTRIBUTE_のいずれかが代入されているはずなんだよ。
だからif(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ はどのFILE_ATTRIBUTE_が代入されているかを調べているのだと思うよ。
というよりFILE_ATTRIBUTE_DIRECTORYが代入されているかどうかを調べていると言ったほうがいいだろうね。
そして、y.dwFileAttributes かつ FILE_ATTRIBUTE_DIRECTORYが真ならば、
つまりy.dwFileAttributes が FILE_ATTRIBUTE_DIRECTORYかどうかを調べているというわけだよ。
これならば馬鹿でもわかるよね?
君、俺はプログラムのド素人なんだよ!!ビックリしたかい?




706 :デフォルトの名無しさん:02/12/20 21:23
お礼を強要するんなら帰れ

707 :デフォルトの名無しさん:02/12/20 21:24
レスが飛んでる…
沢村?w
NGワードにしたら気分爽快♪

708 :デフォルトの名無しさん:02/12/20 21:25
みんなよくネタ荒らしに付き合ってられるほど暇だよな

709 :デフォルトの名無しさん:02/12/20 21:27
>>701の質問は(゚Д゚)ハァ? と思ったが、沢村に回答されて
正直>>701が哀れに思ってきたのは漏れだけだろうか…

710 :デフォルトの名無しさん:02/12/20 21:28
>>709
安心しろ、俺もだ。

711 :デフォルトの名無しさん:02/12/20 21:29
>>704-705
どうもありがとうございました。
とりあえず、y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORYが真だと
ディレクトリだということですね。
なんとなく理解できました。そして、手元のソースも理解できました。


712 :デフォルトの名無しさん:02/12/20 21:29
沢村、その調子だ。俺は応援しているぞ!!

713 :デフォルトの名無しさん:02/12/20 21:30
沢村のジサクジエン…

714 :デフォルトの名無しさん:02/12/20 21:34
沢村ウザいなあ。
リアルなら嫌われ者の癖についてきたがるやつは
殴りつけて追っ払えるのにネット上じゃそうもいかん


715 :デフォルトの名無しさん:02/12/20 21:45
>なんとなく理解できました。
なんとなくかよ・・・

716 :デフォルトの名無しさん:02/12/20 22:00
リストビューでキー入力を無効にしたいのですが、どうしたらいいでしょうか。
デフォルトの動作だとキー入力があると、そのキーと同じ頭文字のところに
フォーカスが移動してしまいます。これをやめさせたいのです。
よろしくおねがいします。

717 :デフォルトの名無しさん:02/12/20 22:22
>>716
LVN_KEYDOWN


718 :デフォルトの名無しさん:02/12/20 22:41
>>717
ありがとうございます。
でも、それだと、キー入力に対する動作が追加できるだけで、
選択状態を変更されないようにはできないので、困っているんです。

719 :デフォルトの名無しさん:02/12/20 22:46
沢村に礼を言われたこと無いが。


720 :デフォルトの名無しさん:02/12/20 23:21
>>686
ひょっとしてそのユーティリティはWindows3.1用では???


721 :717:02/12/20 23:25
>>718
↓じゃだめ?

case WM_NOTIFY:
switch ( ((LPNMHDR)lp)->code )
{
case LVN_KEYDOWN:
return TRUE;
}
break;


722 :デフォルトの名無しさん:02/12/21 01:12
GDIに関して、質問したい事があります。


hDCに対して、3種類のペン、A,B,Cで描画するのですが、この時
SelectObjectで受け取る、変更前のオブジェクトを

HPEN prev;

prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, prev);
prev = (HPEN)SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, prev);
prev = (HPEN)SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);

のように、毎回新しいオブジェクトを使う前に元の状態に戻すべきですか?
それとも、

prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);

のように、最終的に元のオブジェクトに戻っていればOK?



723 :デフォルトの名無しさん:02/12/21 01:49
>>722
最終的に元に戻ってりゃOK。
関数内で描いてる場合、その関数を呼んだヤツにバレなきゃいいのさ…

724 :デフォルトの名無しさん:02/12/21 02:01
>>722
どちらでもよし。
てか、上しかダメなら「Select」なんて単語つかわんだろ。

むしろ1関数でしか使わないなら元に戻さなくてもよかったり…

725 :デフォルトの名無しさん:02/12/21 04:14
私の住んでいる地域では今日から小学校が冬休みです。

726 :デフォルトの名無しさん:02/12/21 04:20
こちらの地域では今日から工房以下すべて冬休みです。
おかげで通勤が楽になります。

727 :デフォルトの名無しさん:02/12/21 04:36
現在、会社からカキコしてますが何か?


728 :デフォルトの名無しさん:02/12/21 11:54
システム全体の通信送受信量を返すAPI教えていただけませんか?
そういうものがあるって話は聞いたのですが

729 :デフォルトの名無しさん:02/12/21 12:19
>>728
始めに断って置くが俺は解らない。
ところで、システム全体ってのはどういう意味なんだろう。
例えばネットワークカード2枚入っている場合はそれらの合計?
それともシステム内でパケットを飛ばしている場合はそれも含める?

730 :728:02/12/21 12:39
説明不足ですみません。
NICの合計通信量ということです。ローカル内での通信は抜きで。
多分用意されているのはそういうAPIかと思います。
送受信量をリアルタイムに表示するプログラムを作りたいのです。


731 :デフォルトの名無しさん:02/12/21 12:58
すみません、SDKプログラミング1ヶ月の初心者です。
いろいろ調べてみたのですが分かりませんでした。教えてください…

例えば、Outlook Express(6.0) のメールのリストを見ると、選択した
アイテムでも「送信者」より左側の部分は反転表示になっていませんよね。
このように、レポート形式のリストビューを、サブアイテム単位で
反転(選択)状態にするにはどうすればいいのでしょうか?

732 :デフォルトの名無しさん:02/12/21 13:13
>>730
Windowsのネットワークのプロパティを見れば出てくるから
方法はあると思うんだけれど…

ちょっと解らないです。面白そうだから調べてみようかな

>>731
俺はOutlook使ったことが無いのでわからないけれど、
直感的にカスタムコントロールを使ってる気がする。
spy++等でwindow classを調べてみるところから初めてみるといいかも。

733 :デフォルトの名無しさん:02/12/21 15:50
>>730
随分時間がかかったけど、大体わかりました。NetBIOSを使えば出来そうです。
#SNMPから調べていたためにいらぬ時間を取ってしまった
サンプルコード書いてみましょうか?

734 :728:02/12/21 15:56
>>733
おお!
どうもありがとうございます。
NetBIOSですか・・・
是非サンプルお願いします。


735 :デフォルトの名無しさん:02/12/21 16:06
>>734
サンプル書いたらsent/receive共に0になりますた(涙
netBios::ADAPTER_STATUSは使えない模様です。
もう少し調べてみよう…ぬか喜びさせてしまいスマソ

736 :デフォルトの名無しさん:02/12/21 17:07
GetIfEntry

dwInOctets; // octets received
dwOutOctets; // octets sent
じゃねーのか?

737 :デフォルトの名無しさん:02/12/21 17:15
随分長い間調べてしまった……

>>736
MSが表示しているのは、そこではなくてunicast packetsの方みたいです。
dwInUcastPkts; // unicast packets received
dwOutUcastPkts; // unicast packets sent

サンプル書いたので、適当に整形して読んでみてください。
なおエラー処理は一切やっていません。あしからず

#include <stdio.h>
#include <winsock2.h>
#include <iprtrmib.h>
int main(void){
HINSTANCE hIpHelpApi=LoadLibrary("iphlpapi.dll");
typedef DWORD (CALLBACK* T_GETIFTABLE)(PMIB_IFTABLE, PULONG, BOOL);
T_GETIFTABLE pfGetIfTable=(T_GETIFTABLE)GetProcAddress(hIpHelpApi,"GetIfTable");
char *buffer=NULL;DWORD buf_size=0;(*pfGetIfTable)((PMIB_IFTABLE)buffer,&buf_size,true);
buffer = (char*)malloc(buf_size);memset(buffer,0,buf_size);
(*pfGetIfTable)((PMIB_IFTABLE)buffer,&buf_size,true);
MIB_IFTABLE* mit=(MIB_IFTABLE*)buffer;
for(int i=0;i< (int)mit->dwNumEntries;i++) {MIB_IFROW* mir=(mit->table)+i;
printf("interface %d:%s\n",i,mir->bDescr);
printf("sent:%d/recv:%d\n\n",mir->dwOutUcastPkts+mir->dwOutNUcastPkts,mir->dwInUcastPkts);
}free(buffer);FreeLibrary(hIpHelpApi);return 0;}

738 :デフォルトの名無しさん:02/12/21 17:43
>>737
そこまで親切に書いていただけるとは・・・
2chでこんな優しくされたのは初めて(´д⊂)
まずはこのソースを解読せねば
本質的でない部分もわからとこけっこうありまして
大事な時間を割いて調べていただいて、本当にありがとうございました。


739 :デフォルトの名無しさん:02/12/21 17:54
>>732
お返事、どうもありがとうございます。
早速クラスを調べてみたら、
"SysListView32"ではなくて
"ATL:SysListView32"になっていました。
これは、やはり"SysListView32"に少し手を加えた
カスタムコントロールと見るのが妥当でしょうか。
勉強してまた出直してきます…

740 :デフォルトの名無しさん:02/12/21 19:52
CreateToolbarExでツールバー作るときに256色以上のビットマップを使ったら実行時にエラーが出るんだけど何で?

741 :デフォルトの名無しさん:02/12/21 20:08
>>740
あのさ、頼むから検索してから聞けよ
http://www.google.com/search?hl=ja&lr=&q=CreateToolbarEx+256

742 :名無し@沢村:02/12/21 20:34
>>722
prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);
とした後、
DeleteObject(hDC);とするのね。
hDCに対して選択されているObjectを元に戻して削除するのね。
それはわかったぞ!!
わからないのは、PenをDeleteObjectするときは、何をどう元にもどせばいいのですか?

743 :名無し@沢村:02/12/21 20:38
つまりhDCを削除するときは、hDCに対して選択されているペンを元にもどして削除する…と。
ではペンを削除するときは、ペンに対して選択されている何を元にもどして削除するのかが、わからないわけ。

744 :デフォルトの名無しさん:02/12/21 20:39
>>742
いや、 hDC は DeleteObject しないぞ。

745 :デフォルトの名無しさん:02/12/21 20:41
>>742
センスがない。諦めてDelphiでも使う方が絶対にいい

746 :名無し@沢村:02/12/21 20:42
>>744
いや、だからキスプリ。
つまりhDCをDeleteDCするときは、hDCに対して選択されているペンを元にもどして削除する…と。
ではペンをDEleteObjectするときは、ペンに対して選択されている何を元にもどして削除するのかが、わからないわけ。


747 :デフォルトの名無しさん:02/12/21 20:45
選択はずしたら DeleteObject で OK。

748 :名無し@沢村:02/12/21 20:49
>>747
いや、だからそれは、hDCをDeleteDCするときは、hDCに対して選択されているペンをはずしたらDeleteDCでもOK…と。
あ、hDCでもDeleteObjectしてOKなの?
ただ、ペンをDEleteObjectするときは、何をどう選択はずして削除するの?

749 :デフォルトの名無しさん:02/12/21 20:52
>>746
DeleteDCって滅多に使わんと思うが・・・まぁいい。
ペンがデバイスコンテキストから選択解除されてれば、いつでもそのペンを DeleteObject で削除できる。

750 :名無し@沢村:02/12/21 20:55
>>74
ペンがデバイスコンテキストから選択解除するということは、
ペンをSelectObjectで最初の選択に戻すことと同じなのですか、違うのですか?
また、そうすればペンを DeleteObjectできるのですか?
ではデバイスコンテキストを削除するときは、何をどう選択解除しなければならないのですか?

751 :デフォルトの名無しさん:02/12/21 20:57
AはPENで、BはBRUSHで、CはFONTという罠(ワラ

752 :名無し@沢村:02/12/21 20:58
>>749
>ペンがデバイスコンテキストから選択解除されてれば、いつでもそのペンを DeleteObject で削除できる。

prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);

上の例で削除できる「そのペン」とはどのペンのことですか?
prev?A?B?C?

753 :デフォルトの名無しさん:02/12/21 20:59
いいから沢村はpetzold本よめ。

754 :デフォルトの名無しさん:02/12/21 21:02
>>750
最初のでもいいし、他のペンを選択しても元のペンは選択解除される。
そうすればペンを DeleteObject できるです。

デバイスコンテキストを本当に削除したいのですか?
それはあなたが CreateDC で作ったものでしょうね?
もしそうなら、ペンもブラシもフォントもビットマップも全部、SelectObject で最初の選択に戻してから、DeleteDC すれば良いと思います。

755 :デフォルトの名無しさん:02/12/21 21:02
いいから沢村の相手はやめろ。

756 :名無し@沢村:02/12/21 21:07
>>754
いや、CreateDCで作ったものではなく、GetDCでつくったもの。
CreateDCというのは知らんでした…。

>最初のでもいいし、他のペンを選択しても元のペンは選択解除される。
そうすればペンを DeleteObject できるです。


prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);

の場合、次にDeleteObject(prev) してもいいし、DeleteObject(A) してもいいし、DeleteObject(B) してもいいということですか?



757 :名無し@沢村:02/12/21 21:12
皆々様方〜私は今回もリソースの開放の問題に挫折したようです…。
また日を改めて質問しますのでその時はよろしくね♪
ま、プログラムの最初に一回だけペンなどのオブジェクトを作っとけば、リソースがどんどん減っていくことはないという必殺技があるから、とりあえずそれで間に合わせときます♪

758 :デフォルトの名無しさん:02/12/21 21:15
けっきょく、petzold本よまないつもりなのか、、、

759 :名無し@沢村:02/12/21 21:17
>>758
基本的に本は読まないポリシーだが、
ちなみにそれはどこの出版社から出ているのですか?著者は誰ですか?いくらですか?

760 :デフォルトの名無しさん:02/12/21 21:21
>>759
お前は、自分で調べることが出来ないのか?

本気で鬱陶しいと思っている。

761 :デフォルトの名無しさん:02/12/21 21:39
名無し@沢村 の発言

> 基本的に本は読まないポリシーだが、
> ちなみにそれはどこの出版社から出ているのですか?著者は誰ですか?いくらですか?


プログラマに向いてない今すぐやめろ。

762 :ルパン:02/12/21 22:25
っていうかよぉ、とっつぁ〜ん!
沢村は人のレスもマトモに読〜んでないぞぉ。
SelectObjectすらまだ分かってないんだから、たまったもんじゃないぃ。

教え甲斐があるヤツぁいいが、コイツは教え甲斐が全くないんだよぉ。
なぁ?ふっじこちゃ〜ん。

763 :デフォルトの名無しさん:02/12/21 23:25
あーあ、ここの厨はいつになったら沢村を放置できるようになるのかね。

764 :デフォルトの名無しさん:02/12/21 23:40
リッチエディットコントロールで
error C2061: 構文エラー : 識別子 'HRESULT' がシンタックスエラーを起こしました。
とエラーが出てしまうのですが、何が原因でしょうか?

765 :デフォルトの名無しさん:02/12/21 23:44
>>764
ソースあげて

766 :766:02/12/22 00:47
バイナリデータ中の 0x15 0xA1 0x6C の3バイトの位置を検索するには
1バイトずつ調べる以外に方法はないんですか?
普通の文字なら strstr() が使えるけど、バイナリのマッチは
一般的にはどうやっているのですか?

767 :デフォルトの名無しさん:02/12/22 00:52
>>766
漏れは小さいデータしか扱ったことがないから、データを16進文字列
EA029EF5C0426FFF0A0B
のような文字列に変換して、15A16Cをstrstr関数で検索しているよ。
小さいならこれで逝ける。

768 :766:02/12/22 00:58
ありがとうございます。
でも僕はそれはバグがあると思いますよ。
00010000
に対して
001000の位置を strstr() で調べようとしたら。
でもその考え方は使えそうです。
コンマ区切りとかすれば問題は無いですね。
ありがとうございます。
他にもいい方法があったら教えてください。

769 :デフォルトの名無しさん:02/12/22 01:01
バイナリはバイナリで検索すれば良い。
Win32なら_lfindとかね。
リニアサーチが嫌ならば、BM法を使って調べると速くなる

770 :766:02/12/22 01:03
768>>
ヤバ!!!!!!
漏れの顔は青ざめた。今日寝れない。でもバグ発見ありがとう。

771 :デフォルトの名無しさん:02/12/22 01:05
UINT(4byte)やMMX(8byte)使って検索するとかで検索スピードを
速めることは可能。
さらにデータ配列に一定の規律が守られていればさらに最適化も
可能。例えば、その並びは必ずあるアラインメントで並びが保証され
ているとか。

772 :766:02/12/22 01:06
ありがとうございます。_lfind は珍しい関数ですか?
http://websearch.yahoo.co.jp/bin/query?p=_lfind+Win32+%a5%d0%a5%a4%a5%ca%a5%ea&hc=0&hs=0
見つかりませんでした。
BM法を検索してみます。

773 :デフォルトの名無しさん:02/12/22 01:19
> 772
_lfind は VC についてくるライブラリの関数。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt__lfind.asp
で、その _lfind の様な関数の実装。
ttp://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip23.htm
そしてBM法。
ttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/b/bmMatch.html

774 :766:02/12/22 01:27
ありがとうございます。
_lfind は↓にもありました。
http://www.tru64unix.compaq.com/docs/i18n/japan/Single_UNIX_Documentation/NCH0944X.HTM
今からそれでやってみます。

775 :デフォルトの名無しさん:02/12/22 01:33
BROWSEINFO構造体のulFlagsに BIF_RETURNONLYFSDIRS を指定してSHBrowseForFolder関数を呼び出すと、
ディレクトリ以外を選択しているときにOKボタンが灰色になります。
ところが ulFlags に BIF_USENEWUI と BIF_RETURNONLYFSDIRS を指定するとディレクトリ以外を選択してもOKボタンが灰色になりません。
BIF_USENEWUI でもOKボタンを灰色にしたいのですがどうすればよいのでしょうか。

776 :766:02/12/22 01:42
苦戦しております。_lfind() の最後の引数が分かりません。
ABと出力するつもりでソースを書いているのですが、最後の引数は
何を書けばいいんですか?

#include <windows.h>
#include <iostream.h>
#include <search.h>

main(){
BYTE a[7] = {0x10, 0x11, 0x12, 0x13, 0x65, 0x66, 0x0};
BYTE b[3] = {0x12, 0x13, 0x65};
unsigned int num = 7;
unsigned int wid = sizeof(BYTE);
char *p;

p = (char*)_lfind(b, a, &num, &wid, ?);

printf("%s", p);
}

777 :722:02/12/22 01:47
>>723,724
回答ありがとうございました。後者の最後に元のハンドルに戻す方法で行こうと思います。

>>742氏の指摘しているDeleteObjectのタイミングですが、
私の(質問するきっかけとなった元の)ソースでは
AにSelectする前にA,B,CをまとめてCreatePenし、
最後のprevに戻す処理の後で3つまとめてDeleteObjectしています。


778 :766:02/12/22 01:55
VCというコンパイラでないとだめなみたいですね。

#include <windows.h>
#include <iostream.h>
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

main(){
BYTE a[7] = {0x10, 0x11, 0x12, 0x13, 0x65, 0x66, 0x0};
BYTE b[3] = {0x12, 0x13, 0x65};
unsigned int num = 7;
char *p;

p = (char*)_lfind(b, a, &num, sizeof(BYTE), compare);

printf("%s", p);
}

int compare(const void *arg1, const void *arg2 ){
return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}

_lfind と _stricmp か未定義だと言われてしまいました。

BM法に夢を託します。

779 :デフォルトの名無しさん:02/12/22 02:00
つーか、_lfindは要素単位で探すんだから使えないんでは?

780 :デフォルトの名無しさん:02/12/22 02:19
>>777
それでいいと思われ。
使う前にCreateし、いざ使うときになったらSelectし、使い終わったらDelete。
Deleteは忘れちゃまずいから、まとめてするようにしてます。俺はね。

781 :デフォルトの名無しさん:02/12/22 02:21
strstr みたいな memmem を自作したほうが楽だし汎用性が高いと思うが
_lfind を使ってできないこともないだろう。

int compare(const void*p,const void*q)
{
  const BYTE*a=(BYTE*)q;
  const BYTE*b=(BYTE*)p;
  return (a[0]!=b[0])&&(a[1]!=b[1])&&(a[2]!=b[2]);
}
int main(void)
{
  BYTE a[]={'0','1','2','3','4','5','6','\0'};
  BYTE b[]={'3','4','5'};
  unsigned int num=sizeof(a)-sizeof(b);
  printf("%s\n",_lfind(b,a,&num,1,compare));
  return 0;
}

782 :デフォルトの名無しさん:02/12/22 02:33
車輪の再発明〜♪

783 :デフォルトの名無しさん:02/12/22 03:07
> 782
で、1個目の車輪は何処に?

784 :デフォルトの名無しさん:02/12/22 03:12
_lfindのソースはSDKにあったりするな。
自分で同等品作るならSTL的に書くのがいいと思うが。

785 :デフォルトの名無しさん:02/12/22 05:51
>>721
できました。感謝感激です。ありがとうございますた。

786 :デフォルトの名無しさん:02/12/22 13:16
IEのツールに自前のツールを登録したいのですがどうやればいいですか?

787 :デフォルトの名無しさん:02/12/22 13:58
>>786
レジストリ

788 :デフォルトの名無しさん:02/12/22 14:03
メニューにそのままビットマップを表示させるのはInsertMenuItemでできるのですが、
ワードみたいに、反転表示になったらビットマップの部分が盛り上がるようにしたいのです。
http://www5b.biglobe.ne.jp/~kouta_y/news/newsc/c03.html
↑ここみたいに自分で描画するしか方法はないのでしょうか。

789 :デフォルトの名無しさん:02/12/22 15:02
>>788
Spy++で調べてみればいいけど、自分で描画するのが普通だぞ

790 :名無し@沢村:02/12/22 21:09
ヌヒ等よ、俺はプログラミングの息抜きに時々↓こういうところで吠えることがあるよ。

http://sports3.2ch.net/test/read.cgi/k1/1040558493/l50

791 :デフォルトの名無しさん:02/12/22 21:45
放置でお願いします


792 :デフォルトの名無しさん:02/12/22 23:58
奴婢よばわりされてもでつか

793 :デフォルトの名無しさん:02/12/23 00:01
>>792
そう言うのを「釣られる」という。

794 :デフォルトの名無しさん:02/12/23 12:54
だからトリップつけてないウザコテなど
共有煽りハンドルになるに決まってるといってるだろ

795 :名無し@沢村:02/12/23 20:32
ライトウェーブや3DStudioMaxのフォーマットなんてダサくて使えないよ。
せめてバーチャファイターのチェンリーなみのがサクサク動かないと…!
PCの3Dはダサいから今のところ手を出していない…。


796 :デフォルトの名無しさん:02/12/23 21:05
↑刺客をおくりました。

はい次の方質問をどうぞ


797 :初心者:02/12/23 21:47
すいません、質問をします。

最新のWinXPのIE6で、ウィンドウの上側にツールバーがありますよね。(メニューやボタンやアドレス入力欄など)
このツールバーの左側(XPだと縦の列で点が並んでいる)をドラッグすると、ツールバーを移動できますが、・・。

今VISUALC++6で開発をしていて、ウィンドウにツールバーをつけようとしていますが、表示されるツールバーが昔の98・MEのようなふるいツールバーになります。
最新のXPに対応したツールバーデザインを表示させるためには、どのように手を加えればいいのですか?

教えてください。

798 :初心者:02/12/23 21:56
つづき・・・。
いわゆる、LUNAインターフェースですよね。

今HPを検索してますが・・・なかなか資料がでてこないです・・。

だれかおしえてください。

799 :名無し@沢村:02/12/23 22:16

もうちょっとでクリスマス。。★彡
パートナーは見つかりました?(o^.^o)

http://petitmomo.com/mm/
ここがちょっぴりエッチ系の沢村が運営している出会いサイトです。
もしよかったら使ってみて、、、
ヨロシクです。

名無し@沢村(^o^)-☆

800 :デフォルトの名無しさん:02/12/23 23:57
>>798
manifestとかビジュアルスタイルでぐぐれ。

はい次の方

801 :デフォルトの名無しさん:02/12/24 00:26
晒しage
http://gyaraxy.s10.xrea.com/

802 :名無し@沢村:02/12/24 04:03
>>797
TBSTYLE_FLAT

803 :デフォルトの名無しさん:02/12/24 06:23
797が哀れだ
しかも間違ってるし

804 :デフォルトの名無しさん:02/12/24 11:28
>> 797
ReBar のことを言っているのか?
だったら、ReBar とか クールバー でググる。

ReBar が何かわかったら、
あとは vector で配布されている Win32API のサンプルでも見て勉強。
ReBar が実現できたら、manifest とか試してみれ。

805 :デフォルトの名無しさん:02/12/24 11:47

この前、人のソースをみたら、

 HDC hdc = GetDC( hWnd );
 HDC mdc = CreateCompatibleDC( hdc );
 HBITMAP bmp = CreateCompatibleBitmap( hdc, x, y );

 (中略)

 DeleteObject( bmp );
 DeleteDC( mdc );
 DeleteDC( hdc );

とかやってあって驚いた

CreateDC, CreateCompatibleDC, GetDC, GetWindowDC, BeginPaint と、
DeleteDC, ReleaseDC, EndPaint の対応付けがわからないまま
プログラムやっているヤツラってけっこういるのな。

806 :名無し@沢村:02/12/24 11:51
それくらい分かってますが、何か?

807 :デフォルトの名無しさん:02/12/24 12:06
GetDCで取ってきたハンドルをDeleteDCしたら
Windowsがお亡くなりにならないか?

漏れはなった(NT4.0)


808 :デフォルトの名無しさん:02/12/24 12:09
>>805
まぁ、関数名を理解出来ていないって事だな

Get(取得)したからRelease(開放)してやる
Create(作る)したからDelete(削除)してやる

>>806
Object関数も理解出来ていな香具師には聞いてない

809 :デフォルトの名無しさん:02/12/24 13:16
>>806
それくらい分かってるなら、さっさとリソース問題を解決しろよ。
屁みたいなもんだろ。

810 :デフォルトの名無しさん:02/12/24 13:23
簡単に沢村に釣られるのはやめましょう

はい次の方、質問をどうぞ


811 :デフォルトの名無しさん:02/12/24 16:10
沢村って何人居るの?

812 :デフォルトの名無しさん:02/12/24 16:11
次スレの 1 のテンプレには、是非 「名無し@沢村は徹底的に無視してください」 と
書いて欲しいな。

813 :デフォルトの名無しさん:02/12/24 17:25
全員、「名無し@沢村」の名前にするとか。

814 :デフォルトの名無しさん:02/12/24 17:29
勝手に

皆々様方〜教えてくだされ〜♪
(書き込みの内容)
教えてくだされ〜♪

に置換してくれるとなおよい。

815 :デフォルトの名無しさん:02/12/24 19:51
その変換を自動で行う沢村ブラウザを・・・


作るなよ?

816 :デフォルトの名無しさん:02/12/25 00:14
ときどきビジー状態になる処理のあるアプリを作っています。
ビジー中のキー入力やマウスクリックは無視したいのですが、
どのようにすればよいのでしょうか?


817 :デフォルトの名無しさん:02/12/25 00:47
EnableWindow() とか?

818 :デフォルトの名無しさん:02/12/25 00:53
ファイルを検索するのはどうやればいいんですか

819 :デフォルトの名無しさん:02/12/25 06:00
FindFirstFile() で、ディレクトリ出てきたら再帰かな?

820 :デフォルトの名無しさん:02/12/25 13:20
>>816
ビジー処理を別スレッドで処理すれば理想的ですよ。

821 :デフォルトの名無しさん:02/12/25 13:39
質問です。
巨大なファイル(数M〜数十Mまで、可能性としては数Gも扱いたい)の中の
非常に小さい一部分のみを変更・削除・追加する場合、
どのように処理をすればいいのか教えて貰えませんか?

822 :デフォルトの名無しさん:02/12/25 14:09
変更はfopen("rw")/fseek/fwrite
追加削除は最後尾でないかぎり、全部をコピーしなおすしかない

823 :デフォルトの名無しさん:02/12/25 14:28
途中の削除や追加が必要ならインデックスを作って状態を管理する
DBの実装を参考に汁

824 :デフォルトの名無しさん:02/12/25 14:31
>>822
それで数Mのファイルをアクセスするのはきついです…

>>823
エディタみたいな物で、ファイル形式を変えるわけにはいきませんし、
今までの情報を残しておくことも基本的には出来ません

セクタチェインとかをいじる方法だと、ファイルシステム依存になるので、
なにかそういうAPIがあるとは思うのですが、なかなか見つからず…

825 :デフォルトの名無しさん:02/12/25 14:51
ないよ。

826 :デフォルトの名無しさん:02/12/25 14:53
Windowsプログラミングしてる奴はリチャード・J・シモンの
1万円ギリギリマトリックスのWindows95 APIバイブル1/2/3本
持ってんの?
星の数ほどあるAPIを用途別に理解する為には買うべき?

827 :デフォルトの名無しさん:02/12/25 14:57
Jeffrey RichterのAdvanced Windowsを穴があくまで読んで
あとはMSDN libの検索を使いこなせるようになれば
API一覧は要らないと思う

828 :デフォルトの名無しさん:02/12/25 14:59
>>825
無い?確か大容量専門のAPIがあったと思ったが。
昔このスレで読んだような気がするぞ

829 :デフォルトの名無しさん:02/12/25 14:59
ないよ。

830 :デフォルトの名無しさん:02/12/25 15:18
メモリマップトファイルとmemmoveを使えばコピーしなおす
必要はないと思うが途中で強制終了されたりすると
確実にファイルが壊れる

831 :デフォルトの名無しさん:02/12/25 15:23
>>830
ファイルを書き込んでいる時に強制終了されても、
どちらにせよファイルは壊れるのでは?

832 :デフォルトの名無しさん:02/12/25 15:28
コピーしなおしなら、元のファイルが壊れることはないでしょ。

833 :デフォルトの名無しさん:02/12/25 15:31
メモリマップトファイルを使うな、という話が昔あったなぁ。
ただファイルの内容をメモリに展開したいだけなら、多少面倒でも
自分で制御する方がいいだろうね。

834 :デフォルトの名無しさん:02/12/25 15:39
メモリマップ`ト'ファイル


プ

835 :デフォルトの名無しさん:02/12/25 15:56



836 :デフォルトの名無しさん:02/12/25 16:01
226件
http://www.google.com/search?q=%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ie=UTF-8&oe=UTF-8&hl=ja&lr=
237件
http://www.google.com/search?q=%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&ie=UTF-8&oe=UTF-8&hl=ja&lr=
微妙だな。発音は「ト」で間違ってないと思うが
何がおかしい?

837 :デフォルトの名無しさん:02/12/25 16:02
>>833
結果としてコピーの回数を減らせたりしないと
メリットないね

838 :デフォルトの名無しさん:02/12/25 16:04
英語の発音とカタカナがマップドだと思うな

839 :デフォルトの名無しさん:02/12/25 16:07

つーか、ファイル扱うときには、どんなに小さな変更であれ、
一時ファイルを作ってそこへ書き込み、すべて正常に終了したら、
ファイルを置き換えるのが常識だと思うのですが。

840 :デフォルトの名無しさん:02/12/25 16:20
>>839
で、ハードリンクがいつのまにかバックアップのほうを指していて
鬱になると。
Winにも標準でファイルへのシンボリックリンクがほしい。

841 :デフォルトの名無しさん:02/12/25 17:02
>>840
>Winにも標準でファイルへのシンボリックリンクがほしい。

IShellLinkとIPersistFileでできるだろ

842 :デフォルトの名無しさん:02/12/25 17:04
>>838
エンハンス ド とかあったからなー
ちょっと違和感持っても迂闊にプとか言えないよな

843 :デフォルトの名無しさん:02/12/25 17:07
>>838
メジャーな解説書やサイトでは大体「マップト」だと思うが。

844 :デフォルトの名無しさん:02/12/25 17:11
メジャー信奉者か


プ

845 :デフォルトの名無しさん:02/12/25 17:11
>843
うるこい

846 :デフォルトの名無しさん:02/12/25 17:14
無声子音で終わった後のedはドでもトでもいいんでなかったか。

847 :デフォルトの名無しさん:02/12/25 17:23
「ド」で合わせるのが日本語英語の常という事でよろしいか?

848 :デフォルトの名無しさん:02/12/25 17:24
ブッシュ・ド・ノエル

849 :デフォルトの名無しさん:02/12/25 17:27
>>821
NTFS限定でなら Sparse File で検索しれ。

850 :デフォルトの名無しさん:02/12/25 17:34
Sparse Fileとはちと違ったか。早とちり。鬱。


851 :単位すらまともに書けない奴に粘着するお化け ◆efCnjqFIg6 :02/12/25 18:39
>>821

852 :デフォルトの名無しさん:02/12/25 18:43
そこの名前長いヤシうざい

853 :デフォルトの名無しさん:02/12/25 18:54
>>852
239 名前:デフォルトの名無しさん 投稿日:2002/12/25(水) 18:50
お馬鹿さんは日本語も理解できないんだね。哀れ。



854 :デフォルトの名無しさん:02/12/25 19:18
お化けなんてないさ、お化けなんて嘘さ♪
2ちゃんの馬鹿が電波飛ばしたのさ〜

855 :デフォルトの名無しさん:02/12/25 19:19
> 239 名前:デフォルトの名無しさん 投稿日:2002/12/25(水) 18:50

(゚Д゚)ハァ?

> お馬鹿さんは日本語も理解できないんだね。哀れ。

「名前」 欄は名前を書くところだと理解できない香具師が居るんだね。遭われ。

856 :デフォルトの名無しさん:02/12/25 19:19
マイクロソフトがメモリマップトと言っている以上、
MS系の開発に限っては「メモリマップト」と言うべきだと思われ。

英語の発音だと無声音化するし、だいたいカタカナでは書けないし。

857 :デフォルトの名無しさん:02/12/25 19:20
>>854
その先は、

だけどちょっとだけどちょっと僕だって怖いさ。

だっけか?(w 

858 :デフォルトの名無しさん:02/12/25 19:21
>>853
うわっ
粘着晒しあげっ

859 :デフォルトの名無しさん:02/12/25 19:22
えっと、Win32に関係ない話題はどうかと思うが

860 :デフォルトの名無しさん:02/12/25 19:23
>>853
うぜぇよ。粘着君(藁

861 :858:02/12/25 19:23
>>855
某スレの粘着厨房なので無視してやってください。

862 :デフォルトの名無しさん:02/12/25 19:24
>>853
空気読めよ。ばればれだっつーのwww

863 :デフォルトの名無しさん:02/12/25 19:59
ム板で煽りあいはやめてくれぃ。

864 :デフォルトの名無しさん:02/12/25 20:14
>>863
あんたが煽ってるんじゃん。
止まってたのに。

865 :デフォルトの名無しさん:02/12/25 20:24
>>864
それはいわゆる「オマエガナー」

866 :デフォルトの名無しさん:02/12/25 21:22
お?嵐か?
俺もはいろーか?

867 :デフォルトの名無しさん:02/12/25 21:31
>>841
カーネルで解釈できないショートカットなんぞがほしいんじゃない。遅いし

868 :デフォルトの名無しさん:02/12/25 21:33
ジュンマは実在した!

869 :デフォルトの名無しさん:02/12/25 21:45
最後まで見なかった。結局、藤岡弘がジュンマだったんでしょ?

870 :841:02/12/25 23:05
>>867
ハードリンクだってあるじゃん
ショートカットとUNIXのシンボリックリンクのどんな違いが気に入らないの?

871 :867ではないが:02/12/25 23:13
>>870
fopen("hogehoge.lnk") で元のファイルが開けないのでは
シンボリックリンクとしては使えないじゃない。そりゃ、ハードリンクで
間に合わせることが出来る場合もあるけれど。

--
ファイルにジャンクションを張れるようにするパッチとか。
ttp://homepage1.nifty.com/emk/symlink.html

872 :870:02/12/26 00:01
>>871
fopen()の直呼びで元ファイルが開けるかどうかは
カーネルで解釈しているかどうかには関係ないし
速度に根本的な違いがあるわけでもないよね

漏れはダブルクリック以上の使い方でストレスがあるとすれば
ソース管理をフォルダ単位でやりたい時くらいだけど
ボリュームセットの中ではハードリンクできないんだっけ?

873 :870:02/12/26 00:04
>>839の時点での話では
fopen()の直呼びじゃなくても
よかったような...

874 :デフォルトの名無しさん:02/12/26 00:43
昔(NT3.1か3.5時代だったような)、Win32SDKのヘルプかなにかで、
エディタのサンプルを見た記憶があります。
エディタといっても、Editを使うものではなくて、自分でゴリゴリ処理を
行うものでした。(といっても、サンプルっていうくらいだから、簡単なものでした)
このサンプルって今どこにあるか分かる方はいらっしゃいますでしょうか?


875 :デフォルトの名無しさん:02/12/26 00:53
>>874
それはしらないけど、今月のCマガでエディタ作ってたよ。

876 :デフォルトの名無しさん:02/12/26 00:56
そんなヲタ雑誌買えません。。。

877 :874:02/12/26 00:56
>>875
アリガトウ!(´▽`)
買ってくるよ。

878 :デフォルトの名無しさん:02/12/26 08:49
>>870
> ハードリンクだってあるじゃん
840読みました? つーか841は840へのレスだから
読んでないわけないんだが脊髄反射だけでレスしてません?
>>872
> カーネルで解釈しているかどうかには関係ないし
関係大ありだと思うがそれはともかくようするに
どんなAPI使っても透過的に開いてくれないんじゃ
嬉しくない
> 速度に根本的な違いがあるわけでもないよね
実際遅いんだもん
Cygwinのnowinsymlinkとwinsymlinkで比べれば一目瞭然
ファイルのオープンしかしないのにshell32.dll
(ひいてはuser32だのgdi32だの)をロードさせられるのも
気に食わないし

879 :デフォルトの名無しさん:02/12/26 08:54
あとショートカットはエクスプローラでツリー表示できないのもやだ
もっともディレクトリへのシンボリックリンク相当物はすでにあるから
たいした問題じゃないんだが

880 :843:02/12/26 11:11
>>856
MSDN検索すると、どっちの語もヒットするんだよな。
まあ、翻訳者によるみたいな。

漏れ的にはどちらでもいいが、>844-845あたりは自分しか信じられない阿呆。

881 :デフォルトの名無しさん:02/12/26 11:29
>880
うるこい

882 :sage 粘着スマソ:02/12/26 12:21
とりあえずmappedの発音記号を調べると「t」になってるわけだが。
英語のできないプログラマは(略



883 :デフォルトの名無しさん:02/12/26 12:31
>882
うるこい

884 :デフォルトの名無しさん:02/12/26 12:32
>>882
そんなことは百も承知のうえでやってたんじゃないの?

885 :デフォルトの名無しさん:02/12/26 12:37
マップドもマップトも日本語。英語を使いたいならmappedと書けばいいだけの話。

886 :デフォルトの名無しさん:02/12/26 12:50
>>882
今更得意げに何言ってんだか・・・

887 :843:02/12/26 12:52
>>884
>>834,838みたいなのが居るからおかしいんじゃないのって話になったかと。

>>885
まあそゆこと。
英語を日本語になおしたら「こうだ!」的な事を言うのが間違ってるし、
そんなプログラマは(略

888 :デフォルトの名無しさん:02/12/26 12:58
まあ、正しいのはマップドだけどね

889 :デフォルトの名無しさん:02/12/26 13:14
マップドだけで埋めようぜ

890 :デフォルトの名無しさん:02/12/26 13:16
>>887-888
オマイラうるこい。
クダランことでスレ流すな。ボケェ
発音変わっただけで、動くプログラムが動かんようなるわけじゃないじゃろ。
ええかげんにせーや。

891 :デフォルトの名無しさん:02/12/26 13:19
こんだけ需要があるんだから
カタカナ読みスレでも立てれば?
たしかUNIX板にはそんなスレがあったはず


892 :デフォルトの名無しさん:02/12/26 13:24
>>891
雑談スレで充分。

893 :デフォルトの名無しさん:02/12/26 13:24
マップルにしとこう

894 :デフォルトの名無しさん:02/12/26 13:36
API は Application *Programmer* Interface なのに
*Programming* ってかくバカが多くて困りますッ!!

895 :デフォルトの名無しさん:02/12/26 13:39
http://www.cnet.com/Resources/Info/Glossary/Terms/api.html

それより、何が困ったのか知りたい。

896 :デフォルトの名無しさん:02/12/26 13:46
ネタスレ!!(・∀・)

897 :デフォルトの名無しさん:02/12/26 13:50
>>890
適当プログラマーだな。
真相を追求するのが真の技術者だよ。

898 :デフォルトの名無しさん:02/12/26 13:53
適度にネタをたしなむのが真の技術者だよ。

899 :デフォルトの名無しさん:02/12/26 14:16
>897
追求する部分を間違えているぞ。
発音なんか、地方訛りが加わると「ト」でも「ド」でもどうにでもならぁ
んな、くだらんこと議論するんだったら他へ逝け、ドアフォが
そんなものが真の技術者だったら、日本の開発者の未来は無いな。

ただ、>>897-898は真の技術者でないことが判明したんだがな

900 :デフォルトの名無しさん:02/12/26 14:29
どうでもいいわけだが。

901 :デフォルトの名無しさん:02/12/26 14:30
そろそろ次スレ立てようぜ。
Win32 Application *Programmer* Inteface 質問箱8

902 :デフォルトの名無しさん:02/12/26 14:33
PerlをParlと書こうが、Googleをゴーグルと発音しようが、真の技術者ですか?

903 :デフォルトの名無しさん:02/12/26 14:34
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_api_start_page.asp?frame=true
Windows APIのは Programming らしいな。

904 :デフォルトの名無しさん:02/12/26 14:36
Perl 言語っていうヤシは張っ倒していい?

905 :デフォルトの名無しさん:02/12/26 14:39
Windows 2000 を「にせん」と言おうが、「にーけい」と言おうが真の技術者です。
Tを「ティー」と言おうが、「テー」と言おうが真の技術者です。
スタジオを「ステューディオ」と発音しようと真の技術者です。


906 :デフォルトの名無しさん:02/12/26 14:49
>>895>>903
誤植だな

907 :デフォルトの名無しさん:02/12/26 14:53
>>903
そうとも言い切れんぞ。
http://www.google.com/search?num=50&hl=ja&&q=application-programmer-interface+site%3Amicrosoft.com

908 :デフォルトの名無しさん:02/12/26 14:53
米国人と話する時はどうしましょう。

909 :デフォルトの名無しさん:02/12/26 14:55
独自解釈、独自翻訳する人達の集まりはここですか?

910 :デフォルトの名無しさん:02/12/26 15:16
>>908
まじめな話、「マップド」だろうが「マップト」だろうが通じる
というか日本語だって
「トーキョー エキ ハ ドコデスカ?」
と片言で発音めちゃくちゃで話しかけられても何とか理解できるだろ

きちんとした発音じゃないと通じないと思っているなら
米国人なめすぎだ


911 :デフォルトの名無しさん:02/12/26 15:19
そもそも100%の翻訳なぞ存在せん罠
そこまでこだわるなら、翻訳自体許されない行為だろ。
英語のままで使え。
それも、米英どっちの英語かは知らんがな。

912 :デフォルトの名無しさん:02/12/26 15:23
舞妓さん見て「ゲイシャガール」と言われるのもOKだとか?
ちと違う?

913 :デフォルトの名無しさん:02/12/26 15:23
もう鎖国するしかないな。

914 :デフォルトの名無しさん:02/12/26 15:29
>913
外来語、外国語も禁止。

915 :デフォルトの名無しさん:02/12/26 15:39
>>878
あるノードaへのリンクb,cがあって
aのコピーdを作りdに修正を加え
後でbをdへのリンクに貼り直したら
cがaへのリンクのままだったって話なら
b,cはハードリンクでもシンボリックリンクでもショートカットでも同じことだろ
IShellLinkがCOMでない形で欲しいならそう言えばいい

脊髄反射という医学用語の使い方がよくわからんが
仮に漏れが840を読んでいなかったとして
そんなのは漏れの勝手だ放っとけちゅーねん
あんたが840を読んでない者と話したくなければレスする義務はない
見も知らぬ者に何を甘ったれてるんだおまえは

916 :デフォルトの名無しさん:02/12/26 15:50
>914
外来技術も禁止。

917 :デフォルトの名無しさん:02/12/26 16:29
そしてぴゅう太日本語ベーシックへ(w

918 :デフォルトの名無しさん:02/12/26 16:31
まだドとトの話やってたのか。。

919 :デフォルトの名無しさん:02/12/26 16:32
純国産文化って貧弱ね

920 :デフォルトの名無しさん:02/12/26 16:40
>>917
「日本語ベーシック」
ダメです。ベーシックは外来語です。


921 :デフォルトの名無しさん:02/12/26 16:52
指輪物語の翻訳も俺はどうかと思うんだよね。
つか日本人って翻訳にたいする意識が低すぎ。

922 :デフォルトの名無しさん:02/12/26 16:52
機械太日本語基礎

923 :デフォルトの名無しさん:02/12/26 16:54
>>907
http://www.google.com/search?num=50&hl=ja&&q=application-programming-interface+site%3Amicrosoft.com
圧倒的に多いね

924 :デフォルトの名無しさん:02/12/26 16:57
量に頼るなんて低俗だな

925 :デフォルトの名無しさん:02/12/26 17:05
まったくだ。メジャーならそれでいいのかよ。

926 :デフォルトの名無しさん:02/12/26 17:09
マイナーならそれでいいのかよ。

927 :デフォルトの名無しさん:02/12/26 17:15
CreateFileMappingA(-1, ...)
MapViewOfFileEx(hoge hoge hoge ...)
で作成した領域に、プログラムファイルをロードして動作させているプログラムがあります。

この領域の保護属性をEXEにして、デバックしたいのですが、
最初の段階でSEC_IMAGEを加えても、
「%1は有効なWIN32アプリケーションではありません。」
(GetLastError+FormatMessageからとれるメッセージ)
といわれてしまいます。
どうすればいいでしょうか?

928 :927:02/12/26 17:17
x最初の段階
○CreateFileMappingで

929 :デフォルトの名無しさん:02/12/26 19:02
>>915
>>878はただのUNIX厨なんだろ。
「Windowsは糞!UNIXこそは神!!マンセー!!!」
って叫びたいだけなんだから、そっとしとけ。


930 :デフォルトの名無しさん:02/12/26 19:14
NTFS ってリンク作れなかったか?
エクスプローラは対応していないようだが・・・。

931 :デフォルトの名無しさん:02/12/26 19:47
>>924-925
量が多い方が、メジャーな方がいいに決まってるだろ。
どれだけ多くの人に通じるかが問題なんだから。

932 :デフォルトの名無しさん:02/12/26 19:51
量が多いと大変なんだが・・・。

933 :デフォルトの名無しさん:02/12/26 19:52
>>930
リンク・・・フォルダのハードリンク・・・ジャンクション便利よ。
お気に入り(の一部)を他ユーザと共有できるし。

934 :933:02/12/26 19:53
× フォルダのハードリンク
○ フォルダのシンボリックリンク

935 :デフォルトの名無しさん:02/12/26 20:17
アホ質問ですまん。。。
どこかにAPI関数一覧及びその意味・使い道を列挙した
サイト・本は無いのですか???

936 :デフォルトの名無しさん:02/12/26 20:24
>>935
ヘルプ

937 :デフォルトの名無しさん:02/12/26 20:25
VC++ 付属の MSDN

938 :デフォルトの名無しさん:02/12/26 20:29
APIバイブ

939 :名無し@沢村:02/12/26 21:25
>>935
ヌヒよ、APIの一覧は
http://www.microsoft.com/japan/developer/library/
の「プラットフォームSDK」の「プラットフォームSDK(日本語)」の中に全て書いてあるよ、ヌヒよ。

940 :デフォルトの名無しさん:02/12/26 21:51
沢村って、マジで質問に答えてるよな・・・
もしかして、他の奴らよりマシな存在なのかも・・・


941 :デフォルトの名無しさん:02/12/26 21:56
939=940

942 :デフォルトの名無しさん:02/12/26 22:00
ヌヒよ、沢村って、マジで質問に答えてるよな・・・
もしかして、他の奴らよりマシな存在なのかも・・・、ヌヒよ。


943 :940:02/12/26 22:02
>>941
ゴメン・・・今、少し酔ってるから・・・
ただ、ほ〜んの少し、沢村がマトモに見えてしまった・・・


944 :デフォルトの名無しさん:02/12/26 22:15
> ヌヒよ

この時点でまともでないと思われ

945 :デフォルトの名無しさん:02/12/26 22:20
不良が偶にいいことをすると高く評価される現象と同じだ。

946 :デフォルトの名無しさん:02/12/26 23:10
ストックホルム症候群みたいなものか。

947 :デフォルトの名無しさん:02/12/26 23:46
WIN32_FIND_DATA x.cFileNameをCreateFileに使うにはどうすればよいでうsか。

948 :デフォルトの名無しさん:02/12/26 23:49
>>947
引数lpFileNameにそのまま渡し、諸引数を設定すれば出来るけれど、
このような質問を投げているということはプログラミングに向いていないのかもしれない。

949 :デフォルトの名無しさん:02/12/27 00:14
この板で質問をするということはプログラミングに向いていないのかもしれない。

950 :デフォルトの名無しさん:02/12/27 00:15
この板で回答をするということはプログラミングに向いていないのかもしれない。

951 :947:02/12/27 00:18
そのまま渡したんですけどカレントディレクトリから一個下のディレクトリにあるファイルは
うまく開いてくれません。どうすればいいですか?

952 :デフォルトの名無しさん:02/12/27 00:23
剥けてないと思う。

953 :デフォルトの名無しさん:02/12/27 00:31
むしろ向いているけど左向き、みたいな。

954 :デフォルトの名無しさん:02/12/27 01:34
>>951
相対パスと絶対パスを理解していればそういう質問は出てこないはずだが、
もしそうなら PC 初心者板に逝ってくれ。

955 :デフォルトの名無しさん:02/12/27 01:34
右に何かあったりするの?

956 :947:02/12/27 01:36
すみません。解決しました。
おさw

957 :947:02/12/27 01:39
お騒がせしました。

958 :デフォルトの名無しさん:02/12/27 03:43
次スレまだー?

959 :デフォルトの名無しさん:02/12/27 04:18
VBで画像処理のプログラムを組んでるんですが
画素一つ一つの情報を取得する関数(~.Point()ってやつ)で、全画素について情報を得て
得た画素一つ一つについて反転処理をしたんですが
どーにもPhotoshopのような超高速の反転処理と比べると足元にも及ばない遅い速度になってしまいます
アルゴスレでも聞いたんですがどーやら使ってるAPIに問題があるとかで
どうすれば高速化できるのでしょうか?


960 :デフォルトの名無しさん:02/12/27 04:21
API云々の問題じゃないような…。
とりあえず使うとしたらGetPixel/SetPixelかな?

でも、本格的な画像処理するんだったらいちいちそんなことしないでしょ。

961 :デフォルトの名無しさん:02/12/27 04:23
って、アルゴリズムスレで言われたのね。
失礼。(アルゴスレって初めて聞いた)

962 :デフォルトの名無しさん:02/12/27 04:27
反転ならBitBlt一発で出来るのでは?

963 :デフォルトの名無しさん:02/12/27 04:28
BitBlt一発ならPhotoshopより速いだろうね。

964 :デフォルトの名無しさん:02/12/27 05:29
VBならPaintPictureでも一発反転できるんじゃないの?

965 :デフォルトの名無しさん:02/12/27 09:43
959 は根本的に勘違いしてるでしょ。
Photoshop のようなペイントソフトは、内部に独自の作業領域を持ってる。
普通にプログラム内の配列のように使っている領域だ。
反転などの処理はその作業領域に対して行っていて、画面に直接描画しているわけでは
ない。
描画に必要な時にはじめてその作業領域をビットマップとして画面に貼りつける。

966 :959:02/12/27 13:08
その作業領域に読み込ませる方法と
ビットマップとして画面に貼付ける方法をぜひ教えてください

967 :デフォルトの名無しさん:02/12/27 13:09
アドビに聞けや

968 :デフォルトの名無しさん:02/12/27 13:33
>>966
DIBセクションを作業領域として使うんじゃだめ?


969 :デフォルトの名無しさん:02/12/27 13:34
> あるノードaへのリンクb,cがあって
> aのコピーdを作りdに修正を加え
> 後でbをdへのリンクに貼り直したら
> cがaへのリンクのままだったって話なら
そんな話は誰もしてない。勝手にお前の都合のいいように
話を作り替えるな。

> IShellLinkがCOMでない形で欲しいならそう言えばいい
だから誰もそんなこと言ってない。

> 仮に漏れが840を読んでいなかったとして
> そんなのは漏れの勝手だ放っとけちゅーねん
そうだな。ハードリンクと言ってる奴に対して
ハードリンクがあるじゃんといったり
遅いといってるのにCOM以外のインターフェース
がどうとかぜんぜん無関係の話はじめて恥かくのは
お前だし確かに余計なお世話だった

970 :デフォルトの名無しさん:02/12/27 13:51
次次スレ
http://pc3.2ch.net/test/read.cgi/tech/1040964626/

971 :デフォルトの名無しさん:02/12/27 13:51
>969
シツコイ(・∀・)カエレ!!

972 :959:02/12/27 15:23
>>968
なんかよくわからないので
基本を勉強してからまたこのスレ戻って来ます

973 :デフォルトの名無しさん:02/12/27 15:56
VBでDIBセクションってつかえるのか?

974 :968:02/12/27 16:06
>>973
>VBでDIBセクションってつかえるのか?
見落としてました。スマヌ。


975 :名無し@沢村:02/12/27 16:14
>>972
ヌヒよ、BitBltを使えば良いよ。

976 ::02/12/27 17:44
>>959
反転させるだけなら、
Picture1.DrawMode = vbInvert
Picture1.Line ( 0 , 0 )-( 100 , 100 ), , BF
で出来ると思います。



977 :デフォルトの名無しさん:02/12/28 02:24
どうしてVBではDIBセクションが使えないの?


978 :デフォルトの名無しさん:02/12/28 08:26
>>977
使えるけど、VBはポインタがないからうまみが少ない。


979 :デフォルトの名無しさん:02/12/29 18:47
 他のアプリにキー送信するプログラムを組んでいます。
keybd_event関数を調べていたら、sendinput関数を推奨とおり、
サンプルを探したのですがみつかりませんでした。
サンプルでいい参照先がありましたら教えてください。

980 :デフォルトの名無しさん:02/12/30 00:14
MSDN に載ってたけど・・・

次のサンプルコードは、仮想キー VK_NUMLOCK を指定して keybd_event() を
使うことにより、NumLock のランプをトグルさせます(Windows NT のみ)。
1 個の Bool 型の値を使って、ランプがオフ(FALSE)とオン(TRUE)のどちら
になっているかを表します。CapsLock キー(VK_CAPITAL)と ScrollLock キー
(VK_SCROLL)にも、これと同じ手法を適用できます。

 #include <windows.h>
 void SetNumLock( BOOL bState )
 {
  BYTE keyState[256];
  GetKeyboardState((LPBYTE)&keyState);
   if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
    (!bState && (keyState[VK_NUMLOCK] & 1)) )
   {
   // キーの押し下げをシミュレートする。
    keybd_event( VK_NUMLOCK,
     0x45,
     KEYEVENTF_EXTENDEDKEY | 0,
     0 );
   // キーの解放をシミュレートする。
    keybd_event( VK_NUMLOCK,
     0x45,
     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
     0);
  }
 }
 void main()
 {
  SetNumLock( TRUE );
 }

981 :979:02/12/30 00:27
>>980
 ありがとうございます。私の記述が悪かったのですが、知りたかったのはSendinputを
つかったものだったのです。新しいスレッドができているようなのでそちらで改めて質問
してみます。


226 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)