|
|
|||||||||
|
|||||||||
|
|
QD 45 - CopyBitsを使用してスクリーンをキャプチャするときにカーソルを含める方法(27-September-96)Q: スクリーンをキャプチャしようとしてCopyBitsを使用しているのですが、マウスカーソルがキャプチャされません。何が原因なのでしょうか?
A: CopyBitsは、実際の作業を始める前に unsigned char oldCrsrVis; short oldCrsrState; // // カーソルを隠す // oldCrsrVis = GetCrsrVis(); oldCrsrState = GetCrsrState(); SetCrsrVis((unsigned char) 0); SetCrsrState(oldCrsrState - 1); CopyBits(.....); // // カーソルをリストアする // SetCrsrState(oldCrsrState); SetCrsrVis(oldCrsrVis);関数の定義は以下の通りです。 enum {
CrsrRect = 0x83C, /*[グローバル変数]
カーソルがヒットしているレクト [8 bytes]*/
TheCrsr = 0x844, /*[グローバル変数]
カーソルのデータ、マスクおよびホットスポット [68 bytes]*/
CrsrAddr = 0x888, /*[グローバル変数]
カーソルに隠されている部分のデータのアドレス [long]*/
CrsrSave = 0x88C, /*[グローバル変数]
カーソルに隠されている部分のデータ [64 bytes]*/
CrsrVis = 0x8CC, /*[グローバル変数]
カーソルが表示されているか? [byte]*/
CrsrBusy = 0x8CD, /*[グローバル変数]
カーソルがロックされているか? [byte]*/
CrsrNew = 0x8CE, /*[グローバル変数]
カーソルが変更されているか? [byte]*/
CrsrState = 0x8D0, /*[グローバル変数]
カーソルのネストレベル [word]*/
CrsrObscure = 0x8D2 /*[グローバル変数]
カーソルが覆い隠されている(obscure)かどうかを示すセマフォ [byte]*/
};
int IsCursorHidden(void);
void SetCrsrVis(unsigned char cursorVisible);
unsigned char GetCrsrVis(void);
PicHandle DumpScreenArea(void);
void ModCrsrState(short del);
short GetCrsrState(void);
void SetCrsrState(short val);
void SetCrsrVis(unsigned char cursorVisible)
{
*(unsigned char*)CrsrVis = cursorVisible;
}
unsigned char GetCrsrVis(void)
{
return( *(unsigned char*)CrsrVis );
}
void ModCrsrState(short del)
{
*(unsigned char*)CrsrState += del;
}
short GetCrsrState(void)
{
return ( *(unsigned char*)CrsrState );
}
void SetCrsrState(short val)
{
*(unsigned char*)CrsrState = val;
}
int IsCursorHidden()
{
int retVal = 0;
unsigned char cursorVisible;
cursorVisible = *(unsigned char*)CrsrVis;
if (cursorVisible)
retVal = 0;
else
retVal = 1;
return (retVal);
}
スクリーンダンプを行うサンプルコードが、最新のDeveloper CDに含まれています。パスは以下の通りです。 References: Dev.CD Aug 96 TC Sample Code Snippets QuickDraw ScreenDump ---> DumpScreen.c [ Technical Q&A's : Graphics & Media : QuickDraw : QD45 ] |
|