这次介绍NotePad++中多标签页下的鼠标拖动标签页位置的功能.
在TabBar.cpp文件中的类处理函数定义如下:
LRESULT TabBar::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
case WM_LBUTTONDOWN :
{
::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam);
if (_doDragNDrop)
{
_nSrcTab = _nTabDragged = ::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0);
POINT point;
point.x = LOWORD(lParam);
point.y = HIWORD(lParam);
if(::DragDetect(hwnd, point))
{
// Yes, we're beginning to drag, so capture the mouse...
_isDragging = true;
::SetCapture(hwnd);
return TRUE;
}
break;
}
else
return TRUE;
}
case WM_MOUSEMOVE :
{
if (_isDragging)
{
POINT p;
p.x = LOWORD(lParam);
p.y = HIWORD(lParam);
exchangeItemData(p);
// Get cursor position of "Screen"
// For using the function "WindowFromPoint" afterward!!!
::GetCursorPos(&_draggingPoint);
draggingCursor(_draggingPoint);
return TRUE;
}
break;
}
case WM_LBUTTONUP :
{
if (_isDragging)
{
if(::GetCapture() == _hSelf)
::ReleaseCapture();
// Send a notification message to the parent with wParam = 0, lParam = 0
// nmhdr.idFrom = this
// destIndex = this->_nSrcTab
// scrIndex = this->_nTabDragged
NMHDR nmhdr;
nmhdr.hwndFrom = _hSelf;
nmhdr.code = _isDraggingInside?TCN_TABDROPPED:TCN_TABDROPPEDOUTSIDE;
nmhdr.idFrom = reinterpret_cast<unsigned int>