error.c
来自「CC386 is a general-purpose 32-bit C comp」· C语言 代码 · 共 479 行 · 第 1/2 页
C
479 行
return CallWindowProc(oldproc, hwnd, iMessage, wParam, lParam);
}
//-------------------------------------------------------------------------
LRESULT CALLBACK _export errorProc(HWND hwnd, UINT iMessage, WPARAM wParam,
LPARAM lParam)
{
static HWND hsubwnds[4]; // build, debug, find1, find2
static int index;
static HFONT tabBoldFont, tabNormalFont;
TC_ITEM tie;
NMHDR *h;
DRAWITEMSTRUCT *dr;
HFONT font;
RECT r, r1, *pr;
charinfo s;
switch (iMessage)
{
case WM_MDIACTIVATE:
SendMessage(hwndCtrl, LCF_SETACTIVE, 0, lParam == (LPARAM)hwnd);
if (lParam == (LPARAM)hwnd)
SendMessage(hwndSourceTab, WM_SETACTIVETAB, 0, (LPARAM)hwnd);
return TRUE;
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
break;
case WM_NOTIFY:
h = (NMHDR*)lParam;
switch (h->code)
{
case TCN_SELCHANGE:
ShowWindow(hsubwnds[index], SW_HIDE);
index = TabCtrl_GetCurSel(hwndTabCtrl);
ShowWindow(hsubwnds[index], SW_SHOW);
break;
}
break;
case WM_COMMAND:
// switch(LOWORD(wParam)) {
// }
break;
case WM_DRAWITEM:
dr = (DRAWITEMSTRUCT*)lParam;
if (dr->itemState &ODS_SELECTED)
{
font = tabBoldFont;
}
else
font = tabNormalFont;
font = SelectObject(dr->hDC, font);
TextOut(dr->hDC, dr->rcItem.left + 4, dr->rcItem.bottom - 16,
nameTags[dr->itemID], strlen(nameTags[dr->itemID]));
font = SelectObject(dr->hDC, font);
break;
case WM_SETTEXT:
if (!lParam)
SendMessage(hsubwnds[wParam], WM_SETTEXT, 0, (LPARAM)"");
else
{
int lindex = SendMessage(hsubwnds[wParam], EM_LINEINDEX,
0x7fffffff, 0);
SendMessage(hsubwnds[wParam], EM_HIDESELECTION, 1, 0);
s.min = s.max = lindex;
SendMessage(hsubwnds[wParam], EM_EXSETSEL, 0, (LPARAM) &s);
SendMessage(hsubwnds[wParam], EM_REPLACESEL, FALSE, lParam);
SendMessage(hsubwnds[wParam], EM_HIDESELECTION, 0, 0);
SendMessage(hsubwnds[wParam], EM_SCROLLCARET, 0, 0);
}
return 0;
case WM_SETFOCUS:
SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
SendMessage(hsubwnds[index], WM_SETFOCUS, wParam, lParam);
break;
case WM_CREATE:
hwndError = hwnd;
GetClientRect(hwnd, &r);
hwndCtrl = CreateControlWindow(DID_ERRORWND, hwnd, &r, (int)(
(LPMDICREATESTRUCT)(*(int*)lParam))->lParam, szErrorTitle);
SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
tabBoldFont = CreateFontIndirect(&Boldfontdata);
tabNormalFont = CreateFontIndirect(&Normalfontdata);
#ifndef __CCDL__
#ifndef TCS_BOTTOM
#define TCS_BOTTOM 2
#endif
#endif
hwndTabCtrl = CreateWindow(WC_TABCONTROL, 0, WS_CHILD +
WS_CLIPSIBLINGS + WS_VISIBLE + WS_DLGFRAME + TCS_OWNERDRAWFIXED
+ TCS_FOCUSNEVER + TCS_FIXEDWIDTH + TCS_BOTTOM, r.left, r.top,
r.right - r.left, r.bottom - r.top, hwndCtrl, 0, hInstance, 0);
SendMessage(hwndTabCtrl, WM_SETFONT, (WPARAM)tabNormalFont, 0);
OffsetRect(&r, - r.left, - r.top);
TabCtrl_AdjustRect(hwndTabCtrl, FALSE, &r);
hsubwnds[0] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
WS_VISIBLE + WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT +
ES_MULTILINE, r.left, r.top, r.right - r.left, r.bottom - r.top,
hwndTabCtrl, (HMENU)ID_EDITCHILD, hInstance, 0);
hsubwnds[1] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
(HMENU)ID_EDITCHILD, hInstance, 0);
hsubwnds[2] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
(HMENU)ID_EDITCHILD, hInstance, 0);
hsubwnds[3] = CreateWindowEx(0, "XBUILDEDIT", 0, WS_CHILD +
WS_VSCROLL + ES_NOHIDESEL + WS_BORDER + ES_LEFT + ES_MULTILINE,
r.left, r.top, r.right - r.left, r.bottom - r.top, hwndTabCtrl,
(HMENU)ID_EDITCHILD, hInstance, 0);
SendMessage(hsubwnds[0], EM_LIMITTEXT, 4 *65536, 0);
SendMessage(hsubwnds[1], EM_LIMITTEXT, 4 *65536, 0);
SendMessage(hsubwnds[2], EM_LIMITTEXT, 4 *65536, 0);
SendMessage(hsubwnds[3], EM_LIMITTEXT, 4 *65536, 0);
SendMessage(hsubwnds[0], WM_SETFONT, (WPARAM)tabNormalFont, 0);
SendMessage(hsubwnds[1], WM_SETFONT, (WPARAM)tabNormalFont, 0);
SendMessage(hsubwnds[2], WM_SETFONT, (WPARAM)tabNormalFont, 0);
SendMessage(hsubwnds[3], WM_SETFONT, (WPARAM)tabNormalFont, 0);
tie.mask = TCIF_TEXT;
tie.iImage = - 1;
tie.pszText = nameTags[0];
TabCtrl_InsertItem(hwndTabCtrl, 0, &tie);
tie.mask = TCIF_TEXT;
tie.iImage = - 1;
tie.pszText = nameTags[1];
TabCtrl_InsertItem(hwndTabCtrl, 1, &tie);
tie.mask = TCIF_TEXT;
tie.iImage = - 1;
tie.pszText = nameTags[2];
TabCtrl_InsertItem(hwndTabCtrl, 2, &tie);
tie.mask = TCIF_TEXT;
tie.iImage = - 1;
tie.pszText = nameTags[3];
TabCtrl_InsertItem(hwndTabCtrl, 3, &tie);
return 0;
case WM_CLOSE:
dmgrHideWindow(DID_ERRORWND, TRUE);
return 0;
case WM_DESTROY:
dmgrRemoveClient((CCW_params*)GetWindowLong(hwndCtrl, 0));
DestroyWindow(hwndTabCtrl);
DestroyWindow(hsubwnds[0]);
DestroyWindow(hsubwnds[1]);
DestroyWindow(hsubwnds[2]);
DestroyWindow(hsubwnds[3]);
DestroyWindow(hwndCtrl);
break;
case WM_SELERRWINDOW:
ShowWindow(hsubwnds[index], SW_HIDE);
index = (int)lParam;
SendMessage(hwnd, WM_SETTEXT, index, 0);
ShowWindow(hsubwnds[index], SW_SHOW);
TabCtrl_SetCurSel(hwndTabCtrl, index);
break;
case WM_ERRDONESCAN:
TagRemoveAll(lParam == ERR_FIND1_WINDOW ? TAG_FIF1 : TAG_FIF2);
ScanForTags(lParam == ERR_FIND1_WINDOW ? TAG_FIF1 : TAG_FIF2,
lParam == ERR_FIND1_WINDOW ? hsubwnds[2]: hsubwnds[3]);
break;
case WM_SIZE:
MoveWindow(hwndCtrl, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
r.left = 0;
r.right = LOWORD(lParam);
r.top = 0;
r.bottom = HIWORD(lParam);
SendMessage(hwndCtrl, LCF_ADJUSTRECT, 0, (LPARAM) &r);
MoveWindow(hwndTabCtrl, r.left, r.top, r.right - r.left, r.bottom -
r.top, TRUE);
GetClientRect(hwndTabCtrl, &r);
// OffsetRect(&r,-r.left,-r.top) ;
TabCtrl_AdjustRect(hwndTabCtrl, FALSE, &r);
MoveWindow(hsubwnds[0], r.left, r.top, r.right - r.left, r.bottom -
r.top, TRUE);
MoveWindow(hsubwnds[1], r.left, r.top, r.right - r.left, r.bottom -
r.top, TRUE);
MoveWindow(hsubwnds[2], r.left, r.top, r.right - r.left, r.bottom -
r.top, TRUE);
MoveWindow(hsubwnds[3], r.left, r.top, r.right - r.left, r.bottom -
r.top, TRUE);
return 0;
default:
break;
}
return DefMDIChildProc(hwnd, iMessage, wParam, lParam);
}
//-------------------------------------------------------------------------
void RegisterErrorWindow(void)
{
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));
wc.style = 0;
wc.lpfnWndProc = &errorProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szErrorClassName;
RegisterClass(&wc);
GetClassInfo(0, "richedit", &wc);
oldproc = wc.lpfnWndProc;
wc.lpfnWndProc = &buildEditProc;
wc.lpszClassName = "XBUILDEDIT";
wc.hInstance = hInstance;
wc.hbrBackground = 0;
RegisterClass(&wc);
}
//-------------------------------------------------------------------------
void CreateErrorWindow(void)
{
MDICREATESTRUCT mc;
RECT r;
if (hwndError)
return ;
mc.szClass = szErrorClassName;
mc.szTitle = szErrorTitle;
mc.hOwner = hInstance;
mc.x = CW_USEDEFAULT;
mc.y = CW_USEDEFAULT;
mc.cx = 200;
mc.cy = 200;
mc.style = WS_CHILD | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
mc.lParam = (LPARAM)0;
hwndError = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM) &mc);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?