首页 > 代码库 > win32 便签
win32 便签
无聊做了一个桌面便签练手
刚学C++,所以代码风格还没改过来。。。
NotePin.h
1 /*---------------------------------------- 2 Note Pin on your screen. 3 (c) 2014 LJN 4 ----------------------------------------*/ 5 6 #include <windows.h> 7 #include <stack> 8 9 #define ID_EDIT 110 #define IDN_TRAY 211 12 #define IDM_TRAY 313 #define IDM_SHOW 414 #define IDM_QUIT 515 #define IDM_AUTO 616 17 #define WM_TRAY WM_USER + 118 19 BOOL FileWrite (HWND hwndEdit, PTSTR pstrFileName);20 BOOL FileRead (HWND hwndEdit, PTSTR pstrFileName);21 22 class TextStack23 {24 private:25 std::stack <PTSTR> text;26 public:27 BOOL PushText (HWND hwndEdit);28 BOOL PopText (HWND hwndEdit);29 ~TextStack ();30 };
Main.cpp
1 /*---------------------------------------- 2 Note Pin on your screen. 3 (c) 2014 LJN 4 ----------------------------------------*/ 5 6 //Improve: RegisterHotKey to Use global Hot Key 7 // Introduce Redo 8 9 #include <windows.h> 10 #include "notepin.h" 11 #include "resource.h" 12 13 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 14 LRESULT CALLBACK TempProc (HWND, UINT, WPARAM, LPARAM); 15 16 WNDPROC OldProc; 17 BOOL fUAC; 18 19 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 20 PSTR szCmdLine, int iCmdShow) 21 { 22 static TCHAR szAppName[] = TEXT ("Note-Pin"); 23 HWND hwnd; 24 MSG msg; 25 WNDCLASS wndclass; 26 int iWidth, iHeight; 27 HACCEL hAccel; 28 29 wndclass.style = CS_HREDRAW | CS_VREDRAW; 30 wndclass.lpfnWndProc = WndProc; 31 wndclass.cbClsExtra = 0; 32 wndclass.cbWndExtra = 0; 33 wndclass.hInstance = hInstance; 34 wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)); 35 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); 36 wndclass.hbrBackground = (HBRUSH) (COLOR_ACTIVEBORDER + 1); 37 wndclass.lpszMenuName = NULL; 38 wndclass.lpszClassName = szAppName; 39 RegisterClass (&wndclass); 40 41 iWidth = GetSystemMetrics (SM_CXSCREEN); 42 iHeight = GetSystemMetrics (SM_CYSCREEN); 43 44 fUAC = *szCmdLine==‘\0‘ ? FALSE : TRUE; 45 46 hwnd = CreateWindow (szAppName, TEXT ("Note-Pin"), 47 WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME, 48 360 * iWidth / 512, 313 * iHeight / 512, 49 38 * iWidth / 128, 43 * iHeight / 128, 50 NULL, NULL, hInstance, NULL); 51 52 ShowWindow (hwnd, iCmdShow); 53 UpdateWindow (hwnd); 54 55 hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE (IDR_ACCELERATOR)); 56 57 while (GetMessage (&msg, NULL, 0, 0)) 58 { 59 if (!TranslateAccelerator (hwnd, hAccel, &msg)) 60 { 61 TranslateMessage (&msg); 62 DispatchMessage (&msg); 63 } 64 } 65 return (int) msg.wParam; 66 } 67 68 69 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 70 { 71 static int cxChar, cxCaps, cyChar; 72 TEXTMETRIC tm; 73 HDC hdc; 74 PAINTSTRUCT ps; 75 76 static int cxClient, cyClient; 77 static HINSTANCE hInstance; 78 static HWND hwndEdit; 79 static POINT pt1, pt2; 80 static BOOL fIsRestore = TRUE, fHide = FALSE , fAuto = FALSE; 81 static RECT rect; 82 static HFONT hFont; 83 static HMENU hMenu; 84 static HKEY hKey; 85 static NOTIFYICONDATA Notify; 86 static SYSTEMTIME st; 87 88 static TCHAR szFullpath[MAX_PATH]; 89 static SHELLEXECUTEINFO sei = {0}; 90 91 PTSTR pTmp; 92 DWORD cbSize, dType; 93 int i; 94 95 WIN32_FILE_ATTRIBUTE_DATA wfad; 96 FILETIME ftLocal; 97 TCHAR szBuffer[1000]; 98 99 static TextStack text;100 101 switch (message)102 {103 case WM_CREATE:104 105 hdc = GetDC (hwnd);106 107 GetTextMetrics (hdc, &tm);108 cxChar = tm.tmAveCharWidth;109 cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;110 cyChar = tm.tmHeight + tm.tmExternalLeading;111 112 ReleaseDC (hwnd, hdc);113 114 hInstance = ((LPCREATESTRUCT) lParam) -> hInstance;115 hwndEdit = CreateWindow (TEXT ("edit"), NULL,116 WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,117 0, 0, 0, 0, hwnd, (HMENU) ID_EDIT, hInstance, NULL);118 #ifndef _WIN64119 OldProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, (LPARAM) TempProc);120 #else121 OldProc = (WNDPROC) SetWindowLongPtr (hwndEdit, GWLP_WNDPROC, (LONG_PTR) TempProc);122 #endif123 124 GetModuleFileName (NULL, szFullpath, MAX_PATH);125 for (i = 0; i < lstrlen(szFullpath); i++)126 if (szFullpath[i] == ‘.‘)127 if ((szFullpath[i+1] == ‘e‘ && szFullpath[i+2] == ‘x‘ && szFullpath[i+3] == ‘e‘) || 128 (szFullpath[i+1] == ‘E‘ && szFullpath[i+2] == ‘X‘ && szFullpath[i+3] == ‘E‘))129 break;130 for (; i > 0; i--)131 if (szFullpath[i] == ‘\\‘)132 break;133 lstrcpyn (szBuffer, szFullpath, i + 1);134 SetCurrentDirectory (szBuffer);135 136 fIsRestore &= FileRead (hwndEdit, TEXT ("TempStore.txt"));137 fIsRestore &= GetFileAttributesEx (TEXT ("TempStore.txt"), GetFileExInfoStandard, &wfad);138 fIsRestore &= FileTimeToLocalFileTime (&wfad.ftLastWriteTime, &ftLocal);139 fIsRestore &= FileTimeToSystemTime (&ftLocal, &st);140 141 hFont = CreateFont (-15, 0, 0, 0, 400, 0, 0, 0, 0, 142 OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS,143 TEXT("Microsoft Sans Serif"));144 SendMessage (hwndEdit, WM_SETFONT, (WPARAM) hFont, 0);145 SendMessage (hwndEdit, EM_SETSEL, GetWindowTextLength (hwndEdit) + 1, GetWindowTextLength (hwndEdit) + 1);146 SendMessage (hwndEdit, EM_LINESCROLL, 0, SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0));147 148 hMenu = GetSystemMenu (hwnd, FALSE);149 DeleteMenu (hMenu, SC_MAXIMIZE, MF_BYCOMMAND);150 DeleteMenu (hMenu, SC_MINIMIZE, MF_BYCOMMAND);151 DeleteMenu (hMenu, SC_RESTORE, MF_BYCOMMAND);152 AppendMenu (hMenu, MF_STRING, IDM_QUIT, TEXT ("Quit"));153 154 hMenu = CreatePopupMenu ();155 if (fUAC) AppendMenu (hMenu, MF_STRING, IDM_AUTO, TEXT ("Auto Run"));156 else AppendMenu (hMenu, MF_STRING, IDM_AUTO, TEXT ("Auto Run (UAC)"));157 AppendMenu (hMenu, MF_STRING, IDM_SHOW, TEXT ("Hide"));158 AppendMenu (hMenu, MF_SEPARATOR, 0, 0);159 AppendMenu (hMenu, MF_STRING, IDM_QUIT, TEXT ("Quit"));160 161 Notify.cbSize = (DWORD) sizeof (NOTIFYICONDATA);162 Notify.hWnd = hwnd;163 Notify.uID = IDN_TRAY;164 Notify.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;165 Notify.uCallbackMessage = WM_TRAY;166 Notify.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON2));167 wcscpy_s (Notify.szTip, sizeof TEXT ("Note Pin"), TEXT ("Note Pin"));168 Shell_NotifyIcon (NIM_ADD, &Notify);169 170 if (fUAC)171 {172 RegOpenKey (HKEY_LOCAL_MACHINE, TEXT ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), &hKey);173 RegQueryValueEx (hKey, TEXT ("Note Pin"), 0, &dType, NULL, &cbSize);174 pTmp = (PTSTR) malloc (cbSize);175 RegQueryValueEx (hKey, TEXT ("Note Pin"), 0, &dType, (LPBYTE) pTmp, &cbSize);176 fAuto = lstrcmpi (szFullpath, pTmp) ? FALSE : TRUE;177 free (pTmp);178 179 if (fAuto) ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_CHECKED, IDM_AUTO, TEXT ("Auto Run"));180 else ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_UNCHECKED, IDM_AUTO, TEXT ("Auto Run"));181 }182 else183 {184 RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),185 0, KEY_QUERY_VALUE, &hKey);186 RegQueryValueEx (hKey, TEXT ("Note Pin"), 0, &dType, NULL, &cbSize);187 pTmp = (PTSTR) malloc (cbSize);188 RegQueryValueEx (hKey, TEXT ("Note Pin"), 0, &dType, (LPBYTE) pTmp, &cbSize);189 fAuto = lstrcmpi (szFullpath, pTmp) ? FALSE : TRUE;190 free (pTmp);191 192 if (fAuto) ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_CHECKED, IDM_AUTO, TEXT ("Auto Run (UAC)"));193 else ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_UNCHECKED, IDM_AUTO, TEXT ("Auto Run (UAC)"));194 }195 return 0;196 197 case WM_PAINT:198 199 hdc = BeginPaint (hwnd, &ps);200 SetBkMode (hdc, TRANSPARENT);201 SelectObject (hdc, hFont);202 203 fIsRestore &= GetFileAttributesEx (TEXT ("TempStore.txt"), GetFileExInfoStandard, &wfad);204 fIsRestore &= FileTimeToLocalFileTime (&wfad.ftLastWriteTime, &ftLocal);205 fIsRestore &= FileTimeToSystemTime (&ftLocal, &st);206 207 if (fIsRestore)208 {209 TextOut (hdc, cxChar, cyClient - cyChar * 17 / 16, szBuffer,210 wsprintf (szBuffer, TEXT ("Last Edited: %4d/%#02d/%#02d %#02d:%#02d:%#02d"),211 st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond));212 213 TextOut (hdc, cxClient - (lstrlen (TEXT("© 2014 LJN")) + 1) * cxChar, cyClient - cyChar * 17 / 16,214 TEXT("© 2014 LJN"), lstrlen (TEXT("© 2014 LJN")));215 216 MoveToEx (hdc, 0, cyClient - cyChar * 35 / 32, NULL);217 LineTo (hdc, cxClient, cyClient - cyChar * 35 / 32);218 }219 EndPaint (hwnd, &ps);220 221 if (fIsRestore) MoveWindow (hwndEdit, 0, 0, cxClient, cyClient - cyChar * 18 / 16, TRUE);222 else MoveWindow (hwndEdit, 0, 0, cxClient, cyClient, TRUE);223 return 0;224 225 case WM_SIZE:226 227 cxClient = LOWORD (lParam);228 cyClient = HIWORD (lParam);229 return 0;230 231 case WM_SETFOCUS:232 233 SetFocus (hwndEdit);234 return 0;235 236 case WM_TRAY:237 238 switch (lParam)239 {240 case WM_LBUTTONUP:241 242 if (fHide)243 {244 ShowWindow (hwnd, SW_SHOW);245 fHide = FALSE;246 SetForegroundWindow (hwnd);247 }248 else249 {250 FileWrite (hwndEdit, TEXT ("TempStore.txt"));251 ShowWindow (hwnd, SW_HIDE);252 fHide = TRUE;253 } 254 break;255 256 case WM_RBUTTONUP:257 258 if (fHide) ModifyMenu (hMenu, IDM_SHOW, MF_BYCOMMAND | MF_STRING, IDM_SHOW, TEXT ("Restore"));259 else ModifyMenu (hMenu, IDM_SHOW, MF_BYCOMMAND | MF_STRING, IDM_SHOW, TEXT ("Hide"));260 261 SetForegroundWindow (hwnd);262 GetCursorPos (&pt1);263 TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, pt1.x, pt1.y, 0, hwnd, NULL);264 break;265 } 266 return 0;267 268 case WM_COMMAND:269 case WM_SYSCOMMAND:270 271 if (lParam && LOWORD (wParam) == ID_EDIT)272 {273 switch (HIWORD (wParam))274 { 275 case EN_ERRSPACE:276 case EN_MAXTEXT:277 278 MessageBox (NULL, TEXT ("Too Many Characters!!!"), NULL, MB_ICONWARNING);279 return 0;280 281 case EN_UPDATE:282 283 text.PushText ((HWND) lParam);284 return 0;285 }286 break;287 }288 289 switch (LOWORD (wParam))290 {291 case IDM_SELALL:292 293 SendMessage (hwndEdit, EM_SETSEL, 0, -1);294 return 0;295 296 case IDM_SAVE:297 298 FileWrite (hwndEdit, TEXT ("TempStore.txt"));299 fIsRestore = TRUE;300 InvalidateRect (hwnd, NULL, TRUE);301 return 0;302 303 case IDM_MY_UNDO:304 305 if (!text.PopText (hwndEdit)) MessageBeep (MB_ICONWARNING);306 SendMessage (hwndEdit, EM_SETSEL, GetWindowTextLength (hwndEdit) + 1, GetWindowTextLength (hwndEdit) + 1);307 SendMessage (hwndEdit, EM_LINESCROLL, 0, SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0));308 return 0;309 310 case IDM_SHOW:311 312 if (fHide)313 {314 ShowWindow (hwnd, SW_SHOW);315 fHide = FALSE;316 SetForegroundWindow (hwnd);317 }318 else319 {320 FileWrite (hwndEdit, TEXT ("TempStore.txt"));321 ShowWindow (hwnd, SW_HIDE);322 fHide = TRUE;323 }324 return 0;325 326 case IDM_AUTO:327 328 if (!fUAC)329 {330 sei.cbSize = sizeof (SHELLEXECUTEINFO);331 sei.lpVerb = TEXT ("runas");332 sei.lpFile = szFullpath;333 sei.lpParameters = TEXT ("runas");334 sei.nShow = SW_SHOW;335 336 if (ShellExecuteEx (&sei))337 SendMessage (hwnd, WM_DESTROY, 0, 0);338 }339 else340 {341 if (fAuto)342 {343 ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_UNCHECKED, IDM_AUTO, TEXT ("Auto Run"));344 RegDeleteKeyValue (HKEY_LOCAL_MACHINE,345 TEXT ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), TEXT ("Note Pin"));346 fAuto = FALSE;347 }348 else349 {350 ModifyMenu (hMenu, IDM_AUTO, MF_BYCOMMAND | MF_CHECKED, IDM_AUTO, TEXT ("Auto Run"));351 RegSetValueEx (hKey, TEXT ("Note Pin"), 0, REG_SZ, (CONST BYTE*) szFullpath, (lstrlen (szFullpath) + 1) * 2);352 fAuto = TRUE;353 }354 }355 return 0;356 357 case IDM_QUIT:358 359 SendMessage (hwnd, WM_DESTROY, 0, 0);360 return 0;361 }362 break;363 364 case WM_CLOSE:365 366 if (!fHide)367 {368 ShowWindow (hwnd, SW_HIDE);369 FileWrite (hwndEdit, TEXT ("TempStore.txt"));370 fHide = TRUE;371 }372 return 0;373 374 case WM_QUERYENDSESSION:375 case WM_DESTROY:376 377 FileWrite (hwndEdit, TEXT ("TempStore.txt"));378 DeleteObject (hFont);379 DestroyMenu (hMenu);380 Shell_NotifyIcon (NIM_DELETE, &Notify);381 RegCloseKey (hKey);382 383 PostQuitMessage (0);384 return 0;385 }386 return DefWindowProc (hwnd, message, wParam, lParam);387 }388 389 LRESULT CALLBACK TempProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)390 {391 static BOOL iOnce = TRUE;392 393 if (message == WM_PAINT && iOnce)394 {395 SendMessage (GetParent (hwnd), WM_COMMAND, MAKELONG (ID_EDIT, EN_UPDATE), (LPARAM) hwnd);396 iOnce = FALSE;397 }398 399 return CallWindowProc (OldProc, hwnd, message, wParam, lParam);400 }
Func.cpp
1 /*---------------------------------------- 2 Note Pin on your screen. 3 (c) 2014 LJN 4 ----------------------------------------*/ 5 6 #include <windows.h> 7 #include <algorithm> 8 #include "notepin.h" 9 #include "resource.h" 10 11 BOOL FileWrite (HWND hwndEdit, PTSTR pstrFileName) //By Charles Petzold, 1998 12 { 13 DWORD dwBytesWritten; 14 HANDLE hFile; 15 int iLength; 16 PTSTR pstrBuffer; 17 WORD wByteOrderMark = 0xFEFF; 18 19 if (INVALID_HANDLE_VALUE =http://www.mamicode.com/= "color: #008080;"> 20 (hFile = CreateFile (pstrFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL))) 21 { 22 MessageBox (NULL, TEXT ("NO Access to Create the File!!!"), NULL, MB_ICONWARNING); 23 return FALSE; 24 } 25 #ifdef UNICODE 26 WriteFile (hFile, &wByteOrderMark, 2, &dwBytesWritten, NULL); 27 #endif 28 iLength = GetWindowTextLength (hwndEdit); 29 pstrBuffer = (PTSTR) malloc ((iLength + 1) * sizeof (TCHAR)); 30 GetWindowText (hwndEdit, pstrBuffer, iLength + 1); 31 32 if (!pstrBuffer) 33 { 34 MessageBox (NULL, TEXT ("Can NOT Create the Buffer!!!"), NULL, MB_ICONWARNING); 35 CloseHandle (hFile); 36 return FALSE; 37 } 38 39 WriteFile (hFile, pstrBuffer, iLength * sizeof (TCHAR), &dwBytesWritten, NULL); 40 41 if ((iLength * sizeof (TCHAR)) != (int) dwBytesWritten) 42 { 43 MessageBox (NULL, TEXT ("Too Many Characters!!!"), NULL, MB_ICONWARNING); 44 CloseHandle (hFile); 45 free (pstrBuffer); 46 return FALSE; 47 } 48 49 free (pstrBuffer); 50 CloseHandle (hFile); 51 return TRUE; 52 } 53 54 BOOL FileRead (HWND hwndEdit, PTSTR pstrFileName) //By Charles Petzold, 1998 55 { 56 BYTE bySwap; 57 DWORD dwBytesRead; 58 HANDLE hFile; 59 int i, iFileLength, iUniTest; 60 PBYTE pBuffer, pText, pConv; 61 62 // Open the file. 63 64 if (INVALID_HANDLE_VALUE =http://www.mamicode.com/= "color: #008080;"> 65 (hFile = CreateFile (pstrFileName, GENERIC_READ, FILE_SHARE_READ, 66 NULL, OPEN_EXISTING, 0, NULL))) 67 return FALSE; 68 69 // Get file size in bytes and allocate memory for read. 70 // Add an extra two bytes for zero termination. 71 72 iFileLength = GetFileSize (hFile, NULL); 73 pBuffer = (BYTE *) malloc (iFileLength + 2); 74 75 // Read file and put terminating zeros at end. 76 77 ReadFile (hFile, pBuffer, iFileLength, &dwBytesRead, NULL); 78 CloseHandle (hFile); 79 pBuffer[iFileLength] = ‘\0‘; 80 pBuffer[iFileLength + 1] = ‘\0‘; 81 82 // Test to see if the text is Unicode 83 84 iUniTest = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE; 85 86 if (IsTextUnicode (pBuffer, iFileLength, &iUniTest)) 87 { 88 pText = pBuffer + 2; 89 iFileLength -= 2; 90 91 if (iUniTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) 92 { 93 for (i = 0; i < iFileLength / 2; i++) 94 { 95 bySwap = ((BYTE *) pText) [2 * i]; 96 ((BYTE *) pText) [2 * i] = ((BYTE *) pText) [2 * i + 1]; 97 ((BYTE *) pText) [2 * i + 1] = bySwap; 98 } 99 }100 101 // Allocate memory for possibly converted string102 103 pConv = (BYTE *) malloc (iFileLength + 2);104 105 // If the edit control is not Unicode, convert Unicode text to 106 // non-Unicode (ie, in general, wide character).107 108 #ifndef UNICODE109 WideCharToMultiByte (CP_ACP, 0, (PWSTR) pText, -1, pConv, 110 iFileLength + 2, NULL, NULL);111 112 // If the edit control is Unicode, just copy the string113 #else114 lstrcpy ((PTSTR) pConv, (PTSTR) pText);115 #endif116 117 }118 else // the file is not Unicode119 {120 pText = pBuffer;121 122 // Allocate memory for possibly converted string.123 124 pConv = (BYTE *) malloc (2 * iFileLength + 2);125 126 // If the edit control is Unicode, convert ASCII text.127 128 #ifdef UNICODE129 MultiByteToWideChar (CP_ACP, 0, (PSTR) pText, -1, (PTSTR) pConv, 130 iFileLength + 1);131 132 // If not, just copy buffer133 #else134 lstrcpy ((PTSTR) pConv, (PTSTR) pText);135 #endif136 }137 138 SetWindowText (hwndEdit, (PTSTR) pConv);139 free (pBuffer);140 free (pConv);141 142 return TRUE;143 }144 145 BOOL TextStack::PushText (HWND hwndEdit)146 {147 int iLength;148 PTSTR pBuffer;149 150 iLength = GetWindowTextLength (hwndEdit);151 pBuffer = (PTSTR) malloc ((iLength + 1) * sizeof (TCHAR));152 GetWindowText (hwndEdit, pBuffer, iLength + 1);153 154 text.push (pBuffer);155 156 if (text.empty ())157 return FALSE;158 else159 return TRUE;160 }161 162 BOOL TextStack::PopText (HWND hwndEdit)163 {164 PTSTR pBuffer;165 166 if (text.size () > 1)167 {168 pBuffer = text.top ();169 free (pBuffer);170 text.pop ();171 pBuffer = text.top ();172 SetWindowText (hwndEdit, pBuffer);173 return TRUE;174 }175 else176 return FALSE;177 }178 179 TextStack::~TextStack ()180 {181 while (!text.empty ())182 {183 free (text.top ());184 text.pop ();185 }186 }
自high一下。。。
win32 便签
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。