- ベストアンサー
HANDLEて何ですか?
#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; とやっているのですが、これは?
- みんなの回答 (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)から渡される整理券みたいなものです。
その他の回答 (2)
ハンドルというのは識別番号です。 たとえば、ファイルにアクセスするためには、ファイルスペックのほかにディスク上の物理位置情報やシーク位置情報など、たくさんの情報を持っている必要があります。 また、デバイスの種類によって情報の内容が変わるので、これらをアプリケーション側から弄られると、ちょっと困った事になってしまいます。 そこで、それらの情報は『アプリからは見えない位置』に置いておき、アプリには識別番号のみを伝えておきます。 その識別番号のことを『ハンドル』と呼び、OSはこの識別番号を見て、アプリがどんな操作をしたがっているかを判断します。 もっとも、識別番号とは名ばかりで実は物理アドレスだったりすることもあります。 ですが、アプリが外部デバイスや仮想デバイスなどにアクセスするための『とっかかり』だと思っておけば間違いないです。
- keyguy
- ベストアンサー率28% (135/469)
ハンドルとは「取って」のようなものです たとえば片手で「取っ手」のついてないコップを取るよりも 「取っ手」のついてあるコップを取るようが取りやすいでしょう この「取って」のようなものです
お礼
ありがとうございました。