HRESULT STDMETHODCALLTYPE CDropTarget::Drop( IDataObject *pData,DWORD fKeyState,POINTL pt,DWORD *pdwEffect) { FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; *pdwEffect = DROPEFFECT_NONE; if (hwndCurDrag == NULL) return S_OK; ThumbInfo *pThumb = (ThumbInfo*) GetWindowLongPtr( hwndCurDrag, GWLP_USERDATA ); if (pThumb == NULL) return S_OK; STGMEDIUM stg; bool bFormatText = false; if ( S_OK != pData->GetData(&fe,&stg)) { fe.cfFormat = CF_UNICODETEXT; if ( S_OK != pData->GetData(&fe,&stg)) { return S_OK; } else { bFormatText = true; } } if (!bFormatText) { HDROP hDrop = (HDROP) stg.hGlobal; if (hDrop != NULL) { OnDropFiles(hDrop, pThumb); } } else { TCHAR *pText = (TCHAR*) GlobalLock(stg.hGlobal); if (pText != NULL) { SendMsgDialog(hwndCurDrag, pText); GlobalUnlock(stg.hGlobal); } } if (stg.pUnkForRelease != NULL) { stg.pUnkForRelease->Release(); } else { GlobalFree(stg.hGlobal); } DragLeave(); return S_OK; }
//--------------------------------------------------------------------- //--------------------------------------------------------------------- BOOL CALLBACK Main_DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: //SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW); //SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_HIDEWINDOW); // 明るい赤と明るい緑のブラシを作成 s_hbrW = CreateSolidBrush(RGB(255, 255, 255)); s_hbrR = CreateSolidBrush(RGB(255, 200, 200)); s_hbrG = CreateSolidBrush(RGB(200, 255, 200)); DragAcceptFiles(hwnd, TRUE); return TRUE; case WM_CLOSE: DeleteObject(s_hbrW); DeleteObject(s_hbrR); DeleteObject(s_hbrG); EndDialog(hwnd, 0); return TRUE; case WM_COMMAND: return OnCommand(hwnd, LOWORD(wParam), HIWORD(wParam)); case WM_CTLCOLORSTATIC: return OnCtlColorStatic(hwnd, (HDC)wParam, (HWND)lParam); case WM_DROPFILES: return OnDropFiles(hwnd, (HDROP)wParam); case WM_TIMER: return OnTimer(hwnd); } return FALSE; }
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: OnCreate(hwnd); break; #ifndef WINCE case WM_DROPFILES: OnDropFiles((HDROP)wParam); break; #endif case WM_COMMAND: OnCommand((HWND)lParam); break; case WM_HSCROLL: OnHScroll(hwnd, LOWORD(wParam), HIWORD(wParam)); break; case WM_SIZE: OnSize(hwnd); break; case WM_TIMER: OnTimer(hwnd); break; case WM_CLOSE: OnClose(hwnd); delete g_pPlayer; delete g_pGoodlayer; break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static thread_param tp[4]; switch (msg) { case WM_INITDIALOG: SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon((HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE), MAKEINTRESOURCE(IDI_ICON2))); hEdit = GetDlgItem(hDlg, IDC_EDIT); SendMessage(hEdit, EM_LIMITTEXT, -1, 0); AppendMsg(TEXT("拖放封包文件至此处...\r\n【注意】文件路径须小于260个字符\r\n")); for (int i=0; i<THREADNUM; ++i) { if (!(tp[i].hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))) { AppendMsg(TEXT("事件初始化错误!")); EndDialog(hDlg, 0); } if (!(tp[i].queue = (wchar_t**)VirtualAlloc(NULL, sizeof(wchar_t**), MEM_COMMIT, PAGE_READWRITE))) { AppendMsg(TEXT("内存分配错误!")); EndDialog(hDlg, 0); } if (!(*(tp[i].queue) = (wchar_t*)VirtualAlloc(NULL, thread_param::QUEUE_SIZE * MAXPATH * sizeof(wchar_t), MEM_COMMIT, PAGE_READWRITE))) { AppendMsg(TEXT("内存分配错误!")); EndDialog(hDlg, 0); } if (!(tp[i].hThread = CreateThread(NULL, 0, Thread, &tp[i], 0, NULL))) { AppendMsg(TEXT("线程创建失败!")); EndDialog(hDlg, 0); } tp[i].front = tp[i].tail = 0; tp[i].thread_exit = false; } InitializeCriticalSection(&cs); return TRUE; case WM_DROPFILES: OnDropFiles((HDROP)wParam, hDlg, tp); return TRUE; case WM_CLOSE: for (int i=0; i<THREADNUM; ++i) { tp[i].thread_exit = true; SetEvent(tp[i].hEvent); } Sleep(200); EndDialog(hDlg, 0); return TRUE; } return FALSE; }
bool wxFileDropTarget::OnDrop(long x, long y, const void *data, size_t size ) { size_t number = 0; char *text = (char*) data; size_t i; for (i = 0; i < size; i++) if (text[i] == 0) number++; if (number == 0) return true; char **files = new char*[number]; text = (char*) data; for ( i = 0; i < number; i++) { files[i] = text; int len = strlen( text ); text += len+1; } bool ret = OnDropFiles( x, y, 1, files ); free( files ); return ret; }
wxDragResult wxFileDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) { if ( !GetData() ) return wxDragNone; wxFileDataObject *dobj = (wxFileDataObject *)m_dataObject; return OnDropFiles( x, y, dobj->GetFilenames() ) ? def : wxDragNone; }
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static thread_param tp[4]; switch (msg) { case WM_INITDIALOG: hEdit = GetDlgItem(hDlg, IDC_EDIT); SendMessage(hEdit, EM_LIMITTEXT, -1, 0); AppendMsg(TEXT("拖放arc文件至此处...\r\n【注意】文件路径须小于200个字符\r\n")); for (int i=0; i<4; ++i) { if (!(tp[i].hEvent = CreateEvent(NULL, TRUE, FALSE, NULL))) { AppendMsg(TEXT("事件初始化错误!")); EndDialog(hDlg, 0); } if (!(tp[i].queue = (PTSTR*)VirtualAlloc(NULL, sizeof(PTSTR*), MEM_COMMIT, PAGE_READWRITE))) { AppendMsg(TEXT("内存分配错误!")); EndDialog(hDlg, 0); } if (!(*(tp[i].queue) = (wchar_t*)VirtualAlloc(NULL, tp[i].QUEUE_SIZE*MAX_PATH, MEM_COMMIT, PAGE_READWRITE))) { AppendMsg(TEXT("内存分配错误!")); EndDialog(hDlg, 0); } if (!(tp[i].hThread = CreateThread(NULL, 0, Thread, &tp[i], 0, NULL))) { AppendMsg(TEXT("线程创建失败!")); EndDialog(hDlg, 0); } tp[i].front = tp[i].tail = 0; tp[i].thread_exit = false; } InitializeCriticalSection(&cs); return TRUE; case WM_DROPFILES: OnDropFiles((HDROP)wParam, hDlg, tp); return TRUE; case WM_CLOSE: for (int i=0; i<4; ++i) { tp[i].thread_exit = true; SetEvent(tp[i].hEvent); } EndDialog(hDlg, 0); return TRUE; } return FALSE; }
// ---------------------------------------------------------------------------- // DoOnFileOpen: // in case we are opening a project (bProject == true) we do not want to interfere // with 'last type of files' (probably the call was open (existing) project on the // start here page --> so we know it's a project --> set the filter accordingly // but as said don't force the 'last used type of files' to change, that should // only change when an open file is carried out (so (source) file <---> project (file) ) // TODO : when regular file open and user manually sets filter to project files --> will change // the last type : is that expected behaviour ??? // ---------------------------------------------------------------------------- void ThreadSearchFrame::DoOnFileOpen(bool bProject) // ---------------------------------------------------------------------------- { wxString Filters = FileFilters::GetFilterString(); // the value returned by GetIndexForFilterAll() is updated by GetFilterString() int StoredIndex = FileFilters::GetIndexForFilterAll(); wxString Path; ConfigManager* mgr = Manager::Get()->GetConfigManager(_T("app")); if(mgr) { if(!bProject) { wxString Filter = mgr->Read(_T("/file_dialogs/file_new_open/filter")); if(!Filter.IsEmpty()) { FileFilters::GetFilterIndexFromName(Filters, Filter, StoredIndex); } Path = mgr->Read(_T("/file_dialogs/file_new_open/directory"), Path); } else { FileFilters::GetFilterIndexFromName(Filters, _("Code::Blocks project files"), StoredIndex); } } wxFileDialog* dlg = new wxFileDialog(this, _("Open file"), Path, wxEmptyString, Filters, wxFD_OPEN | wxFD_MULTIPLE | compatibility::wxHideReadonly); dlg->SetFilterIndex(StoredIndex); PlaceWindow(dlg); if (dlg->ShowModal() == wxID_OK) { // store the last used filter and directory // as said : don't do this in case of an 'open project' if(mgr && !bProject) { int Index = dlg->GetFilterIndex(); wxString Filter; if(FileFilters::GetFilterNameFromIndex(Filters, Index, Filter)) { mgr->Write(_T("/file_dialogs/file_new_open/filter"), Filter); } wxString Test = dlg->GetDirectory(); mgr->Write(_T("/file_dialogs/file_new_open/directory"), dlg->GetDirectory()); } wxArrayString files; dlg->GetPaths(files); OnDropFiles(0,0,files); } dlg->Destroy(); } // end of DoOnFileOpen
LRESULT CView::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DROPFILES: return OnDropFiles(wParam, lParam); case WM_HSCROLL: return OnHScroll(wParam, lParam); case WM_VSCROLL: return OnVScroll(wParam, lParam); case WM_WINDOWPOSCHANGED: return OnWindowPosChanged(wParam, lParam); } // Pass unhandled messages on for default processing return WndProcDefault(uMsg, wParam, lParam); }
// // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_DROPFILES: OnDropFiles((HDROP)wParam); InvalidateRect(hWnd, 0, TRUE); break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); PaintImageEx(hdc); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void CMediaWnd::OnDropFiles(HDROP hDropInfo) { if ( hDropInfo != NULL ) { CStringList oFileList; TCHAR szFileName[MAX_PATH + 1]; UINT nFiles = DragQueryFile( hDropInfo, (UINT)-1, NULL, 0 ); for( UINT nNames = 0; nNames < nFiles; nNames++ ) { ZeroMemory( szFileName, MAX_PATH + 1 ); DragQueryFile( hDropInfo, nNames, (LPTSTR)szFileName, MAX_PATH + 1 ); oFileList.AddTail( szFileName ); } CPoint oPoint; POINT pt; DragQueryPoint( hDropInfo, &pt ); oPoint.SetPoint( pt.x, pt.y ); OnDropFiles( oFileList, oPoint, TRUE ); } }
void CMixereView::DropFiles(HDROP hDropInfo) { OnDropFiles(NULL, hDropInfo); }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_DROPFILES: { OnDropFiles(hWnd, (HDROP)wParam); break; } case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_AUDIO_PAUSED://暂停播放 { if (iAudio) iAudio->paused(); break; } case IDM_AUDIO_STOP: //停止播放 { if (iAudio) iAudio->stop(); break; } case IDM_PLAY_OGG: { // 打开文件打开对话框,如果选中文件,则NewGame OPENFILENAME ofn; // 公共对话框结构。 TCHAR szFile[MAX_PATH]; // 保存获取文件名称的缓冲区。 // 初始化选择文件对话框。 ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; // // ofn.lpstrFile[0] = _T('\0'); ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = _T("OGG播放\0*.ogg\0"); ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // 显示打开选择文件对话框。 if ( GetOpenFileName(&ofn) ) { CGE::IAudioStream *audioStream = CGE::getAudioStream(CGE::AUDIO_ST_OGG, TRUE); if (audioStream) { if (audioStream->loadStream(szFile, 1)) { channels = audioStream->getChannels(); freq = audioStream->getFreq(); format = audioStream->getFormat(); iAudio->addStream(audioStream); } } } ::InvalidateRect(hWnd,NULL,TRUE); ::UpdateWindow(hWnd); break; } case IDM_PLAY_WAV: { // 打开文件打开对话框,如果选中文件,则NewGame OPENFILENAME ofn; // 公共对话框结构。 TCHAR szFile[MAX_PATH]; // 保存获取文件名称的缓冲区。 // 初始化选择文件对话框。 ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFile = szFile; // // ofn.lpstrFile[0] = _T('\0'); ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = _T("WAV播放\0*.wav\0"); ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // 显示打开选择文件对话框。 if ( GetOpenFileName(&ofn) ) { CGE::IAudioStream *audioStream = CGE::getAudioStream(CGE::AUDIO_ST_WAVE, TRUE); if (audioStream) { if (audioStream->loadStream(szFile, 1)) { channels = audioStream->getChannels(); freq = audioStream->getFreq(); format = audioStream->getFormat(); if(AUDIO_CHANNELS != channels || AUDIO_FREQ != freq || AUDIO_FORMAT != format) { audioStream->convert(AUDIO_FREQ, AUDIO_FORMAT, AUDIO_CHANNELS); } iAudio->addStream(audioStream); } else { CGERelease(audioStream); } } } ::InvalidateRect(hWnd,NULL,TRUE); ::UpdateWindow(hWnd); break; } case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: { INT nLen = 0; tagRECT cRect; GetClientRect(hWnd, &cRect); hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... TCHAR szTitle[128] = {0}; nLen = _sntprintf(szTitle, 128, _T("Channels:%d\nFormat:%0.4x\nFreq:%d"), channels, format, freq); DrawText(hdc, szTitle, nLen, &cRect, DT_LEFT|DT_TOP); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
LRESULT GenericWindow::HandleMessage (UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_MOUSEMOVE: if (!m_flagMouseTracking) { // register for mouse out message (TME_LEAVE) TRACKMOUSEEVENT trackMouseEvent; trackMouseEvent.cbSize = sizeof (trackMouseEvent); trackMouseEvent.dwFlags = TME_LEAVE; trackMouseEvent.dwHoverTime = 0; trackMouseEvent.hwndTrack = GetHandle (); m_flagMouseTracking = ::TrackMouseEvent (&trackMouseEvent); } OnMouseMove (0, -1, LOWORD(lParam), HIWORD(lParam)); break; case WM_MOUSELEAVE: OnMouseLeave (); m_flagMouseTracking = FALSE; break; case WM_LBUTTONDOWN: OnMouseDown (0, 0, LOWORD(lParam), HIWORD(lParam)); break; case WM_LBUTTONUP: OnMouseUp (0, 0, LOWORD(lParam), HIWORD(lParam)); break; case WM_RBUTTONDOWN: OnMouseDown (0, 1, LOWORD(lParam), HIWORD(lParam)); break; case WM_RBUTTONUP: OnMouseUp (0, 1, LOWORD(lParam), HIWORD(lParam)); OnContextMenu ( ); break; case WM_ERASEBKGND: // we'll erase the background during the WM_PAINT message as necessary // to support dynamic background color for views // return FALSE to indicate we didn't erase the background here. return FALSE; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = ::BeginPaint (m_hWnd, &ps); // erase the background if required if (ps.fErase) { OnEraseBackground (hdc, ps); ps.fErase = FALSE; } OnPaint (hdc, ps); ::EndPaint (m_hWnd, &ps); } break; case WM_CHAR: OnKeyPress ( (int)wParam, LOWORD(lParam) ); break; case WM_KEYDOWN: OnKeyDown ( (int)wParam ); break; case WM_KEYUP: OnKeyUp ( (int)wParam ); break; case WM_NCDESTROY: OnPreDestroy (); m_hWnd = NULL; break; case WM_DESTROY: OnDestroy (); if (m_isMainWnd) { // ::MessageBox (0, _T("callling PostQuitMessage(0)"), _T(""), 0); ::PostQuitMessage (0); } break; case WM_SIZE: { int cx, cy; cx = LOWORD(lParam); cy = HIWORD(lParam); OnResize (cx, cy); } break; case WM_SETFOCUS: OnGotFocus (); break; case WM_KILLFOCUS: OnLostFocus (); break; case WM_COMMAND: OnCommand ( LOWORD(wParam) ); break; case WM_CONTEXTMENU: OnContextMenu ( ); break; case WM_CLOSE: { BOOL cancel = FALSE; OnClose (cancel); if (cancel == FALSE) DestroyWindow (m_hWnd); } break; case WM_DROPFILES: OnDropFiles ((HDROP)wParam); break; default: return ::DefWindowProc (m_hWnd, msg, wParam, lParam); } return 0; }
INT_PTR Dialog::DialogProcDefault(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: { return OnClose(); } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: OnOK(); return TRUE; case IDCANCEL: OnCancel(); return TRUE; default: return OnCommand(wParam, lParam); } break; } case WM_CONTEXTMENU: { POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; OnContextMenu(reinterpret_cast<HWND>(wParam), pt); break; } case WM_DESTROY: { OnDestroy(); break; } case WM_INITDIALOG: { #ifdef TAIGA_WIN_DIALOG_REMEMBER_LAST_POSITION_AND_SIZE if (pos_last_.x && pos_last_.y) SetPosition(nullptr, pos_last_.x, pos_last_.y, 0, 0, SWP_NOSIZE); if (size_last_.cx && size_last_.cy) SetPosition(nullptr, 0, 0, size_last_.cx, size_last_.cy, SWP_NOMOVE); #endif return OnInitDialog(); } case WM_DROPFILES: { OnDropFiles(reinterpret_cast<HDROP>(wParam)); break; } case WM_ENTERSIZEMOVE: case WM_EXITSIZEMOVE: { SIZE size = {0}; OnSize(uMsg, 0, size); break; } case WM_GETMINMAXINFO: { LPMINMAXINFO mmi = reinterpret_cast<LPMINMAXINFO>(lParam); SetMinMaxInfo(mmi); OnGetMinMaxInfo(mmi); break; } case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: case WM_MOUSEACTIVATE: case WM_MOUSEHOVER: case WM_MOUSEHWHEEL: case WM_MOUSELEAVE: case WM_MOUSEMOVE: case WM_MOUSEWHEEL: { LRESULT result = OnMouseEvent(uMsg, wParam, lParam); if (result != -1) { ::SetWindowLongPtrW(hwnd, DWL_MSGRESULT, result); return TRUE; } break; } case WM_MOVE: { POINTS pts = MAKEPOINTS(lParam); OnMove(&pts); break; } case WM_NOTIFY: { LRESULT result = OnNotify(wParam, reinterpret_cast<LPNMHDR>(lParam)); if (result) { ::SetWindowLongPtr(hwnd, DWL_MSGRESULT, result); return TRUE; } break; } case WM_PAINT: { if (::GetUpdateRect(hwnd, nullptr, FALSE)) { PAINTSTRUCT ps; HDC hdc = ::BeginPaint(hwnd, &ps); OnPaint(hdc, &ps); ::EndPaint(hwnd, &ps); } else { HDC hdc = ::GetDC(hwnd); OnPaint(hdc, nullptr); ::ReleaseDC(hwnd, hdc); } break; } case WM_SIZE: { SIZE size = {LOWORD(lParam), HIWORD(lParam)}; OnSize(uMsg, static_cast<UINT>(wParam), size); break; } case WM_TIMER: { OnTimer(static_cast<UINT_PTR>(wParam)); break; } case WM_WINDOWPOSCHANGING: { LPWINDOWPOS window_pos = reinterpret_cast<LPWINDOWPOS>(lParam); SnapToEdges(window_pos); OnWindowPosChanging(window_pos); break; } default: { if (uMsg == WM_TASKBARCREATED || uMsg == WM_TASKBARBUTTONCREATED || uMsg == WM_TASKBARCALLBACK) { OnTaskbarCallback(uMsg, lParam); return FALSE; } break; } } return FALSE; }
//--------------------------------------------------------------------- LRESULT Window::WindowProcedure(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { #ifdef _DEBUG /* char buf[20]; sprintf(buf, "0x%x : ", hWnd); OutputDebugString(buf); */ PutWindowMessage(message, wParam, lParam); #endif if ( message==WM_CREATE ) { LPCREATESTRUCT pc = (LPCREATESTRUCT)lParam; Window* pw = (Window*)(pc->lpCreateParams); pw->mWnd = hWnd; ::SetWindowLong(hWnd, 0, (long)pw); bool b = pw->OnCreate(pc); gTaskbarCreatedMessage = ::RegisterWindowMessage(TEXT("TaskbarCreated")); return b ? 0 : -1; } // マウスホイール対応 if ( message == msgMOUSEWHEEL ) { message = WM_MOUSEWHEEL; DbgStr("MouseWheel fwKeys:%04x, zDelta:%d, xPos:%d, yPos:%d", LOWORD(wParam), (short)HIWORD(wParam), (short)LOWORD(lParam), (short)HIWORD(lParam) ); } Window* p=(Window*)(::GetWindowLong(hWnd, 0)); if ( p == NULL ) return ::DefWindowProc(hWnd, message, wParam, lParam); if ( message >= WM_USER && message <= 0x7FFF ) return p->OnUser(message, wParam, lParam); if ( message == gTaskbarCreatedMessage ) return p->OnTaskbarRestart(); switch ( message ) { case WM_PAINT: { PAINTSTRUCT thePS; HDC theDC = ::BeginPaint(hWnd, &thePS); if (theDC != NULL) { p->OnPaint(theDC); ::EndPaint(hWnd, &thePS); } } return 0; case WM_NCHITTEST: return p->OnNCHitTest(MAKEPOINT(lParam)); Handle(WM_ACTIVATE, OnActivate(LOWORD(wParam), HIWORD(wParam), (HWND)lParam)); Handle(WM_ACTIVATEAPP, OnActivateApp(BOOL(wParam), (DWORD)lParam)); Handle(WM_DISPLAYCHANGE, OnDisplayChange(LOWORD(lParam), HIWORD(lParam), wParam)); /*case WM_DISPLAYCHANGE: p->OnDisplayChange(LOWORD(lParam), HIWORD(lParam), wParam); break;*/ Handle(WM_COMMAND, OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND)lParam)); Handle(WM_INITMENU, OnInitMenu(HMENU(wParam))); Handle(WM_CLOSE, OnClose()); Handle(WM_DESTROY, OnDestroy()); Handle(MM_MCINOTIFY, OnMCINotify(WORD(wParam), LONG(lParam))); Handle(WM_LBUTTONDOWN, OnLButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONDOWN, OnMButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONDOWN, OnRButtonDown(MAKEPOINT(lParam), wParam)); Handle(WM_LBUTTONUP, OnLButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONUP, OnMButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONUP, OnRButtonUp(MAKEPOINT(lParam), wParam)); Handle(WM_LBUTTONDBLCLK, OnLButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_MBUTTONDBLCLK, OnMButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_RBUTTONDBLCLK, OnRButtonDoubleClick(MAKEPOINT(lParam), wParam)); Handle(WM_MOUSEMOVE, OnMouseMove(MAKEPOINT(lParam), wParam)); Handle(WM_MOUSEWHEEL, OnMouseWheel(LOWORD(wParam), (short)HIWORD(wParam), (short)LOWORD(lParam), (short)HIWORD(lParam))); Handle(WM_NCLBUTTONDBLCLK, OnNCLButtonDoubleClick(wParam, MAKEPOINT(lParam))); Handle(WM_KEYDOWN, OnKeyDown((int)wParam, (long)lParam)); Handle(WM_KEYUP, OnKeyUp((int)wParam, (long)lParam)); Handle(WM_DROPFILES, OnDropFiles(HDROP(wParam))); Handle(WM_TIMER, OnTimer(wParam, (TIMERPROC*)lParam)); Handle(WM_DRAWCLIPBOARD, OnDrawClipboard()); Handle(WM_CHANGECBCHAIN, OnChangeCBChain((HWND)wParam, (HWND)lParam)); default: break; } return ::DefWindowProc(hWnd, message, wParam, lParam); }