📄 notepad2.c
字号:
SendMessage(hwndEdit,SCI_BEGINUNDOACTION,0,0);
if (SendMessage(hwndEdit,SCI_GETLENGTH,0,0) > 0)
SendMessage(hwndEdit,SCI_NEWLINE,0,0);
SendMessage(hwndEdit,SCI_PASTE,0,0);
SendMessage(hwndEdit,SCI_NEWLINE,0,0);
SendMessage(hwndEdit,SCI_ENDUNDOACTION,0,0);
bAutoIndent = bAutoIndent2;
}
}
else
bLastCopyFromMe = FALSE;
if (hwndNextCBChain)
SendMessage(hwndNextCBChain,WM_DRAWCLIPBOARD,wParam,lParam);
break;
case WM_CHANGECBCHAIN:
if ((HWND)wParam == hwndNextCBChain)
hwndNextCBChain = (HWND)lParam;
if (hwndNextCBChain)
SendMessage(hwndNextCBChain,WM_CHANGECBCHAIN,lParam,wParam);
break;
case WM_TRAYMESSAGE:
switch(lParam)
{
case WM_RBUTTONUP: {
HMENU hMenu = LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_POPUPMENU));
HMENU hMenuPopup = GetSubMenu(hMenu,2);
POINT pt;
int iCmd;
SetForegroundWindow(hwnd);
GetCursorPos(&pt);
SetMenuDefaultItem(hMenuPopup,IDM_TRAY_RESTORE,FALSE);
iCmd = TrackPopupMenu(hMenuPopup,
TPM_NONOTIFY|TPM_RETURNCMD|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
pt.x,pt.y,0,hwnd,NULL);
PostMessage(hwnd,WM_NULL,0,0);
DestroyMenu(hMenu);
if (iCmd == IDM_TRAY_RESTORE) {
RestoreWndFromTray(hwnd);
ShowOwnedPopups(hwnd,TRUE);
ShowNotifyIcon(hwnd,FALSE);
bHideIcon = FALSE;
}
else if (iCmd == IDM_TRAY_EXIT) {
//ShowNotifyIcon(hwnd,FALSE);
SendMessage(hwnd,WM_CLOSE,0,0);
}
}
return TRUE;
case WM_LBUTTONDBLCLK:
RestoreWndFromTray(hwnd);
ShowOwnedPopups(hwnd,TRUE);
bHideIcon = TRUE;
return TRUE;
case WM_LBUTTONUP:
if(bHideIcon) {
ShowNotifyIcon(hwnd,FALSE);
bHideIcon = FALSE;
}
return TRUE;
}
break;
default:
if (umsg == msgTaskbarCreated) {
if (!IsWindowVisible(hwnd))
ShowNotifyIcon(hwnd,TRUE);
SetNotifyIconTitle(hwnd);
return(0);
}
return DefWindowProc(hwnd,umsg,wParam,lParam);
}
return(0);
}
//=============================================================================
//
// MsgCreate() - Handles WM_CREATE
//
//
LRESULT MsgCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
{
HINSTANCE hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
// Setup edit control
hwndEdit = EditCreate(hwnd);
// Word wrap
SendMessage(hwndEdit,SCI_SETWRAPMODE,(fWordWrap)?SC_WRAP_WORD:SC_WRAP_NONE,0);
SendMessage(hwndEdit,SCI_SETWRAPSTARTINDENT,iWordWrapIndent,0);
if (bShowWordWrapSymbols) {
SendMessage(hwndEdit,SCI_SETWRAPVISUALFLAGSLOCATION,WrapSymbols[iWordWrapSymbols].location,0);
SendMessage(hwndEdit,SCI_SETWRAPVISUALFLAGS,WrapSymbols[iWordWrapSymbols].flags,0);
}
else {
SendMessage(hwndEdit,SCI_SETWRAPVISUALFLAGS,0,0);
}
// Indent Guides
Style_SetIndentGuides(hwndEdit,bShowIndentGuides);
// Tabs
SendMessage(hwndEdit,SCI_SETUSETABS,!bTabsAsSpaces,0);
SendMessage(hwndEdit,SCI_SETTABWIDTH,iTabWidth,0);
SendMessage(hwndEdit,SCI_SETINDENT,iIndentWidth,0);
// Long Lines
if (bMarkLongLines)
SendMessage(hwndEdit,SCI_SETEDGEMODE,(iLongLineMode == EDGE_LINE)?EDGE_LINE:EDGE_BACKGROUND,0);
else
SendMessage(hwndEdit,SCI_SETEDGEMODE,EDGE_NONE,0);
SendMessage(hwndEdit,SCI_SETEDGECOLUMN,iLongLinesLimit,0);
// Margins
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,2,0);
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,1,(bShowSelectionMargin)?16:0);
UpdateLineNumberWidth();
//SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,
// (bShowLineNumbers)?SendMessage(hwndEdit,SCI_TEXTWIDTH,STYLE_LINENUMBER,(LPARAM)"_999999_"):0);
// Nonprinting characters
SendMessage(hwndEdit,SCI_SETVIEWWS,(bViewWhiteSpace)?SCWS_VISIBLEALWAYS:SCWS_INVISIBLE,0);
SendMessage(hwndEdit,SCI_SETVIEWEOL,bViewEOLs,0);
if (PrivateIsAppThemed()) {
bIsAppThemed = TRUE;
SetWindowLong(hwndEdit,GWL_EXSTYLE,GetWindowLong(hwndEdit,GWL_EXSTYLE) & ~WS_EX_CLIENTEDGE);
SetWindowPos(hwndEdit,NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
}
else {
bIsAppThemed = FALSE;
}
// Create Toolbar and Statusbar
CreateBars(hwnd,hInstance);
// Window Initialization
CreateWindow(
WC_STATIC,
NULL,
WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
0,0,10,10,
hwnd,
(HMENU)IDC_FILENAME,
hInstance,
NULL);
SetDlgItemText(hwnd,IDC_FILENAME,szCurFile);
// Menu
//SetMenuDefaultItem(GetSubMenu(GetMenu(hwnd),0),0);
// Drag & Drop
DragAcceptFiles(hwnd,TRUE);
// File MRU
pFileMRU = MRU_Create("Recent Files",MRU_NOCASE,32);
MRU_Load(pFileMRU);
mruFind = MRU_Create("Recent Find",(/*IsWindowsNT()*/1) ? MRU_UTF8 : 0,16);
MRU_Load(mruFind);
mruReplace = MRU_Create("Recent Replace",(/*IsWindowsNT()*/1) ? MRU_UTF8 : 0,16);
MRU_Load(mruReplace);
return(0);
}
//=============================================================================
//
// CreateBars() - Create Toolbar and Statusbar
//
//
void CreateBars(HWND hwnd,HINSTANCE hInstance)
{
RECT rc;
REBARINFO rbi;
REBARBANDINFO rbBand;
BITMAP bmp;
HBITMAP hbmp;
HIMAGELIST himl;
char szTmp[MAX_PATH];
BOOL bExternalBitmap = TRUE;
DWORD dwToolbarStyle = WS_TOOLBAR;
DWORD dwStatusbarStyle = WS_CHILD | WS_CLIPSIBLINGS;
DWORD dwReBarStyle = WS_REBAR;
BOOL bIsAppThemed = PrivateIsAppThemed();
int i,n;
char tchDesc[256];
char tchIndex[256];
char *pIniSection = NULL;
int cIniSection = 0;
if (bShowToolbar)
dwReBarStyle |= WS_VISIBLE;
hwndToolbar = CreateWindowEx(0,TOOLBARCLASSNAME,NULL,dwToolbarStyle,
0,0,0,0,hwnd,(HMENU)IDC_TOOLBAR,hInstance,NULL);
SendMessage(hwndToolbar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
// Add normal Toolbar Bitmap
hbmp = NULL;
if (lstrlen(tchToolbarBitmap))
{
if (!SearchPath(NULL,tchToolbarBitmap,NULL,COUNTOF(szTmp),szTmp,NULL))
lstrcpy(szTmp,tchToolbarBitmap);
hbmp = LoadImage(NULL,szTmp,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
}
if (!hbmp) {
hbmp = LoadImage(hInstance,MAKEINTRESOURCE(IDR_MAINWND),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
bExternalBitmap = FALSE;
}
GetObject(hbmp,sizeof(BITMAP),&bmp);
himl = ImageList_Create(bmp.bmWidth/NUMTOOLBITMAPS,bmp.bmHeight,ILC_COLOR32|ILC_MASK,0,0);
ImageList_AddMasked(himl,hbmp,CLR_DEFAULT);
DeleteObject(hbmp);
SendMessage(hwndToolbar,TB_SETIMAGELIST,0,(LPARAM)himl);
// Optionally add hot Toolbar Bitmap
hbmp = NULL;
if (lstrlen(tchToolbarBitmapHot))
{
if (!SearchPath(NULL,tchToolbarBitmapHot,NULL,COUNTOF(szTmp),szTmp,NULL))
lstrcpy(szTmp,tchToolbarBitmapHot);
if (hbmp = LoadImage(NULL,szTmp,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE))
{
GetObject(hbmp,sizeof(BITMAP),&bmp);
himl = ImageList_Create(bmp.bmWidth/NUMTOOLBITMAPS,bmp.bmHeight,ILC_COLOR32|ILC_MASK,0,0);
ImageList_AddMasked(himl,hbmp,CLR_DEFAULT);
DeleteObject(hbmp);
SendMessage(hwndToolbar,TB_SETHOTIMAGELIST,0,(LPARAM)himl);
}
}
// Optionally add disabled Toolbar Bitmap
hbmp = NULL;
if (lstrlen(tchToolbarBitmapDisabled))
{
if (!SearchPath(NULL,tchToolbarBitmapDisabled,NULL,COUNTOF(szTmp),szTmp,NULL))
lstrcpy(szTmp,tchToolbarBitmapDisabled);
if (hbmp = LoadImage(NULL,szTmp,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE))
{
GetObject(hbmp,sizeof(BITMAP),&bmp);
himl = ImageList_Create(bmp.bmWidth/NUMTOOLBITMAPS,bmp.bmHeight,ILC_COLOR32|ILC_MASK,0,0);
ImageList_AddMasked(himl,hbmp,CLR_DEFAULT);
DeleteObject(hbmp);
SendMessage(hwndToolbar,TB_SETDISABLEDIMAGELIST,0,(LPARAM)himl);
}
}
// Load toolbar labels
pIniSection = LocalAlloc(LPTR,32*1024);
cIniSection = LocalSize(pIniSection);
LoadIniSection("Toolbar Labels",pIniSection,cIniSection);
n = 1;
for (i = 0; i < COUNTOF(tbbMainWnd); i++) {
if (tbbMainWnd[i].fsStyle == TBSTYLE_SEP)
continue;
wsprintf(tchIndex,"%02i",n++);
if (IniSectionGetString(pIniSection,tchIndex,"",tchDesc,COUNTOF(tchDesc))) {
tbbMainWnd[i].iString = SendMessage(hwndToolbar,TB_ADDSTRING,0,(LPARAM)tchDesc);
tbbMainWnd[i].fsStyle |= BTNS_AUTOSIZE | BTNS_SHOWTEXT;
}
else
tbbMainWnd[i].fsStyle &= ~(BTNS_AUTOSIZE | BTNS_SHOWTEXT);
}
LocalFree(pIniSection);
SendMessage(hwndToolbar,TB_SETEXTENDEDSTYLE,0,
SendMessage(hwndToolbar,TB_GETEXTENDEDSTYLE,0,0) | TBSTYLE_EX_MIXEDBUTTONS);
SendMessage(hwndToolbar,TB_ADDBUTTONS,NUMINITIALTOOLS,(LPARAM)tbbMainWnd);
if (Toolbar_SetButtons(hwndToolbar,IDT_FILE_NEW,tchToolbarButtons,tbbMainWnd,COUNTOF(tbbMainWnd)) == 0)
SendMessage(hwndToolbar,TB_ADDBUTTONS,NUMINITIALTOOLS,(LPARAM)tbbMainWnd);
SendMessage(hwndToolbar,TB_GETITEMRECT,0,(LPARAM)&rc);
//SendMessage(hwndToolbar,TB_SETINDENT,2,0);
if (bShowStatusbar)
dwStatusbarStyle |= WS_VISIBLE;
hwndStatus = CreateStatusWindow(dwStatusbarStyle,NULL,hwnd,IDC_STATUSBAR);
// Create ReBar and add Toolbar
hwndReBar = CreateWindowEx(WS_EX_TOOLWINDOW,REBARCLASSNAME,NULL,dwReBarStyle,
0,0,0,0,hwnd,(HMENU)IDC_REBAR,hInstance,NULL);
rbi.cbSize = sizeof(REBARINFO);
rbi.fMask = 0;
rbi.himl = (HIMAGELIST)NULL;
SendMessage(hwndReBar,RB_SETBARINFO,0,(LPARAM)&rbi);
rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask = /*RBBIM_COLORS | RBBIM_TEXT | RBBIM_BACKGROUND | */
RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE /*| RBBIM_SIZE*/;
rbBand.fStyle = /*RBBS_CHILDEDGE |*//* RBBS_BREAK |*/ RBBS_FIXEDSIZE /*| RBBS_GRIPPERALWAYS*/;
if (bIsAppThemed)
rbBand.fStyle |= RBBS_CHILDEDGE;
rbBand.hbmBack = NULL;
rbBand.lpText = "Toolbar";
rbBand.hwndChild = hwndToolbar;
rbBand.cxMinChild = (rc.right - rc.left) * COUNTOF(tbbMainWnd);
rbBand.cyMinChild = (rc.bottom - rc.top) + 2 * rc.top;
rbBand.cx = 0;
SendMessage(hwndReBar,RB_INSERTBAND,(WPARAM)-1,(LPARAM)&rbBand);
SetWindowPos(hwndReBar,NULL,0,0,0,0,SWP_NOZORDER);
GetWindowRect(hwndReBar,&rc);
cyReBar = rc.bottom - rc.top;
cyReBarFrame = bIsAppThemed ? 0 : 2;
}
//=============================================================================
//
// MsgThemeChanged() - Handle WM_THEMECHANGED
//
//
void MsgThemeChanged(HWND hwnd,WPARAM wParam,LPARAM lParam)
{
RECT rc;
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
// reinitialize edit frame
if (PrivateIsAppThemed()) {
bIsAppThemed = TRUE;
SetWindowLong(hwndEdit,GWL_EXSTYLE,GetWindowLong(hwndEdit,GWL_EXSTYLE) & ~WS_EX_CLIENTEDGE);
SetWindowPos(hwndEdit,NULL,0,0,0,0,SWP_NOZORDER|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE);
}
else {
bIsAppThemed = FALSE;
SetWindowLong(hwndEdit,GWL_EXSTYLE,WS_EX_CLIENTEDGE|GetWindowLong(hwndEdit,GWL_EXSTYLE));
SetWindowPos(hwndEdit,NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
}
// recreate toolbar and statusbar
Toolbar_GetButtons(hwndToolbar,IDT_FILE_NEW,tchToolbarButtons,COUNTOF(tchToolbarButtons));
DestroyWindow(hwndToolbar);
DestroyWindow(hwndReBar);
DestroyWindow(hwndStatus);
CreateBars(hwnd,hInstance);
UpdateToolbar();
GetClientRect(hwnd,&rc);
SendMessage(hwnd,WM_SIZE,SIZE_RESTORED,MAKELONG(rc.right,rc.bottom));
UpdateStatusbar();
}
//=============================================================================
//
// MsgSize() - Handles WM_SIZE
//
//
void MsgSize(HWND hwnd,WPARAM wParam,LPARAM lParam)
{
RECT rc;
int x,y,cx,cy;
// Statusbar
int aWidth[6];
if (wParam == SIZE_MINIMIZED)
return;
x = 0;
y = 0;
cx = LOWORD(lParam);
cy = HIWORD(lParam);
if (bShowToolbar)
{
/* SendMessage(hwndToolbar,WM_SIZE,0,0);
GetWindowRect(hwndToolbar,&rc);
y = (rc.bottom - rc.top);
cy -= (rc.bottom - rc.top);*/
//SendMessage(hwndToolbar,TB_GETITEMRECT,0,(LPARAM)&rc);
SetWindowPos(hwndReBar,NULL,0,0,LOWORD(lParam),cyReBar,SWP_NOZORDER);
// the ReBar automatically sets the correct height
// calling SetWindowPos() with the height of one toolbar button
// causes the control not to temporarily use the whole client area
// and prevents flickering
//GetWindowRect(hwndReBar,&rc);
y = cyReBar + cyReBarFrame; // define
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -