روش درست هست فقط دقت کنید که:
- انتخاب یک رشته در یک editbox به این معنی هست که focus روی می باشد یا باید برود.
- در SETSEL برخلاف GETSEL باید مقادیر را به تابع بفرستید نه آدرس آن ها را،پس بدون &
- شما پیام را به دیالوگ باید بفرستید نه خود کنترل، hDlg کنترل هست، پس از GetParent استفاده کنید.
LRESULT APIENTRY EditProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONUP:
SetFocus( GetDlgItem(hDlg,IDC_INPUT ));
SendDlgItemMessage(GetParent(hDlg), IDC_INPUT, EM_GETSEL,
(WPARAM) &startPos, (LPARAM) &endPos);
SetFocus( GetDlgItem(GetParent(hDlg),IDC_OUTPUT ));
SendDlgItemMessage(GetParent(hDlg), IDC_OUTPUT, EM_SETSEL,
(WPARAM) startPos, (LPARAM) endPos);
break;
}
return CallWindowProc( OldEdit, hDlg, message, wParam, lParam);
}
- در نمونه کد فوق setfocus را سفارشی کنید تا بهتر عمل کند.
- اگر می خواهید جلوه highlight روی نوشته ها دو editbox نمایش داده شود باید از خاصیت تغییر background نوشته یا تغییر رنگ سفارشی استفاده کنید و به نوعی این قابلیت را بسازید (در همان EditProc)
- اگر به جای EditBox معمولی از یک Rich Edit استفاده کنید قابلیت های بیشتری دارد، مثلا با آن دیگر نیازی نیست رویداد راست کلیک را پیاده سازی کنید، بلکه پیام EN_SELCHANGE خودکار ارسال می شود.