📄 main.c
字号:
break;
case ID_TOOLS_SHOWALL:
SendMessage(movie, WM_KEYDOWN, (WPARAM)'A', 0);
SendMessage(movie, WM_KEYDOWN, (WPARAM)'C', 0);
break;
case ID_HELP_PANLEFT:
SendMessage(movie, WM_KEYDOWN, (WPARAM)VK_LEFT, 0);
SendMessage(movie, WM_KEYDOWN, (WPARAM)'C', 0);
break;
case ID_HELP_PANRIGHT:
SendMessage(movie, WM_KEYDOWN, (WPARAM)VK_RIGHT, 0);
SendMessage(movie, WM_KEYDOWN, (WPARAM)'C', 0);
break;
case ID_HELP_PANUP:
SendMessage(movie, WM_KEYDOWN, (WPARAM)VK_UP, 0);
SendMessage(movie, WM_KEYDOWN, (WPARAM)'C', 0);
break;
case ID_HELP_PANDOWN:
SendMessage(movie, WM_KEYDOWN, (WPARAM)VK_DOWN, 0);
SendMessage(movie, WM_KEYDOWN, (WPARAM)'C', 0);
break;
case ID_HELP_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hwnd, (DLGPROC)About);
break;
case IDM_FILE_CLOSE:
SendMessage(movie, WM_UNLOADFLASH, 0, 0);
InvalidateRect(movie, NULL, TRUE);
break;
case ID_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
//case ID_FILE_OPEN:
// break;
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
} else if (msg == WM_KEYDOWN || msg == WM_KEYUP || msg == WM_CHAR) {
PostMessage(movie, msg, wp, lp);
} else if (msg == WM_CLOSE) {
SendMessage(movie, WM_UNLOADFLASH, 0, 0);
DestroyWindow(hwnd);
} else if (msg == WM_DESTROY) {
PostQuitMessage (0);
} else {
return DefWindowProc(hwnd, msg, wp, lp);
}
return FALSE;
}
void DrawDelay(HWND hwnd, int wakeUp, struct timeval * wd) {
long delay;
TCHAR buf[80];
HDC hdc = GetDC(hwnd);
RECT rect;
delay = (wd->tv_sec)*1000 + (wd->tv_usec)/1000; // delay in milliseconds
GetClientRect(hwnd, &rect);
wsprintf(buf, _T("wakeUp=%d delay=%d frametime=%dms "), wakeUp, delay, framerate);
SelectObject(hdc, GetStockObject(BLACK_PEN));
SelectObject(hdc, GetStockObject(WHITE_BRUSH));
ExtTextOut(hdc, 0, rect.bottom - 14, 0, NULL, buf, lstrlen(buf), NULL);
ReleaseDC(hwnd, hdc);
}
void FlashBlitWin32() {
BitBlt(wc->hdc, wc->fd.clip_x, wc->fd.clip_y, wc->fd.clip_width, wc->fd.clip_height, wc->bmpDC, wc->fd.clip_x, wc->fd.clip_y, SRCCOPY);
}
LRESULT movieWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
static struct timeval wd,de,now;
MSG event;
long cmd;
//fd_set fdset;
//int status;
static long delay = 0;
static long wakeUp = 0;
static long yieldToMessage = 0;
static long z = 20;
static long x = 0;
static long y = 0;
long timeToDrawFrame = 0;
static FlashHandle flashHandle = NULL;
static BOOL eatMouseDown = FALSE;
static BOOL eatMouseUp = FALSE;
LRESULT ret = 0;
yieldToMessage = 0;
if (wc->fd.flash_refresh) {
wc->fd.flash_refresh = 0;
FlashBlitWin32();
}
switch(msg) {
case WM_TIMER:
KillTimer(hwnd, wp);
PostMessage(hwnd, WM_FLASHWAKEUP, 0, 0);
break;
case WM_CREATE:
flashHandle = ((LPCREATESTRUCT)lp)->lpCreateParams;
//SetTimer(hwnd, 1, 50, NULL);
break;
case WM_FLASHWAKEUP:
cmd = FLASH_WAKEUP;
wakeUp = 1;
while (wakeUp) {
MSG mymsg;
if (flashHandle) wakeUp = FlashTick(flashHandle, cmd, 0, &wd, &framerate);
if (PeekMessage(&mymsg, hwnd, 0, 0, PM_NOREMOVE | PM_NOYIELD)) {
yieldToMessage = 1;
break;
} else {
if (wc->fd.flash_refresh) {
wc->fd.flash_refresh = 0;
FlashBlitWin32();
}
}
delay = (wd.tv_sec)*1000 + (wd.tv_usec)/1000; // delay in milliseconds
delay -= framerate; // subtract out how long it took to draw last frame, or else we're just waiting around for nothing.
if (delay <= 0) {
// go again!
} else {
break;
}
}
break;
case WM_KEYUP:
switch(wp) {
case VK_F24:
eatMouseDown = FALSE;
eatMouseUp = FALSE;
break;
}
break;
case WM_UNLOADFLASH:
if (flashHandle) FlashClose(flashHandle);
flashHandle = NULL;
KillTimer(hwnd, 23);
//InvalidateRect(hwnd, NULL, TRUE);
//UpdateWindow(hwnd);
break;
case WM_SETFLASHHANDLE:
z = 20;
x = y = 0;
flashHandle = (FlashHandle)lp;
wakeUp = 1;
break;
case WM_KEYDOWN:
{
FlashEvent fe;
switch(wp) {
case VK_F24:
eatMouseDown = TRUE;
eatMouseUp = TRUE;
break;
case VK_UP:
fe.key = FeKeyUp;
break;
case VK_DOWN:
fe.key = FeKeyDown;
break;
case VK_LEFT:
fe.key = FeKeyLeft;
break;
case VK_RIGHT:
fe.key = FeKeyRight;
break;
case VK_RETURN:
fe.key = FeKeyEnter;
break;
case VK_TAB:
fe.key = FeKeyNext;
break;
#if 0
case VK_UP:
y -= 10;
if (flashHandle) FlashOffset(flashHandle,x,y);
InvalidateRect(hwnd, NULL, FALSE);
break;
case VK_DOWN:
y += 10;
if (flashHandle) FlashOffset(flashHandle,x,y);
InvalidateRect(hwnd, NULL, FALSE);
break;
case VK_LEFT:
x -= 10;
if (flashHandle) FlashOffset(flashHandle,x,y);
InvalidateRect(hwnd, NULL, FALSE);
break;
case VK_RIGHT:
x += 10;
if (flashHandle) FlashOffset(flashHandle,x,y);
InvalidateRect(hwnd, NULL, FALSE);
break;
#endif
case 'Z':
if (flashHandle) FlashZoom(flashHandle,++z);
InvalidateRect(hwnd, NULL, FALSE);
break;
case 'X':
if (flashHandle) FlashZoom(flashHandle,--z);
InvalidateRect(hwnd, NULL, FALSE);
break;
case 'A':
z = 20;
x = 0;
y = 0;
if (flashHandle) FlashZoom(flashHandle,z);
if (flashHandle) FlashOffset(flashHandle,x,y);
break;
case 'C':
cmd = FLASH_CONT;
if (flashHandle) wakeUp = FlashTick(flashHandle, cmd, 0, &wd, &framerate);
break;
case 'P':
cmd = FLASH_STOP;
if (flashHandle) wakeUp = FlashTick(flashHandle, cmd, 0, &wd, &framerate);
break;
case 'R':
cmd = FLASH_REWIND;
if (flashHandle) FlashTick(flashHandle, cmd, 0, &wd, &framerate);
cmd = FLASH_CONT;
if (flashHandle) wakeUp = FlashTick(flashHandle, cmd, 0, &wd, &framerate);
break;
}
if (fe.key != 0) {
cmd = FLASH_EVENT;
fe.type = FeKeyPress;
if (FlashExec(flashHandle, cmd, &fe, &wd)) {
wakeUp = 1;
}
}
}
break;
case WM_LBUTTONDOWN:
// linux flashlib (or X) is weird -- need to set a mousemove event before a ButtonPress:
cmd = FLASH_EVENT;
event.hwnd = hwnd;
event.message = WM_MOUSEMOVE;
event.lParam = lp;
event.wParam = wp;
event.pt.x = LOWORD(lp);
event.pt.y = HIWORD(lp);
event.time = GetTickCount() - 1;
if ((flashHandle) && FlashTick(flashHandle, cmd, &event, &wd, &framerate))
wakeUp = 1;
// now fallthrough to default.
case WM_LBUTTONUP:
if (msg == WM_LBUTTONDOWN && eatMouseDown) {
//eatMouseDown = FALSE;
break;
}
if (msg == WM_LBUTTONUP && eatMouseUp) {
//eatMouseUp = FALSE;
break;
}
// if we get here we're not eating, so treat as default, fallthrough
default:
cmd = FLASH_EVENT;
event.hwnd = hwnd;
event.message = msg;
event.lParam = lp;
event.wParam = wp;
event.pt.x = LOWORD(lp);
event.pt.y = HIWORD(lp);
event.time = GetTickCount();
if ((flashHandle) && FlashTick(flashHandle, cmd, &event, &wd, &framerate))
wakeUp = 1;
if (msg == WM_ERASEBKGND) {
if (flashHandle == NULL) {
ret = DefWindowProc(hwnd, msg, wp, lp);
}
} else if (msg == WM_PAINT) {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect;
GetClientRect(hwnd, &rect);
if (flashHandle == NULL) {
HBITMAP hbm;
HDC hmemdc;
HBITMAP hmembmp;
BITMAP bmp;
Rectangle(hdc, -1, -1, rect.right + 1, rect.bottom + 1);
hbm = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
GetObject(hbm, sizeof(BITMAP), &bmp);
hmemdc = CreateCompatibleDC(hdc);
hmembmp = SelectObject(hmemdc, hbm);
BitBlt(hdc, rect.right/2 - bmp.bmWidth/2, rect.bottom/2 - bmp.bmHeight/2, bmp.bmWidth, bmp.bmHeight, hmemdc, 0, 0, SRCCOPY);
SelectObject(hmemdc, hmembmp);
DeleteDC(hmemdc);
DeleteObject(hbm);
} else {
wc->fd.clip_x = 0;
wc->fd.clip_y = 0;
wc->fd.clip_width = rect.right;
wc->fd.clip_height = rect.bottom;
FlashBlitWin32();
}
EndPaint(hwnd, &ps);
} else {
ret = DefWindowProc(hwnd, msg, wp, lp);
}
break;
}
if (msg != WM_UNLOADFLASH && diag) DrawDelay(hwnd, wakeUp, &wd);
// FIXME here, do REAL delay intended.
if (flashHandle) {
if (msg != WM_TIMER && msg != WM_UNLOADFLASH) {
if (wakeUp) {
delay = (wd.tv_sec)*1000 + (wd.tv_usec)/1000; // delay in milliseconds
delay -= framerate; // subtract out how long it took to draw last frame, or else we're just waiting around for nothing.
if (delay <= 0) {
delay = 1;
//PostMessage(hwnd, WM_TIMER, 0, 0);
//if (flashHandle) SetTimer(hwnd, 23, delay, NULL);
if (yieldToMessage) {
SetTimer(hwnd, 23, delay, NULL);
} else {
SendMessage(hwnd, WM_TIMER, 23, 0);
}
} else {
SetTimer(hwnd, 23, delay, NULL);
}
//SetTimer(hwnd, 23, 1, NULL); // wake now!
} else {
// wants a window event, doesnt need ticking.
// if broken uncomment these
//delay = (wd.tv_sec)*1000 + (wd.tv_usec)/1000; // delay in milliseconds
//SetTimer(hwnd, 23, delay, NULL);
}
}
}
return ret;
}
LRESULT controlWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
if (msg == WM_LBUTTONDOWN) {
PostMessage(frame, WM_CLOSE, 0, 0);
} else if (msg == WM_PAINT) {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
//drawInfo();
EndPaint(hwnd, &ps);
} else {
return DefWindowProc(hwnd, msg, wp, lp);
}
return FALSE;
}
void loadPlayer(int argc, char **argv)
{
WNDCLASS wndclass;
RECT rect;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = g_hInstance;
wndclass.hIcon = 0;
wndclass.hCursor = NULL;
wndclass.hbrBackground = (void *)COLOR_WINDOW;
wndclass.lpszMenuName = NULL;
wndclass.lpfnWndProc = (WNDPROC)frameWndProc;
wndclass.lpszClassName = (LPCTSTR)frameName;
RegisterClass(&wndclass);
wndclass.lpfnWndProc = (WNDPROC)movieWndProc;
wndclass.lpszClassName = (LPCTSTR)movieName;
RegisterClass(&wndclass);
wndclass.lpfnWndProc = (WNDPROC)controlWndProc;
wndclass.lpszClassName = (LPCTSTR)controlName;
RegisterClass(&wndclass);
frame = CreateWindow(frameName, _T("Pocket Spark"), WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
//0, 0, fi.frameWidth/20, fi.frameHeight/20+40,
NULL, NULL, g_hInstance, NULL);
if (!frame) {
TCHAR buf[80];
wsprintf(buf, _T("couldnt create frame, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
MessageBox(NULL, buf, _T(""), 0);
} else {
TCHAR buf[80];
wsprintf(buf, _T("frame, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
//MessageBox(NULL, buf, _T(""), 0);
}
GetClientRect(frame, &rect);
movie = CreateWindow(movieName, _T(""), WS_CHILD | WS_VISIBLE, 0, cbheight, rect.right, rect.bottom - cbheight, /*fi.frameWidth/20,fi.frameHeight/20,*/ frame, NULL, g_hInstance, NULL);
if (!movie) {
TCHAR buf[80];
wsprintf(buf, _T("couldnt create movie, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
MessageBox(NULL, buf, _T(""), 0);
}
control = CreateWindow(controlName, _T(""), WS_CHILD | WS_VISIBLE, 0, 0, 240, 1, frame, NULL, g_hInstance, NULL);
if (!control) {
TCHAR buf[80];
wsprintf(buf, _T("couldnt create control, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
}
ShowWindow(frame, SW_SHOW);
ShowWindow(movie, SW_SHOW);
ShowWindow(control, SW_SHOW);
UpdateWindow(frame);
UpdateWindow(movie);
UpdateWindow(control);
//exit(0);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int CmdShow) {
//char argv[3][MAX_PATH];
MSG msg;
TCHAR g_szFileName[MAX_PATH*2];
TCHAR g_szTitleName[MAX_PATH*2];
char** argv;
HWND oldHWND;
hInst = hInstance;
wcscpy(g_szFileName, _T(""));
wcscpy(g_szTitleName, _T("Open Flash File"));
if (oldHWND = FindWindow(frameName, _T("Pocket Spark"))) {
COPYDATASTRUCT cds;
cds.dwData = WM_FILEDROPPED;
cds.cbData = sizeof(TCHAR) * (lstrlen(lpCmdLine) + 1);
cds.lpData = lpCmdLine;
SetForegroundWindow(oldHWND);
SendMessage(oldHWND, WM_COPYDATA, 0, (LPARAM)&cds);
return 0;
}
//PalmFileInitialize (NULL) ;
//if (PalmFileOpenDlg (NULL, g_szFileName, g_szTitleName)) {
argv = (char**)malloc(3 * (sizeof(char*)));
argv[0] = (char*)malloc(MAX_PATH);
argv[1] = (char*)malloc(MAX_PATH);
argv[2] = (char*)malloc(MAX_PATH);
strcpy(argv[0], "player");
strcpy(argv[1], "\\test.swf");
//wcstombs(argv[1], g_szFileName, lstrlen(g_szFileName) + 1);
argv[2][0] = '\0';
g_hInstance = hInstance;
loadPlayer(3, argv);
//}
if (lstrlen(lpCmdLine) > 0) {
fileDropped = lpCmdLine;
}
PostMessage(frame, WM_EVERYTHINGLOADED, 0, 0);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage(&msg);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -