Merge pull request #195 from RaiKoHoff/Drag_n_Drop

Drag n' Drop workaround for 32-bit App to NP3 x64
This commit is contained in:
Derick Payne 2017-11-29 14:35:29 +02:00 committed by GitHub
commit fbcdb231da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 770 additions and 328 deletions

View File

@ -4733,6 +4733,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
}
return FALSE;
case WM_ACTIVATE:
if (bDoCheckAllOccurrences) {
bFlagsChanged = TRUE;
@ -4745,359 +4746,366 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
case WM_COMMAND:
{
lpefr = (LPEDITFINDREPLACE)GetWindowLongPtr(hwnd, DWLP_USER);
switch (LOWORD(wParam))
{
lpefr = (LPEDITFINDREPLACE)GetWindowLongPtr(hwnd, DWLP_USER);
switch (LOWORD(wParam)) {
case IDC_FINDTEXT:
case IDC_REPLACETEXT:
{
BOOL bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0));
case IDC_FINDTEXT:
case IDC_REPLACETEXT:
{
BOOL bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0));
BOOL bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0));
BOOL bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0));
BOOL bEnableIS = !(BOOL)SendMessage(hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0);
BOOL bEnableIS = !(BOOL)SendMessage(hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0);
DialogEnableWindow(hwnd, IDOK, bEnableF);
DialogEnableWindow(hwnd, IDC_FINDPREV, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACE, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACEALL, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableF && bEnableIS);
DialogEnableWindow(hwnd, IDC_SWAPSTRG, bEnableF || bEnableR);
DialogEnableWindow(hwnd, IDOK, bEnableF);
DialogEnableWindow(hwnd, IDC_FINDPREV, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACE, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACEALL, bEnableF);
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableF && bEnableIS);
DialogEnableWindow(hwnd, IDC_SWAPSTRG, bEnableF || bEnableR);
if (HIWORD(wParam) == CBN_CLOSEUP) {
LONG lSelEnd;
SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETEDITSEL, 0, (LPARAM)&lSelEnd);
SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETEDITSEL, 0, MAKELPARAM(lSelEnd, lSelEnd));
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 200, NULL);
if (HIWORD(wParam) == CBN_CLOSEUP) {
LONG lSelEnd;
SendDlgItemMessage(hwnd, LOWORD(wParam), CB_GETEDITSEL, 0, (LPARAM)&lSelEnd);
SendDlgItemMessage(hwnd, LOWORD(wParam), CB_SETEDITSEL, 0, MAKELPARAM(lSelEnd, lSelEnd));
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 200, NULL);
}
break;
case IDC_MARKALL_OCC:
{
if (bDoCheckAllOccurrences) {
EditSetSearchFlags(hwnd, lpefr);
if (bFlagsChanged || (StringCchCompareXA(lastFind, lpefr->szFind) != 0)) {
BeginWaitCursor();
StringCchCopyA(lastFind, COUNTOF(lastFind), lpefr->szFind);
RegExResult_t match = NO_MATCH;
match = EditFindHasMatch(hwndEdit, lpefr, (iSaveMarkOcc > 0), FALSE);
if (regexMatch != match) {
regexMatch = match;
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, TRUE);
}
// we have to set Sci's regex instance to first find (have substitution in place)
EditFindHasMatch(hwndEdit, lpefr, FALSE, TRUE);
bFlagsChanged = FALSE;
EndWaitCursor();
}
}
}
break;
case IDC_FINDREGEXP:
if (IsDlgButtonChecked(hwnd, IDC_FINDREGEXP) == BST_CHECKED)
{
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); // Can not use wildcard search together with regexp
lpefr->fuFlags |= SCFIND_NP3_REGEX;
lpefr->bWildcardSearch = FALSE;
}
else {
if (IsDlgButtonChecked(hwnd, IDC_WILDCARDSEARCH) == BST_CHECKED) {
lpefr->fuFlags |= SCFIND_NP3_REGEX;
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
}
else {
lpefr->fuFlags ^= SCFIND_NP3_REGEX;
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, TRUE);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (lpefr->bTransformBS) ? BST_CHECKED : BST_UNCHECKED);
}
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_MARKALL_OCC:
{
if (bDoCheckAllOccurrences) {
EditSetSearchFlags(hwnd, lpefr);
if (bFlagsChanged || (StringCchCompareXA(lastFind, lpefr->szFind) != 0)) {
BeginWaitCursor();
StringCchCopyA(lastFind, COUNTOF(lastFind), lpefr->szFind);
RegExResult_t match = NO_MATCH;
match = EditFindHasMatch(hwndEdit, lpefr, (iSaveMarkOcc > 0), FALSE);
if (regexMatch != match) {
regexMatch = match;
InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, TRUE);
}
// we have to set Sci's regex instance to first find (have substitution in place)
EditFindHasMatch(hwndEdit, lpefr, FALSE, TRUE);
bFlagsChanged = FALSE;
EndWaitCursor();
}
}
}
break;
case IDC_WILDCARDSEARCH:
if (IsDlgButtonChecked(hwnd, IDC_WILDCARDSEARCH) == BST_CHECKED)
{
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
case IDC_FINDREGEXP:
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
lpefr->fuFlags |= SCFIND_NP3_REGEX;
lpefr->bWildcardSearch = TRUE;
}
else {
if (IsDlgButtonChecked(hwnd, IDC_FINDREGEXP) == BST_CHECKED)
{
lpefr->fuFlags |= SCFIND_NP3_REGEX;
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); // Can not use wildcard search together with regexp
lpefr->fuFlags |= SCFIND_NP3_REGEX;
lpefr->bWildcardSearch = FALSE;
}
else {
if (IsDlgButtonChecked(hwnd, IDC_WILDCARDSEARCH) == BST_CHECKED) {
lpefr->fuFlags |= SCFIND_NP3_REGEX;
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
}
else {
lpefr->fuFlags ^= SCFIND_NP3_REGEX;
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, TRUE);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (lpefr->bTransformBS) ? BST_CHECKED : BST_UNCHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, TRUE);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (lpefr->bTransformBS) ? BST_CHECKED : BST_UNCHECKED);
lpefr->fuFlags ^= SCFIND_NP3_REGEX;
}
lpefr->bWildcardSearch = FALSE;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDTRANSFORMBS:
if (IsDlgButtonChecked(hwnd, IDC_FINDTRANSFORMBS) == BST_CHECKED) {
lpefr->bTransformBS = TRUE;
}
else {
lpefr->bTransformBS = FALSE;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDCASE:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDWORD:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDSTART:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDOK:
case IDC_FINDPREV:
case IDC_REPLACE:
case IDC_REPLACEALL:
case IDC_REPLACEINSEL:
case IDACC_SELTONEXT:
case IDACC_SELTOPREV:
case IDMSG_SWITCHTOFIND:
case IDMSG_SWITCHTOREPLACE:
{
BOOL bIsFindDlg = (GetDlgItem(hwnd, IDC_REPLACE) == NULL);
if ((bIsFindDlg && LOWORD(wParam) == IDMSG_SWITCHTOREPLACE ||
!bIsFindDlg && LOWORD(wParam) == IDMSG_SWITCHTOFIND)) {
GetDlgPos(hwnd, &xFindReplaceDlgSave, &yFindReplaceDlgSave);
bSwitchedFindReplace = TRUE;
CopyMemory(&efrSave, lpefr, sizeof(EDITFINDREPLACE));
}
// Get current code page for Unicode conversion
UINT uCPEdit = Encoding_SciGetCodePage(hwnd);
cpLastFind = uCPEdit;
if (!bSwitchedFindReplace &&
!GetDlgItemTextW2A(uCPEdit, hwnd, IDC_FINDTEXT, lpefr->szFind, COUNTOF(lpefr->szFind))) {
DialogEnableWindow(hwnd, IDOK, FALSE);
DialogEnableWindow(hwnd, IDC_FINDPREV, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACE, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACEALL, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, FALSE);
if (!GetDlgItemTextW2A(uCPEdit, hwnd, IDC_REPLACETEXT, lpefr->szReplace, COUNTOF(lpefr->szReplace)))
DialogEnableWindow(hwnd, IDC_SWAPSTRG, FALSE);
return TRUE;
}
EditSetSearchFlags(hwnd, lpefr);
if (bIsFindDlg) {
lpefr->bFindClose = (IsDlgButtonChecked(hwnd, IDC_FINDCLOSE) == BST_CHECKED) ? TRUE : FALSE;
}
else {
lpefr->bReplaceClose = (IsDlgButtonChecked(hwnd, IDC_FINDCLOSE) == BST_CHECKED) ? TRUE : FALSE;
}
WCHAR tch[FNDRPL_BUFFER] = { L'\0' };
if (!bSwitchedFindReplace) {
// Save MRUs
if (StringCchLenA(lpefr->szFind, COUNTOF(lpefr->szFind))) {
if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8, COUNTOF(lpefr->szFindUTF8))) {
GetDlgItemText(hwnd, IDC_FINDTEXT, tch, COUNTOF(tch));
MRU_Add(mruFind, tch, 0, 0, NULL);
}
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_WILDCARDSEARCH:
if (IsDlgButtonChecked(hwnd, IDC_WILDCARDSEARCH) == BST_CHECKED)
{
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
lpefr->fuFlags |= SCFIND_NP3_REGEX;
lpefr->bWildcardSearch = TRUE;
}
else {
if (IsDlgButtonChecked(hwnd, IDC_FINDREGEXP) == BST_CHECKED)
{
lpefr->fuFlags |= SCFIND_NP3_REGEX;
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED);
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, FALSE);
}
else {
DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, TRUE);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (lpefr->bTransformBS) ? BST_CHECKED : BST_UNCHECKED);
lpefr->fuFlags ^= SCFIND_NP3_REGEX;
}
lpefr->bWildcardSearch = FALSE;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDTRANSFORMBS:
if (IsDlgButtonChecked(hwnd, IDC_FINDTRANSFORMBS) == BST_CHECKED) {
lpefr->bTransformBS = TRUE;
}
else {
lpefr->bTransformBS = FALSE;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDCASE:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDWORD:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDC_FINDSTART:
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDOK:
case IDC_FINDPREV:
case IDC_REPLACE:
case IDC_REPLACEALL:
case IDC_REPLACEINSEL:
case IDACC_SELTONEXT:
case IDACC_SELTOPREV:
case IDMSG_SWITCHTOFIND:
case IDMSG_SWITCHTOREPLACE:
{
BOOL bIsFindDlg = (GetDlgItem(hwnd, IDC_REPLACE) == NULL);
if ((bIsFindDlg && LOWORD(wParam) == IDMSG_SWITCHTOREPLACE ||
!bIsFindDlg && LOWORD(wParam) == IDMSG_SWITCHTOFIND)) {
GetDlgPos(hwnd, &xFindReplaceDlgSave, &yFindReplaceDlgSave);
bSwitchedFindReplace = TRUE;
CopyMemory(&efrSave, lpefr, sizeof(EDITFINDREPLACE));
}
// Get current code page for Unicode conversion
UINT uCPEdit = Encoding_SciGetCodePage(hwnd);
cpLastFind = uCPEdit;
if (!bSwitchedFindReplace &&
!GetDlgItemTextW2A(uCPEdit, hwnd, IDC_FINDTEXT, lpefr->szFind, COUNTOF(lpefr->szFind))) {
DialogEnableWindow(hwnd, IDOK, FALSE);
DialogEnableWindow(hwnd, IDC_FINDPREV, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACE, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACEALL, FALSE);
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, FALSE);
if (!GetDlgItemTextW2A(uCPEdit, hwnd, IDC_REPLACETEXT, lpefr->szReplace, COUNTOF(lpefr->szReplace)))
DialogEnableWindow(hwnd, IDC_SWAPSTRG, FALSE);
return TRUE;
}
EditSetSearchFlags(hwnd, lpefr);
if (bIsFindDlg) {
lpefr->bFindClose = (IsDlgButtonChecked(hwnd, IDC_FINDCLOSE) == BST_CHECKED) ? TRUE : FALSE;
}
else {
lpefr->bReplaceClose = (IsDlgButtonChecked(hwnd, IDC_FINDCLOSE) == BST_CHECKED) ? TRUE : FALSE;
}
WCHAR tch[FNDRPL_BUFFER] = { L'\0' };
if (!bSwitchedFindReplace) {
// Save MRUs
if (StringCchLenA(lpefr->szFind, COUNTOF(lpefr->szFind))) {
if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8, COUNTOF(lpefr->szFindUTF8))) {
GetDlgItemText(hwnd, IDC_FINDTEXT, tch, COUNTOF(tch));
MRU_Add(mruFind, tch, 0, 0, NULL);
}
}
if (StringCchLenA(lpefr->szReplace, COUNTOF(lpefr->szReplace))) {
if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8))) {
GetDlgItemText(hwnd, IDC_REPLACETEXT, tch, COUNTOF(tch));
MRU_Add(mruReplace, tch, 0, 0, NULL);
}
}
else
StringCchCopyA(lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8), "");
}
else {
GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8, COUNTOF(lpefr->szFindUTF8));
if (!GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8)))
StringCchCopyA(lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8), "");
}
// Reload MRUs
SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_RESETCONTENT, 0, 0);
for (int i = 0; i < MRU_Enum(mruFind, 0, NULL, 0); i++) {
MRU_Enum(mruFind, i, tch, COUNTOF(tch));
SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tch);
}
for (int i = 0; i < MRU_Enum(mruReplace, 0, NULL, 0); i++) {
MRU_Enum(mruReplace, i, tch, COUNTOF(tch));
SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tch);
}
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8);
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8);
if (!bSwitchedFindReplace)
SendMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetFocus()), 1);
BOOL bCloseDlg = FALSE;
if (bIsFindDlg) {
bCloseDlg = lpefr->bFindClose;
}
else if (LOWORD(wParam) != IDOK) {
bCloseDlg = lpefr->bReplaceClose;
}
if (bCloseDlg) {
//EndDialog(hwnd,LOWORD(wParam));
DestroyWindow(hwnd);
}
switch (LOWORD(wParam)) {
case IDOK: // find next
case IDACC_SELTONEXT:
if (!bIsFindDlg)
bReplaceInitialized = TRUE;
EditFindNext(lpefr->hwnd, lpefr, LOWORD(wParam) == IDACC_SELTONEXT || HIBYTE(GetKeyState(VK_SHIFT)));
break;
case IDC_FINDPREV: // find previous
case IDACC_SELTOPREV:
if (!bIsFindDlg)
bReplaceInitialized = TRUE;
EditFindPrev(lpefr->hwnd, lpefr, LOWORD(wParam) == IDACC_SELTOPREV || HIBYTE(GetKeyState(VK_SHIFT)));
break;
case IDC_REPLACE:
bReplaceInitialized = TRUE;
EditReplace(lpefr->hwnd, lpefr);
break;
case IDC_REPLACEALL:
bReplaceInitialized = TRUE;
EditReplaceAll(lpefr->hwnd, lpefr, TRUE);
break;
case IDC_REPLACEINSEL:
bReplaceInitialized = TRUE;
EditReplaceAllInSelection(lpefr->hwnd, lpefr, TRUE);
break;
if (StringCchLenA(lpefr->szReplace, COUNTOF(lpefr->szReplace))) {
if (GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8))) {
GetDlgItemText(hwnd, IDC_REPLACETEXT, tch, COUNTOF(tch));
MRU_Add(mruReplace, tch, 0, 0, NULL);
}
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
else
StringCchCopyA(lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8), "");
}
else {
GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8, COUNTOF(lpefr->szFindUTF8));
if (!GetDlgItemTextW2A(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8)))
StringCchCopyA(lpefr->szReplaceUTF8, COUNTOF(lpefr->szReplaceUTF8), "");
}
// Reload MRUs
SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_RESETCONTENT, 0, 0);
case IDCANCEL:
//EndDialog(hwnd,IDCANCEL);
for (int i = 0; i < MRU_Enum(mruFind, 0, NULL, 0); i++) {
MRU_Enum(mruFind, i, tch, COUNTOF(tch));
SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_ADDSTRING, 0, (LPARAM)tch);
}
for (int i = 0; i < MRU_Enum(mruReplace, 0, NULL, 0); i++) {
MRU_Enum(mruReplace, i, tch, COUNTOF(tch));
SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_ADDSTRING, 0, (LPARAM)tch);
}
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8);
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_REPLACETEXT, lpefr->szReplaceUTF8);
if (!bSwitchedFindReplace)
SendMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetFocus()), 1);
BOOL bCloseDlg = FALSE;
if (bIsFindDlg) {
bCloseDlg = lpefr->bFindClose;
}
else if (LOWORD(wParam) != IDOK) {
bCloseDlg = lpefr->bReplaceClose;
}
if (bCloseDlg) {
//EndDialog(hwnd,LOWORD(wParam));
DestroyWindow(hwnd);
}
switch (LOWORD(wParam)) {
case IDOK: // find next
case IDACC_SELTONEXT:
if (!bIsFindDlg)
bReplaceInitialized = TRUE;
EditFindNext(lpefr->hwnd, lpefr, LOWORD(wParam) == IDACC_SELTONEXT || HIBYTE(GetKeyState(VK_SHIFT)));
break;
case IDC_SWAPSTRG:
{
WCHAR wszFind[FNDRPL_BUFFER] = { L'\0' };
WCHAR wszRepl[FNDRPL_BUFFER] = { L'\0' };
GetDlgItemTextW(hwnd, IDC_FINDTEXT, wszFind, COUNTOF(wszFind));
GetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszRepl, COUNTOF(wszRepl));
SetDlgItemTextW(hwnd, IDC_FINDTEXT, wszRepl);
SetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszFind);
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
}
case IDC_FINDPREV: // find previous
case IDACC_SELTOPREV:
if (!bIsFindDlg)
bReplaceInitialized = TRUE;
EditFindPrev(lpefr->hwnd, lpefr, LOWORD(wParam) == IDACC_SELTOPREV || HIBYTE(GetKeyState(VK_SHIFT)));
break;
case IDC_CHECK_OCC:
{
bDoCheckAllOccurrences = !bDoCheckAllOccurrences;
CheckCmd(GetSystemMenu(hwnd, FALSE), IDS_CHECK_OCC, bDoCheckAllOccurrences);
if (bDoCheckAllOccurrences) { // switched ON
iSaveMarkOcc = iMarkOccurrences;
EnableCmd(GetMenu(hwndMain), IDM_VIEW_MARKOCCURRENCES_ONOFF, FALSE);
iMarkOccurrences = 0;
}
else { // switched OFF
if (iSaveMarkOcc >= 0) {
EnableCmd(GetMenu(hwndMain), IDM_VIEW_MARKOCCURRENCES_ONOFF, TRUE);
if (iSaveMarkOcc != 0) {
SendMessage(hwndMain, WM_COMMAND, (WPARAM)MAKELONG(IDM_VIEW_MARKOCCURRENCES_ONOFF, 1), 0);
}
}
iSaveMarkOcc = -1;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
}
case IDC_REPLACE:
bReplaceInitialized = TRUE;
EditReplace(lpefr->hwnd, lpefr);
break;
case IDACC_FIND:
PostMessage(GetParent(hwnd), WM_COMMAND, MAKELONG(IDM_EDIT_FIND, 1), 0);
case IDC_REPLACEALL:
bReplaceInitialized = TRUE;
EditReplaceAll(lpefr->hwnd, lpefr, TRUE);
break;
case IDACC_REPLACE:
PostMessage(GetParent(hwnd), WM_COMMAND, MAKELONG(IDM_EDIT_REPLACE, 1), 0);
break;
case IDACC_SAVEPOS:
GetDlgPos(hwnd, &xFindReplaceDlg, &yFindReplaceDlg);
break;
case IDACC_RESETPOS:
CenterDlgInParent(hwnd);
xFindReplaceDlg = yFindReplaceDlg = 0;
break;
case IDACC_FINDNEXT:
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDOK, 1), 0);
break;
case IDACC_FINDPREV:
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_FINDPREV, 1), 0);
break;
case IDACC_REPLACENEXT:
if (GetDlgItem(hwnd, IDC_REPLACE) != NULL)
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_REPLACE, 1), 0);
break;
case IDACC_SAVEFIND:
SendMessage(hwndMain, WM_COMMAND, MAKELONG(IDM_EDIT_SAVEFIND, 1), 0);
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8);
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_UNCHECKED);
PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetDlgItem(hwnd, IDC_FINDTEXT)), 1);
case IDC_REPLACEINSEL:
bReplaceInitialized = TRUE;
EditReplaceAllInSelection(lpefr->hwnd, lpefr, TRUE);
break;
}
return TRUE;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
break;
case IDCANCEL:
//EndDialog(hwnd,IDCANCEL);
DestroyWindow(hwnd);
break;
case IDC_SWAPSTRG:
{
WCHAR wszFind[FNDRPL_BUFFER] = { L'\0' };
WCHAR wszRepl[FNDRPL_BUFFER] = { L'\0' };
GetDlgItemTextW(hwnd, IDC_FINDTEXT, wszFind, COUNTOF(wszFind));
GetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszRepl, COUNTOF(wszRepl));
SetDlgItemTextW(hwnd, IDC_FINDTEXT, wszRepl);
SetDlgItemTextW(hwnd, IDC_REPLACETEXT, wszFind);
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
}
break;
case IDC_CHECK_OCC:
{
bDoCheckAllOccurrences = !bDoCheckAllOccurrences;
CheckCmd(GetSystemMenu(hwnd, FALSE), IDS_CHECK_OCC, bDoCheckAllOccurrences);
if (bDoCheckAllOccurrences) { // switched ON
iSaveMarkOcc = iMarkOccurrences;
EnableCmd(GetMenu(hwndMain), IDM_VIEW_MARKOCCURRENCES_ONOFF, FALSE);
iMarkOccurrences = 0;
}
else { // switched OFF
if (iSaveMarkOcc >= 0) {
EnableCmd(GetMenu(hwndMain), IDM_VIEW_MARKOCCURRENCES_ONOFF, TRUE);
if (iSaveMarkOcc != 0) {
SendMessage(hwndMain, WM_COMMAND, (WPARAM)MAKELONG(IDM_VIEW_MARKOCCURRENCES_ONOFF, 1), 0);
}
}
iSaveMarkOcc = -1;
}
bFlagsChanged = TRUE;
SetTimer(hwnd, IDT_TIMER_MRKALL, 100, NULL);
}
break;
case IDACC_FIND:
PostMessage(GetParent(hwnd), WM_COMMAND, MAKELONG(IDM_EDIT_FIND, 1), 0);
break;
case IDACC_REPLACE:
PostMessage(GetParent(hwnd), WM_COMMAND, MAKELONG(IDM_EDIT_REPLACE, 1), 0);
break;
case IDACC_SAVEPOS:
GetDlgPos(hwnd, &xFindReplaceDlg, &yFindReplaceDlg);
break;
case IDACC_RESETPOS:
CenterDlgInParent(hwnd);
xFindReplaceDlg = yFindReplaceDlg = 0;
break;
case IDACC_FINDNEXT:
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDOK, 1), 0);
break;
case IDACC_FINDPREV:
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_FINDPREV, 1), 0);
break;
case IDACC_REPLACENEXT:
if (GetDlgItem(hwnd, IDC_REPLACE) != NULL)
PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_REPLACE, 1), 0);
break;
case IDACC_SAVEFIND:
SendMessage(hwndMain, WM_COMMAND, MAKELONG(IDM_EDIT_SAVEFIND, 1), 0);
SetDlgItemTextA2W(CP_UTF8, hwnd, IDC_FINDTEXT, lpefr->szFindUTF8);
CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED);
CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_UNCHECKED);
PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetDlgItem(hwnd, IDC_FINDTEXT)), 1);
break;
default:
//return FALSE; ???
break;
}
} // WM_COMMAND:
return TRUE;
case WM_SYSCOMMAND:
@ -5141,6 +5149,9 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
MsgBox(MBINFO, IDS_WILDCARDHELP);
}
break;
default:
return FALSE;
}
}
break;
@ -5185,8 +5196,8 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
}
return DefWindowProc(hwnd, umsg, wParam, lParam);
} // WM_COMMAND:
break;
default:
break;
} // switch(umsg)

View File

@ -3580,5 +3580,358 @@ INT UTF8_mbslen(LPCSTR source,INT byte_length)
return wchar_length;
}
///////////////////////////////////////////////////////////////////////////////
//
// Drag N Drop helpers
//
///////////////////////////////////////////////////////////////////////////////
static HANDLE g_hHeap = NULL;
typedef struct tIDROPTARGET {
IDropTarget idt;
LONG lRefCount;
ULONG lNumFormats;
CLIPFORMAT *pFormat;
HWND hWnd;
BOOL bAllowDrop;
DWORD dwKeyState;
IDataObject *pDataObject;
UINT nMsg;
void *pUserData;
DNDCALLBACK pDropProc;
}
IDROPTARGET, *PIDROPTARGET;
typedef struct IDRPTRG_VTBL
{
BEGIN_INTERFACE
HRESULT(STDMETHODCALLTYPE *QueryInterface)(PIDROPTARGET pThis, REFIID riid, void **ppvObject);
ULONG(STDMETHODCALLTYPE *AddRef)(PIDROPTARGET pThis);
ULONG(STDMETHODCALLTYPE *Release)(PIDROPTARGET pThis);
HRESULT(STDMETHODCALLTYPE *DragEnter)(PIDROPTARGET pThis, IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
HRESULT(STDMETHODCALLTYPE *DragOver)(PIDROPTARGET pThis, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
HRESULT(STDMETHODCALLTYPE *DragLeave)(PIDROPTARGET pThis);
HRESULT(STDMETHODCALLTYPE *Drop)(PIDROPTARGET pThis, IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
END_INTERFACE
}
IDRPTRG_VTBL, *PIDRPTRG_VTBL;
//=============================================================================
//
// DragAndDropInit()
//
void DragAndDropInit(HANDLE hHeap)
{
if (g_hHeap == NULL && hHeap == NULL)
g_hHeap = GetProcessHeap();
else if (g_hHeap == NULL)
g_hHeap = hHeap;
OleInitialize(NULL); // just in case
return;
}
//=============================================================================
//
// GetDnDHeap()
//
static HANDLE GetDnDHeap()
{
if (g_hHeap == NULL) {
g_hHeap = GetProcessHeap();
}
return g_hHeap;
}
//=============================================================================
//
// IDRPTRG_AddRef()
//
static ULONG STDMETHODCALLTYPE IDRPTRG_AddRef(PIDROPTARGET pThis)
{
return InterlockedIncrement(&pThis->lRefCount);
}
//=============================================================================
//
// IDRPTRG_QueryDataObject()
//
static BOOL IDRPTRG_QueryDataObject(PIDROPTARGET pDropTarget, IDataObject *pDataObject)
{
ULONG lFmt;
FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
for (lFmt = 0; lFmt < pDropTarget->lNumFormats; lFmt++)
{
fmtetc.cfFormat = pDropTarget->pFormat[lFmt];
if (pDataObject->lpVtbl->QueryGetData(pDataObject, &fmtetc) == S_OK)
return TRUE;
}
return FALSE;
}
//=============================================================================
//
// IDRPTRG_QueryInterface()
//
static HRESULT STDMETHODCALLTYPE IDRPTRG_QueryInterface(PIDROPTARGET pThis, REFIID riid,
LPVOID *ppvObject)
{
*ppvObject = NULL;
if (IsEqualGUID(riid, &IID_IUnknown))
{
IDRPTRG_AddRef(pThis);
*ppvObject = pThis;
return S_OK;
}
else if (IsEqualGUID(riid, &IID_IDropTarget))
{
IDRPTRG_AddRef(pThis);
*ppvObject = pThis;
return S_OK;
}
return E_NOINTERFACE;
}
//=============================================================================
//
// IDRPTRG_Release()
//
static ULONG STDMETHODCALLTYPE IDRPTRG_Release(PIDROPTARGET pThis)
{
ULONG nCount;
if ((nCount = InterlockedDecrement(&pThis->lRefCount)) == 0)
{
HeapFree(GetDnDHeap(), 0, pThis);
return 0;
}
return nCount;
}
//=============================================================================
//
// IDRPTRG_DropEffect()
//
static DWORD IDRPTRG_DropEffect(DWORD dwKeyState, POINTL pt, DWORD dwAllowed)
{
DWORD dwEffect = 0;
if (dwKeyState & MK_CONTROL)
dwEffect = dwAllowed & DROPEFFECT_COPY;
else if (dwKeyState & MK_SHIFT)
dwEffect = dwAllowed & DROPEFFECT_MOVE;
if (dwEffect == 0)
{
if (dwAllowed & DROPEFFECT_COPY)
dwEffect = DROPEFFECT_COPY;
if (dwAllowed & DROPEFFECT_MOVE)
dwEffect = DROPEFFECT_MOVE;
}
UNUSED(pt);
return dwEffect;
}
//=============================================================================
//
// IDRPTRG_DragEnter()
//
static HRESULT STDMETHODCALLTYPE IDRPTRG_DragEnter(PIDROPTARGET pThis, IDataObject *pDataObject,
DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
{
pThis->bAllowDrop = IDRPTRG_QueryDataObject(pThis, pDataObject);
if (pThis->bAllowDrop)
{
*pdwEffect = IDRPTRG_DropEffect(dwKeyState, pt, *pdwEffect);
SetFocus(pThis->hWnd);
}
else
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
//=============================================================================
//
// IDRPTRG_DragOver()
//
static HRESULT STDMETHODCALLTYPE IDRPTRG_DragOver(PIDROPTARGET pThis, DWORD dwKeyState, POINTL pt,
DWORD *pdwEffect)
{
if (pThis->bAllowDrop)
{
pThis->dwKeyState = dwKeyState;
*pdwEffect = IDRPTRG_DropEffect(dwKeyState, pt, *pdwEffect);
}
else
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
//=============================================================================
//
// IDRPTRG_DragLeave()
//
static HRESULT STDMETHODCALLTYPE IDRPTRG_DragLeave(PIDROPTARGET pThis)
{
UNUSED(pThis);
return S_OK;
}
//=============================================================================
//
// IDRPTRG_Drop()
//
static HRESULT STDMETHODCALLTYPE IDRPTRG_Drop(PIDROPTARGET pThis, IDataObject *pDataObject,
DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
{
FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM medium;
ULONG lFmt;
DROPDATA DropData;
UNUSED(dwKeyState);
UNUSED(pt);
if (pThis->bAllowDrop)
{
for (lFmt = 0; lFmt < pThis->lNumFormats; lFmt++)
{
fmtetc.cfFormat = pThis->pFormat[lFmt];
if (pDataObject->lpVtbl->QueryGetData(pDataObject, &fmtetc) == S_OK)
break;
}
if (lFmt < pThis->lNumFormats)
{
pDataObject->lpVtbl->GetData(pDataObject, &fmtetc, &medium);
*pdwEffect = DROPEFFECT_NONE;
if (pThis->pDropProc != NULL) {
*pdwEffect = (*pThis->pDropProc)(pThis->pFormat[lFmt], medium.hGlobal, pThis->hWnd, pThis->dwKeyState, pt, pThis->pUserData);
}
else if (pThis->nMsg != WM_NULL)
{
DropData.cf = pThis->pFormat[lFmt];
DropData.dwKeyState = pThis->dwKeyState;
DropData.hData = medium.hGlobal;
DropData.pt = pt;
*pdwEffect = (DWORD)SendMessage(pThis->hWnd, pThis->nMsg, (WPARAM)&DropData, (LPARAM)pThis->pUserData);
}
if (*pdwEffect != DROPEFFECT_NONE)
ReleaseStgMedium(&medium);
}
}
else
*pdwEffect = DROPEFFECT_NONE;
return S_OK;
}
//=============================================================================
//
// CreateDropTarget()
//
IDropTarget* CreateDropTarget(CLIPFORMAT *pFormat, ULONG lFmt, HWND hWnd, UINT nMsg,
DWORD(*pDropProc)(CLIPFORMAT cf, HGLOBAL hData, HWND hWnd, DWORD dwKeyState, POINTL pt, void *pUserData),
void *pUserData)
{
PIDROPTARGET pRet;
static IDRPTRG_VTBL idt_vtbl = {
IDRPTRG_QueryInterface,
IDRPTRG_AddRef,
IDRPTRG_Release,
IDRPTRG_DragEnter,
IDRPTRG_DragOver,
IDRPTRG_DragLeave,
IDRPTRG_Drop };
if ((pRet = HeapAlloc(GetDnDHeap(), 0, sizeof(IDROPTARGET) + lFmt * sizeof(CLIPFORMAT))) == NULL)
return NULL;
pRet->pFormat = (CLIPFORMAT *)(((char *)pRet) + sizeof(IDROPTARGET));
pRet->idt.lpVtbl = (IDropTargetVtbl*)&idt_vtbl;
pRet->lRefCount = 1;
pRet->hWnd = hWnd;
pRet->nMsg = nMsg;
pRet->bAllowDrop = FALSE;
pRet->dwKeyState = 0;
pRet->lNumFormats = lFmt;
pRet->pDropProc = pDropProc;
pRet->pUserData = pUserData;
for (lFmt = 0; lFmt < pRet->lNumFormats; lFmt++) {
pRet->pFormat[lFmt] = pFormat[lFmt];
}
return (IDropTarget *)pRet;
}
//=============================================================================
//
// RegisterDragAndDrop()
//
PDROPTARGET RegisterDragAndDrop(HWND hWnd, CLIPFORMAT *pFormat, ULONG lFmt, UINT nMsg, DNDCALLBACK pDropProc, void *pUserData)
{
IDropTarget *pTarget;
if ((pTarget = CreateDropTarget(pFormat, lFmt, hWnd, nMsg, pDropProc, pUserData)) == NULL)
return NULL;
if (RegisterDragDrop(hWnd, pTarget) != S_OK)
{
HeapFree(GetDnDHeap(), 0, pTarget);
return NULL;
}
return (PDROPTARGET)pTarget;
}
//=============================================================================
//
// RevokeDragAndDrop()
//
PDROPTARGET RevokeDragAndDrop(PDROPTARGET pTarget)
{
if (pTarget == NULL)
return NULL;
if (((PIDROPTARGET)pTarget)->hWnd != NULL)
{
if (GetWindowLongPtr(((PIDROPTARGET)pTarget)->hWnd, GWLP_WNDPROC) != 0)
RevokeDragDrop(((PIDROPTARGET)pTarget)->hWnd);
}
((IDropTarget *)pTarget)->lpVtbl->Release((IDropTarget *)pTarget);
return NULL;
}
/// End of Helpers.c \\\

View File

@ -436,6 +436,25 @@ inline HRESULT PathCchRenameExtension(PWSTR p,size_t l,PCWSTR a) { UNUSED(l); re
inline HRESULT PathCchRemoveFileSpec(PWSTR p,size_t l) { UNUSED(l); return (PathRemoveFileSpec(p) ? S_OK : E_FAIL); }
// special Drag and Drop Handling
typedef struct tDROPDATA
{
CLIPFORMAT cf;
POINTL pt;
DWORD dwKeyState;
HGLOBAL hData;
}
DROPDATA, *PDROPDATA;
typedef struct tDROPTARGET *PDROPTARGET;
typedef DWORD(*DNDCALLBACK)(CLIPFORMAT cf, HGLOBAL hData, HWND hWnd, DWORD dwKeyState, POINTL pt, void *pUserData);
void DragAndDropInit(HANDLE hHeap);
PDROPTARGET RegisterDragAndDrop(HWND hWnd, CLIPFORMAT *pFormat, ULONG lFmt, UINT nMsg, DNDCALLBACK, void *pUserData);
PDROPTARGET RevokeDragAndDrop(PDROPTARGET pTarget);
#endif //_NP3_HELPERS_H_
/// End of Helpers.h \\\

View File

@ -310,6 +310,13 @@ WCHAR g_wchWorkingDirectory[MAX_PATH+2] = { L'\0' };
static UT_icd UndoRedoSelection_icd = { sizeof(UndoRedoSelection_t), NULL, NULL, NULL };
static UT_array* UndoRedoSelectionUTArray = NULL;
static CLIPFORMAT cfDrpF = CF_HDROP;
static POINTL ptDummy = { 0, 0 };
static PDROPTARGET pDropTarget = NULL;
static DWORD DropFilesProc(CLIPFORMAT cf, HGLOBAL hData, HWND hWnd, DWORD dwKeyState, POINTL pt, void *pUserData);
//=============================================================================
//
// Flags
@ -644,6 +651,9 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n
if (!hwnd)
return FALSE;
// init DragnDrop handler
DragAndDropInit(NULL);
if (IsVista()) {
SciCall_UnBufferedDraw(); // Current platforms perform window buffering so it is almost always better for this option to be turned off.
if (iSciDirectWriteTech >= 0)
@ -657,8 +667,8 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n
while (GetMessage(&msg,NULL,0,0))
{
if (IsWindow(hDlgFindReplace) && (msg.hwnd == hDlgFindReplace || IsChild(hDlgFindReplace,msg.hwnd)))
if (IsDialogMessage(hDlgFindReplace,&msg) || TranslateAccelerator(hDlgFindReplace,hAccFindReplace,&msg))
if (IsWindow(hDlgFindReplace) && (msg.hwnd == hDlgFindReplace || IsChild(hDlgFindReplace, msg.hwnd)))
if (TranslateAccelerator(hDlgFindReplace, hAccFindReplace, &msg) || IsDialogMessage(hDlgFindReplace, &msg))
continue;
if (!TranslateAccelerator(hwnd,hAccMain,&msg)) {
@ -1169,7 +1179,6 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
MsgDropFiles(hwnd, wParam, lParam);
break;
case WM_COPYDATA:
return MsgCopyData(hwnd, wParam, lParam);
@ -1406,6 +1415,7 @@ LRESULT MsgCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
// Drag & Drop
DragAcceptFiles(hwnd,TRUE);
pDropTarget = RegisterDragAndDrop(hwnd, &cfDrpF, 1, WM_NULL, DropFilesProc, (void*)hwndEdit);
// File MRU
pFileMRU = MRU_Create(L"Recent Files",MRU_NOCASE,32);
@ -1628,6 +1638,7 @@ void MsgEndSession(HWND hwnd, UINT umsg)
wininfo = GetMyWindowPlacement(hwnd, NULL);
DragAcceptFiles(hwnd, FALSE);
RevokeDragAndDrop(pDropTarget);
// Terminate clipboard watching
if (flagPasteBoard) {
@ -1849,9 +1860,11 @@ void MsgDropFiles(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (OpenFileDlg(hwndMain, tchFile, COUNTOF(tchFile), szBuf))
FileLoad(FALSE, FALSE, FALSE, FALSE, tchFile);
}
else
else if (PathFileExists(szBuf))
FileLoad(FALSE, FALSE, FALSE, FALSE, szBuf);
else
// Windows Bug: wParam (HDROP) pointer is corrupted if dropped from 32-bit App
MsgBox(MBWARN, IDS_DROP_NO_FILE);
if (DragQueryFile(hDrop, (UINT)(-1), NULL, 0) > 1)
MsgBox(MBWARN, IDS_ERR_DROP);
@ -1862,6 +1875,51 @@ void MsgDropFiles(HWND hwnd, WPARAM wParam, LPARAM lParam)
}
//=============================================================================
//
// DropFilesProc() - Handles DROPFILES
//
//
static DWORD DropFilesProc(CLIPFORMAT cf, HGLOBAL hData, HWND hWnd, DWORD dwKeyState, POINTL pt, void *pUserData)
{
DWORD dwEffect = DROPEFFECT_NONE;
//HWND hEditWnd = (HWND)pUserData;
UNUSED(pUserData);
if (cf == CF_HDROP)
{
WCHAR szBuf[MAX_PATH + 40];
HDROP hDrop = (HDROP)hData;
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
DragQueryFile(hDrop, 0, szBuf, COUNTOF(szBuf));
if (PathIsDirectory(szBuf)) {
WCHAR tchFile[MAX_PATH] = { L'\0' };
if (OpenFileDlg(hWnd, tchFile, COUNTOF(tchFile), szBuf))
FileLoad(FALSE, FALSE, FALSE, FALSE, tchFile);
}
else
FileLoad(FALSE, FALSE, FALSE, FALSE, szBuf);
if (DragQueryFile(hDrop, (UINT)(-1), NULL, 0) > 1)
MsgBox(MBWARN, IDS_ERR_DROP);
dwEffect = DROPEFFECT_COPY;
}
UNUSED(dwKeyState);
UNUSED(pt);
return dwEffect;
}
//=============================================================================
//
// MsgCopyData() - Handles WM_COPYDATA

Binary file not shown.

View File

@ -460,6 +460,7 @@
#define IDS_ERR_ACCESSDENIED 50041
#define IDS_WARN_UNKNOWN_EXT 50042
#define IDS_REGEX_INVALID 50043
#define IDS_DROP_NO_FILE 50044
#define IDS_CMDLINEHELP 60000
#define IDM_EDIT_INSERT_GUID 60001
#define IDC_STATIC -1