예제 #1
0
파일: WndProc.cpp 프로젝트: MaddTheSane/np2
/**
 * CWndProc オブジェクトの Windows プロシージャ (WindowProc) が用意されています
 * @param[in] nMsg 処理される Windows メッセージを指定します
 * @param[in] wParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します
 * @param[in] lParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します
 * @return メッセージに依存する値を返します
 */
LRESULT CWndProc::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
	if (nMsg == WM_COMMAND)
	{
		if (OnCommand(wParam, lParam))
		{
			return 0;
		}
	}
	else if (nMsg == WM_NOTIFY)
	{
		NMHDR* pNMHDR = reinterpret_cast<NMHDR*>(lParam);
		if (pNMHDR->hwndFrom != NULL)
		{
			LRESULT lResult = 0;
			if (OnNotify(wParam, lParam, &lResult))
			{
				return lResult;
			}
		}
	}
	else if (nMsg == WM_NCDESTROY)
	{
		OnNcDestroy(wParam, lParam);
		return 0;
	}
	return DefWindowProc(nMsg, wParam, lParam);
}
예제 #2
0
    LRESULT CALLBACK Slider_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        Slider_Info * const pInfo = GetInfo(hwnd);

        switch (uMsg)
        {
        case WM_CREATE:
            return OnCreate(hwnd);

        case WM_PAINT:
            return OnPaint(hwnd, pInfo);

        case WM_NCDESTROY:
            return OnNcDestroy(hwnd, pInfo);

        case WM_LBUTTONDOWN:
            return OnLButtonDown(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo);

        case WM_LBUTTONUP:
            return OnLButtonUp(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo);

        case WM_MOUSEMOVE:
            return OnMouseMove(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo);

        case WM_ENABLE:
            if (wParam == FALSE) // Window is disabled. Stop tracking.
            {
                return OnReleaseSlider(hwnd, pInfo);
            }
            break;

        case WM_CAPTURECHANGED:
           // The window lost focus while the slider was tracking the mouse OR 
           // the slider released the mouse capture itself.
           return OnReleaseSlider(hwnd, pInfo);

            
        // Custom messages
        case WM_SLIDER_SET_THUMB_BITMAP:
            return OnSetThumbBitmap(hwnd, (WORD)wParam, pInfo);

        case WM_SLIDER_SET_BACKGROUND:
            return OnSetBackground(hwnd, (HBRUSH)wParam, pInfo);

        case WM_SLIDER_SET_MIN_MAX:
            return OnSetMinMax(hwnd, (LONG)wParam, (LONG)lParam, pInfo);

        case WM_SLIDER_SET_POSITION:
            return OnSetPosition(hwnd, (LONG)wParam, pInfo);

        case WM_SLIDER_GET_POSITION:
            return OnGetPosition(hwnd, pInfo);

        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }

        return 0;
    };
예제 #3
0
LRESULT RingStatusBar::RingdowProc(HWND hWnd,RINGPARAMS param)
{
	switch(param.uMsg)
	{
		case SB_SIMPLE:
			//for MenuHelp
			if(m_pane && (m_pane->m_uStyle & SBPS_STRETCH))
			{
				//如果第一格是不定长,则为显示菜单帮助,此时需要检测是否屏蔽该消息
				//该处理是为做出类似VC状态栏的效果,即前面显示帮助,后面显示状态格
				if(param.wParam && param.lParam == 0)
					return 0;//系统发送的消息,屏蔽
			}
			return CallWindowProc(m_DefProc,m_hWnd,SB_SIMPLE,param.wParam,0);
		case SB_SETTEXTA:
		case SB_SETTEXTW:
			//Win2000内部是UNICODE版本,因此此处两个都要判断
			if((param.wParam & 0xFF) == 0xFF)
			{
				//MenuHelp,系统发送的消息
				//如果第一格是不定长,则为显示菜单帮助,此时需要在第一格显示菜单帮助,
				//保持后面的状态格以做出类似VC状态栏的效果
				if(m_pane && (m_pane->m_uStyle & SBPS_STRETCH) && !IsSimple())
				{
					if(CallWindowProc(m_DefProc,m_hWnd,param.uMsg,SBT_NOBORDERS,param.lParam))
					{
						InvalidateRect(m_hWnd,NULL,TRUE);
						return TRUE;
					}
					else
						return FALSE;
				}
			}
			return CallWindowProc(m_DefProc,m_hWnd,param.uMsg,param.wParam,param.lParam);
		case SB_SETPARTS:
			if(CallWindowProc(m_DefProc,m_hWnd,SB_SETPARTS,param.wParam,param.lParam))
				m_nPartCount = param.wParam;
			return (BOOL)m_nPartCount;
		case WM_COMMAND:
			return SendMessage(m_parent->Handle(),param.uMsg,param.wParam,param.lParam);		
		case WM_SIZE:
			UpdateAllParts();
			InvalidateRect(m_hWnd,NULL,TRUE);
			return 0;
		case WM_NCDESTROY:
			CallWindowProc(m_DefProc,m_hWnd,param.uMsg,param.wParam,param.lParam);
			FreeAllPart();
			OnNcDestroy();
			return 0;			
	}
	return DefaultProc(param);
}
예제 #4
0
파일: WndProc.cpp 프로젝트: aliaspider/np2
/**
 * CWndProc オブジェクトの Windows プロシージャ (WindowProc) が用意されています
 * @param[in] nMsg 処理される Windows メッセージを指定します
 * @param[in] wParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します
 * @param[in] lParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します
 * @return メッセージに依存する値を返します
 */
LRESULT CWndProc::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
	if (nMsg == WM_COMMAND)
	{
		if (OnCommand(wParam, lParam))
		{
			return 0;
		}
	}
	if (nMsg == WM_NCDESTROY)
	{
		OnNcDestroy(wParam, lParam);
		return 0;
	}
	return DefWindowProc(nMsg, wParam, lParam);
}
//---------------------------------------------------------------------------
//  This is the instance specific method used to process messages.  The
//  DialogProc delegates this responsibility to each instance of the class.
//
BOOL CSimpleDialog::ProcessMessage (
  HWND     hDlg,           //[in] Handle to dialog box
  UINT     uMsg,           //[in] Message
  WPARAM   wParam,         //[in] First message parameter
  LPARAM   lParam          //[in] Second message parameter
  )
{
    LRESULT lResult = 0;
    switch (uMsg)
    {
        case WM_INITDIALOG:
            lResult = OnInitDialog(hDlg, wParam, lParam);
            break;

        case WM_DESTROY:
            lResult = OnDestroy(hDlg, wParam, lParam);
            break;

        case WM_NCDESTROY:
            lResult = OnNcDestroy(hDlg, wParam, lParam);
            break;

        case WM_CLOSE:
            lResult = OnClose(hDlg, wParam, lParam);
            break;

        case WM_COMMAND:
            switch (wParam)
            {
                case IDOK:
                    lResult = OnOK(hDlg, wParam, lParam);
                    break;

                case IDCANCEL:
                    lResult = OnCancel(hDlg, wParam, lParam);
                    break;

                default:
                    break;
            }
        default:
            break;
    }

    return(BOOL)lResult;
} 
INT_PTR CMessageForwarder::ForwardMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	m_hwnd = hwnd;
	m_uMsg = uMsg;
	m_wParam = wParam;
	m_lParam = lParam;

	/* Private message? */
	if(uMsg > WM_APP && uMsg < 0xBFFF)
	{
		return OnPrivateMessage(uMsg,wParam,lParam);
	}

	switch(uMsg)
	{
		case WM_INITDIALOG:
			return OnInitDialog();
			break;

		case WM_CTLCOLORSTATIC:
			return OnCtlColorStatic(reinterpret_cast<HWND>(lParam),
				reinterpret_cast<HDC>(wParam));
			break;

		case WM_CTLCOLOREDIT:
			return OnCtlColorEdit(reinterpret_cast<HWND>(lParam),
				reinterpret_cast<HDC>(wParam));
			break;

		case WM_HSCROLL:
			return OnHScroll(reinterpret_cast<HWND>(lParam));
			break;

		case WM_APPCOMMAND:
			return OnAppCommand(reinterpret_cast<HWND>(wParam),
				GET_APPCOMMAND_LPARAM(lParam),
				GET_DEVICE_LPARAM(lParam),
				GET_KEYSTATE_LPARAM(lParam));
			break;

		case WM_TIMER:
			return OnTimer(static_cast<int>(wParam));
			break;

		case WM_MBUTTONUP:
			return OnMButtonUp(&MAKEPOINTS(lParam));
			break;

		case WM_COMMAND:
			return OnCommand(wParam,lParam);
			break;

		case WM_NOTIFY:
			return OnNotify(reinterpret_cast<LPNMHDR>(lParam));
			break;

		case WM_GETMINMAXINFO:
			return OnGetMinMaxInfo(reinterpret_cast<LPMINMAXINFO>(lParam));
			break;

		case WM_SIZE:
			return OnSize(static_cast<int>(wParam),
				LOWORD(lParam),HIWORD(lParam));
			break;

		case WM_CLOSE:
			return OnClose();
			break;

		case WM_DESTROY:
			return OnDestroy();
			break;

		case WM_NCDESTROY:
			return OnNcDestroy();
			break;


		case EM_SETSEL:
			OnEMSetSel(wParam,lParam);
			break;
	}

	return GetDefaultReturnValue(hwnd,uMsg,wParam,lParam);
}