プロが教えるわが家の防犯対策術!

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int Locate(HANDLE, int, int);
int TxtPrint(HANDLE, char *);

int main()
{
HANDLE hStdout;
SYSTEMTIME st;
char str[32];

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

while(!_kbhit()) {
Locate(hStdout, 0, 10);
GetLocalTime(&st);
wsprintf(str, "現在%2d時%2d分%2d秒です",
st.wHour, st.wMinute, st.wSecond);
TxtPrint(hStdout, str);
Sleep(500);
}
return 0;
}

int Locate(HANDLE hOut, int x, int y)
{
COORD dwPos;
dwPos.X = (SHORT)x;
dwPos.Y = (SHORT)y;

if (SetConsoleCursorPosition(hOut, dwPos) == 0)
return -1;
else
return 0;
}

int TxtPrint(HANDLE hOut, char *str)
{
BOOL bResult;
DWORD dwResult;

bResult = WriteConsole(hOut, (CONST VOID *)str, (DWORD)lstrlen(str), &dwResult, NULL);
if (bResult == 0)
return -1;
else
return 0;
}

よくハンドルと言う言葉が出てくるのですが、いまいち意味がわかりません。あとint Locate()の所で

COORD dwPos;
dwPos.X = (SHORT)x;
dwPos.Y = (SHORT)y;

とやっているのですが、これは?

A 回答 (3件)

int Locate()の部分について



COORD は構造体です。MSDNライブラリで確認できると思いますがCOORD は以下のように定義されています。

typedef struct _COORD { // coord.
SHORT X; // horizontal coordinate
SHORT Y; // vertical coordinate
} COORD;

SHORT も typedef short SHORTと定義されいるだけで単にshort型です。

dwPos.X = (SHORT)x;
dwPos.Y = (SHORT)y;

xとyはint型なのでint→shortにキャスト(変換)しています。


HANDLEは typedef void *HANDLE
と定義されていますが、
要はOS(windows)から渡される整理券みたいなものです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/03/25 12:34

 ハンドルというのは識別番号です。



 たとえば、ファイルにアクセスするためには、ファイルスペックのほかにディスク上の物理位置情報やシーク位置情報など、たくさんの情報を持っている必要があります。
 また、デバイスの種類によって情報の内容が変わるので、これらをアプリケーション側から弄られると、ちょっと困った事になってしまいます。
 そこで、それらの情報は『アプリからは見えない位置』に置いておき、アプリには識別番号のみを伝えておきます。

 その識別番号のことを『ハンドル』と呼び、OSはこの識別番号を見て、アプリがどんな操作をしたがっているかを判断します。

 もっとも、識別番号とは名ばかりで実は物理アドレスだったりすることもあります。
 ですが、アプリが外部デバイスや仮想デバイスなどにアクセスするための『とっかかり』だと思っておけば間違いないです。
    • good
    • 0

ハンドルとは「取って」のようなものです



たとえば片手で「取っ手」のついてないコップを取るよりも
「取っ手」のついてあるコップを取るようが取りやすいでしょう
この「取って」のようなものです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!