CMainWindow
Microsoft Windows オペレーティング システムは、次のユーザー アクションを標準ウィンドウ メッセージに変換し、StoClien アプリケーションのメインプロシージャに送信します。
- ユーザーがマウスの左ボタン、またはタブレット デバイスのペン先スイッチをクリックして、線の描画シーケンスを開始します。
- ユーザーはボタンをクリックして押したままにし、マウスを移動して線を描画します。
- マウスの左ボタンが離されると、シーケンスは終了します。
次のコード例は、この手順を示しています。
LRESULT CMainWindow::WindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
LRESULT lResult = FALSE;
switch (uMsg)
{
case WM_CREATE:
break;
case WM_ACTIVATE:
// A mouse click reactivates the paint procedure.
// This is used to paint a new window when a user
// selects a portion of the STOCLIEN window that is
// visible beneath another window. This message is
// sent in the WindowProc handle.
if (WA_CLICKACTIVE == LOWORD(wParam))
m_pGuiPaper->PaintWin();
lResult = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
break;
case WM_SIZE:
// Handle a resize of this window.
m_wWidth = LOWORD(lParam);
m_wHeight = HIWORD(lParam);
// Inform CGuiPaper of the change.
m_pGuiPaper->Resize(m_wWidth, m_wHeight);
break;
case WM_PAINT:
// This is a message to repaint the window.
{
PAINTSTRUCT ps;
if(BeginPaint(m_hWnd, &ps))
EndPaint(m_hWnd, &ps);
m_pGuiPaper->PaintWin();
}
break;
case WM_LBUTTONDOWN:
// Start sequence of ink drawing to the paper.
m_pGuiPaper->InkStart(LOWORD(lParam), HIWORD(lParam));
break;
case WM_MOUSEMOVE:
// Draw inking sequence data.
m_pGuiPaper->InkDraw(LOWORD(lParam), HIWORD(lParam));
break;
case WM_LBUTTONUP:
// Stop an ink drawing sequence.
m_pGuiPaper->InkStop(LOWORD(lParam), HIWORD(lParam));
break;
case WM_COMMAND:
// Dispatch and handle any Menu command messages received.
lResult = DoMenu(wParam, lParam);
break;
case WM_CHAR:
if (wParam == 0x1b)
{
// Exit this application if user presses the ESC key.
::PostMessage(m_hWnd, WM_CLOSE, 0, 0);
}
break;
case WM_CLOSE:
// The user selected Close on the main window System menu
// or Exit on the File menu.
// If there is unsaved ink data, then prompt
// the user. If the user cancels, do not close the window.
if (IDCANCEL == m_pGuiPaper->AskSave())
break;
case WM_QUIT:
// When exiting the application, close any associated help
// windows.
// ::WinHelp(m_hWnd, m_szHelpFile, HELP_QUIT, 0);
default:
// If there are any messages that have not been handled,
// send them to the default window procedure.
lResult = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
break;
}
return(lResult);
}
WM_LBUTTONDOWN メッセージがマウス位置データを配信すると、線描画シーケンスが開始されます。
CMainWindow には CGuiPaper オブジェクトへのポインターがあり、 CGuiPaper::InkStart メソッドを呼び出して線描画シーケンスを開始します。
マウスを移動して描画すると、マウス位置データを含む個別の WM_MOUSEMOVE メッセージのシーケンスが CGuiPaper::InkDraw メソッドに提供されます。
マウスの左ボタンが離されると、 WM_LBUTTONUP メッセージが受信されます。 CGuiPaper::InkStop メソッドは、線の描画シーケンスを停止します。