Example #1
0
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;
}
Example #2
0
//---------------------------------------------------------------------
//---------------------------------------------------------------------
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;
}
Example #3
0
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);
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #7
0
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
Example #9
0
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);
}
Example #10
0
//
//  函数: 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;
}
Example #11
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 );
	}
}
Example #12
0
void CMixereView::DropFiles(HDROP hDropInfo)
{
	OnDropFiles(NULL, hDropInfo);
}
Example #13
0
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;
}
Example #14
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;
}
Example #15
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;
}
Example #16
0
//---------------------------------------------------------------------
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);
}