// test_wni32.cpp : 定義應用程式的進入點。
//
#include "stdafx.h"
#include "test_wni32.h"
#include <windowsx.h>
#define MAX_LOADSTRING 100
// 全域變數:
HINSTANCE hInst; // 目前執行個體
TCHAR szTitle[MAX_LOADSTRING]; // 標題列文字
TCHAR szWindowClass[MAX_LOADSTRING]; // 主視窗類別名稱
WNDPROC oldEditProc;
// 這個程式碼模組中所包含之函式的向前宣告:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此置入程式碼。
MSG msg;
HACCEL hAccelTable;
// 初始化全域字串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_TEST_WNI32, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 執行應用程式初始設定:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST_WNI32));
// 主訊息迴圈:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 函式: MyRegisterClass()
//
// 用途: 註冊視窗類別。
//
// 註解:
//
// 只有當您希望此程式碼能相容比 Windows 95 的
// 'RegisterClassEx' 函式更早的 Win32 系統時,
// 才會需要加入及使用這個函式。
// 您必須呼叫這個函式,讓應用程式取得與它相關的
// 「格式正確」的圖示。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST_WNI32));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TEST_WNI32);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
//
// 函式: InitInstance(HINSTANCE, int)
//
// 用途: 儲存執行個體控制代碼並且建立主視窗
//
// 註解:
//
// 在這個函式中,我們會將執行個體控制代碼儲存在全域變數中,
// 並且建立和顯示主程式視窗。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 將執行個體控制代碼儲存在全域變數中
hWnd = CreateWindow(TEXT("Edit"), szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
oldEditProc = (WNDPROC) SetWindowLong(hWnd, GWL_WNDPROC, (LONG) WndProc);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// 函式: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 用途: 處理主視窗的訊息。
//
// WM_COMMAND - 處理應用程式功能表
// WM_PAINT - 繪製主視窗
// WM_DESTROY - 顯示結束訊息然後返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HMENU menu;
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
POINT pt;
switch (message)
{
case WM_RBUTTONUP:
menu = CreatePopupMenu();
AppendMenu(menu, MF_STRING, 1001, L"123");
AppendMenu(menu, MF_STRING, 1002, L"345");
AppendMenu(menu, MF_STRING, 1003, L"4545");
// MessageBox(NULL, L"sdfd", L"sdf", MB_OK);
pt.x = xPos;
pt.y = yPos;
ClientToScreen(hWnd, &pt);
TrackPopupMenu(menu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
return 1;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return CallWindowProc(oldEditProc, hWnd, message, wParam, lParam);
}
return 0;
}
// [關於] 方塊的訊息處理常式。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
Ly8gdGVzdF93bmkzMi5jcHAgOiDlrprnvqnmh4nnlKjnqIvlvI/nmoTpgLLlhaXpu57jgIIKLy8KCiNpbmNsdWRlICJzdGRhZnguaCIKI2luY2x1ZGUgInRlc3Rfd25pMzIuaCIKI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CgojZGVmaW5lIE1BWF9MT0FEU1RSSU5HIDEwMAoKLy8g5YWo5Z+f6K6K5pW4OgpISU5TVEFOQ0UgaEluc3Q7ICAgIAkJCQkJCQkvLyDnm67liY3ln7fooYzlgIvpq5QKVENIQVIgc3pUaXRsZVtNQVhfTE9BRFNUUklOR107CQkJCQkvLyDmqJnpoYzliJfmloflrZcKVENIQVIgc3pXaW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107CQkJLy8g5Li76KaW56qX6aGe5Yil5ZCN56ixCgpXTkRQUk9DIG9sZEVkaXRQcm9jOwoKLy8g6YCZ5YCL56iL5byP56K85qih57WE5Lit5omA5YyF5ZCr5LmL5Ye95byP55qE5ZCR5YmN5a6j5ZGKOgpBVE9NCQkJCU15UmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKTsKQk9PTAkJCQlJbml0SW5zdGFuY2UoSElOU1RBTkNFLCBpbnQpOwpMUkVTVUxUIENBTExCQUNLCVduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwpJTlRfUFRSIENBTExCQUNLCUFib3V0KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKCmludCBBUElFTlRSWSBfdFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgIExQVFNUUiAgICBscENtZExpbmUsCiAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBuQ21kU2hvdykKewoJVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJldkluc3RhbmNlKTsKCVVOUkVGRVJFTkNFRF9QQVJBTUVURVIobHBDbWRMaW5lKTsKCiAJLy8gVE9ETzog5Zyo5q2k572u5YWl56iL5byP56K844CCCglNU0cgbXNnOwoJSEFDQ0VMIGhBY2NlbFRhYmxlOwoKCS8vIOWIneWni+WMluWFqOWfn+Wtl+S4sgoJTG9hZFN0cmluZyhoSW5zdGFuY2UsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FEU1RSSU5HKTsKCUxvYWRTdHJpbmcoaEluc3RhbmNlLCBJRENfVEVTVF9XTkkzMiwgc3pXaW5kb3dDbGFzcywgTUFYX0xPQURTVFJJTkcpOwoJTXlSZWdpc3RlckNsYXNzKGhJbnN0YW5jZSk7CgoJLy8g5Z+36KGM5oeJ55So56iL5byP5Yid5aeL6Kit5a6aOgoJaWYgKCFJbml0SW5zdGFuY2UgKGhJbnN0YW5jZSwgbkNtZFNob3cpKQoJewoJCXJldHVybiBGQUxTRTsKCX0KCgloQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURDX1RFU1RfV05JMzIpKTsKCgkvLyDkuLvoqIrmga/ov7TlnIg6Cgl3aGlsZSAoR2V0TWVzc2FnZSgmbXNnLCBOVUxMLCAwLCAwKSkKCXsKCQlpZiAoIVRyYW5zbGF0ZUFjY2VsZXJhdG9yKG1zZy5od25kLCBoQWNjZWxUYWJsZSwgJm1zZykpCgkJewoJCQlUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwoJCQlEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CgkJfQoJfQoKCXJldHVybiAoaW50KSBtc2cud1BhcmFtOwp9CgoKCi8vCi8vICDlh73lvI86IE15UmVnaXN0ZXJDbGFzcygpCi8vCi8vICDnlKjpgJQ6IOiou+WGiuimlueql+mhnuWIpeOAggovLwovLyAg6Ki76KejOgovLwovLyAgICDlj6rmnInnlbbmgqjluIzmnJvmraTnqIvlvI/norzog73nm7jlrrnmr5QgV2luZG93cyA5NSDnmoQgCi8vICAgICdSZWdpc3RlckNsYXNzRXgnIOWHveW8j+abtOaXqeeahCBXaW4zMiDns7vntbHmmYLvvIwKLy8gICAg5omN5pyD6ZyA6KaB5Yqg5YWl5Y+K5L2/55So6YCZ5YCL5Ye95byP44CCCi8vICAgIOaCqOW/hemgiOWRvOWPq+mAmeWAi+WHveW8j++8jOiuk+aHieeUqOeoi+W8j+WPluW+l+iIh+Wug+ebuOmXnOeahCAKLy8gICAg44CM5qC85byP5q2j56K644CN55qE5ZyW56S644CCCi8vCkFUT00gTXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpCnsKCVdORENMQVNTRVggd2NleDsKCgl3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKCgl3Y2V4LnN0eWxlCQkJPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKCXdjZXgubHBmblduZFByb2MJPSBXbmRQcm9jOwoJd2NleC5jYkNsc0V4dHJhCQk9IDA7Cgl3Y2V4LmNiV25kRXh0cmEJCT0gMDsKCXdjZXguaEluc3RhbmNlCQk9IGhJbnN0YW5jZTsKCXdjZXguaEljb24JCQk9IExvYWRJY29uKGhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNFKElESV9URVNUX1dOSTMyKSk7Cgl3Y2V4LmhDdXJzb3IJCT0gTG9hZEN1cnNvcihOVUxMLCBJRENfQVJST1cpOwoJd2NleC5oYnJCYWNrZ3JvdW5kCT0gKEhCUlVTSCkoQ09MT1JfV0lORE9XKzEpOwoJd2NleC5scHN6TWVudU5hbWUJPSBNQUtFSU5UUkVTT1VSQ0UoSURDX1RFU1RfV05JMzIpOwoJd2NleC5scHN6Q2xhc3NOYW1lCT0gc3pXaW5kb3dDbGFzczsKCXdjZXguaEljb25TbQkJPSBMb2FkSWNvbih3Y2V4LmhJbnN0YW5jZSwgTUFLRUlOVFJFU09VUkNFKElESV9TTUFMTCkpOwoKCXJldHVybiBSZWdpc3RlckNsYXNzRXgoJndjZXgpOwp9CgovLwovLyAgIOWHveW8jzogSW5pdEluc3RhbmNlKEhJTlNUQU5DRSwgaW50KQovLwovLyAgIOeUqOmAlDog5YSy5a2Y5Z+36KGM5YCL6auU5o6n5Yi25Luj56K85Lim5LiU5bu656uL5Li76KaW56qXCi8vCi8vICAg6Ki76KejOgovLwovLyAgICAgICAg5Zyo6YCZ5YCL5Ye95byP5Lit77yM5oiR5YCR5pyD5bCH5Z+36KGM5YCL6auU5o6n5Yi25Luj56K85YSy5a2Y5Zyo5YWo5Z+f6K6K5pW45Lit77yMCi8vICAgICAgICDkuKbkuJTlu7rnq4vlkozpoa/npLrkuLvnqIvlvI/oppbnqpfjgIIKLy8KQk9PTCBJbml0SW5zdGFuY2UoSElOU1RBTkNFIGhJbnN0YW5jZSwgaW50IG5DbWRTaG93KQp7CiAgIEhXTkQgaFduZDsKCiAgIGhJbnN0ID0gaEluc3RhbmNlOyAvLyDlsIfln7fooYzlgIvpq5TmjqfliLbku6PnorzlhLLlrZjlnKjlhajln5/orormlbjkuK0KCiAgIGhXbmQgPSBDcmVhdGVXaW5kb3coVEVYVCgiRWRpdCIpLCBzelRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLAogICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBOVUxMLCBOVUxMLCBoSW5zdGFuY2UsIE5VTEwpOwoKICAgb2xkRWRpdFByb2MgPSAoV05EUFJPQykgU2V0V2luZG93TG9uZyhoV25kLCBHV0xfV05EUFJPQywgKExPTkcpIFduZFByb2MpOwoKICAgaWYgKCFoV25kKQogICB7CiAgICAgIHJldHVybiBGQUxTRTsKICAgfQoKICAgU2hvd1dpbmRvdyhoV25kLCBuQ21kU2hvdyk7CiAgIFVwZGF0ZVdpbmRvdyhoV25kKTsKCiAgIHJldHVybiBUUlVFOwp9CgovLwovLyAg5Ye95byPOiBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKQovLwovLyAg55So6YCUOiAg6JmV55CG5Li76KaW56qX55qE6KiK5oGv44CCCi8vCi8vICBXTV9DT01NQU5ECS0g6JmV55CG5oeJ55So56iL5byP5Yqf6IO96KGoCi8vICBXTV9QQUlOVAktIOe5quijveS4u+imlueqlwovLyAgV01fREVTVFJPWQktIOmhr+ekuue1kOadn+ioiuaBr+eEtuW+jOi/lOWbngovLwovLwpMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCnsKICBITUVOVSBtZW51OwogIGludCB4UG9zID0gR0VUX1hfTFBBUkFNKGxQYXJhbSk7CiAgaW50IHlQb3MgPSBHRVRfWV9MUEFSQU0obFBhcmFtKTsKICBQT0lOVCBwdDsKc3dpdGNoIChtZXNzYWdlKQoJewogIGNhc2UgV01fUkJVVFRPTlVQOgogICAgbWVudSA9IENyZWF0ZVBvcHVwTWVudSgpOwogICAgQXBwZW5kTWVudShtZW51LCBNRl9TVFJJTkcsIDEwMDEsIEwiMTIzIik7CiAgICBBcHBlbmRNZW51KG1lbnUsIE1GX1NUUklORywgMTAwMiwgTCIzNDUiKTsKICAgIEFwcGVuZE1lbnUobWVudSwgTUZfU1RSSU5HLCAxMDAzLCBMIjQ1NDUiKTsKICAgIC8vIE1lc3NhZ2VCb3goTlVMTCwgTCJzZGZkIiwgTCJzZGYiLCBNQl9PSyk7CiAgICAKICAgIHB0LnggPSB4UG9zOwogICAgcHQueSA9IHlQb3M7CiAgICBDbGllbnRUb1NjcmVlbihoV25kLCAmcHQpOwogICAgVHJhY2tQb3B1cE1lbnUobWVudSwgVFBNX0xFRlRBTElHTiB8IFRQTV9SSUdIVEJVVFRPTiwgcHQueCwgcHQueSwgMCwgaFduZCwgTlVMTCk7CgogICAgcmV0dXJuIDE7CiAgY2FzZSBXTV9ERVNUUk9ZOgogICAgUG9zdFF1aXRNZXNzYWdlKDApOwogICAgYnJlYWs7CglkZWZhdWx0OgogICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKG9sZEVkaXRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Cgl9CglyZXR1cm4gMDsKfQoKLy8gW+mXnOaWvF0g5pa55aGK55qE6KiK5oGv6JmV55CG5bi45byP44CCCklOVF9QVFIgQ0FMTEJBQ0sgQWJvdXQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCnsKCVVOUkVGRVJFTkNFRF9QQVJBTUVURVIobFBhcmFtKTsKCXN3aXRjaCAobWVzc2FnZSkKCXsKCWNhc2UgV01fSU5JVERJQUxPRzoKCQlyZXR1cm4gKElOVF9QVFIpVFJVRTsKCgljYXNlIFdNX0NPTU1BTkQ6CgkJaWYgKExPV09SRCh3UGFyYW0pID09IElET0sgfHwgTE9XT1JEKHdQYXJhbSkgPT0gSURDQU5DRUwpCgkJewoJCQlFbmREaWFsb2coaERsZywgTE9XT1JEKHdQYXJhbSkpOwoJCQlyZXR1cm4gKElOVF9QVFIpVFJVRTsKCQl9CgkJYnJlYWs7Cgl9CglyZXR1cm4gKElOVF9QVFIpRkFMU0U7Cn0K