想一想來開源社區也有一段時間了,什麼也沒留下,今天這算是第一篇博文吧,哈哈...編程
近來在學習windows編程,提及編程,慚愧啊,接觸有兩年多了,但一直沒啥進展,幾乎沒寫過什麼代碼...下面的代碼並不是原創,是在原創的基礎上修改了對話框資源與一點消息執行方式...windows
#include <tchar.h> #include <Windows.h> #include "resource.h" #include <atltypes.h> BOOL EnableShutDownPriv() { //Get Privilege HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) { return FALSE; } if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ) ) { CloseHandle( hToken ); return FALSE; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL ) ) { CloseHandle( hToken ); return FALSE; } return TRUE; } BOOL ReSetWindows(DWORD dwFlags, BOOL bForce) { //Check the param; if ( dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN ) { return FALSE; } //Get the os version; OSVERSIONINFO osvi = {0}; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if ( !GetVersionEx(&osvi) ) { return FALSE; } if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) { EnableShutDownPriv(); } dwFlags |= (bForce != FALSE) ? EWX_FORCE : EWX_FORCEIFHUNG; return ExitWindowsEx(dwFlags, 0); } INT_PTR CALLBACK DialogProc( HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg) { case WM_COMMAND: { switch(wParam) { case IDC_LOGOFF_BUTTON: { ReSetWindows(EWX_LOGOFF, FALSE); } break; case IDC_SHUTDOWN_BUTTON: { ReSetWindows(EWX_SHUTDOWN, FALSE); } break; case IDC_REBOOT_BUTTON: { ReSetWindows(EWX_REBOOT, FALSE); } break; case IDCANCEL: { int iRet = MessageBox(hwndDlg, _T("您選擇了關閉窗口!"), _T("提示"), MB_OKCANCEL); if ( iRet == IDOK ) { EndDialog(hwndDlg, IDCANCEL); } } break; default:break; } } break; default:break; } return 0; } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DialogBox( hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),NULL,DialogProc); return 0; }
遇到的問題:函數
這樣建立的對話框窗口默認是出如今屏幕的左上角,爲了讓它出如今屏幕中央,先是想過在對話框初始化時調用SetWindowPos函數進行位置的設置,但沒找到獲取對話框資源尺寸的API ;也想過用MoveWindow,也是一樣的問題...學習
//在DialogProc函數中switch(uMsg)添加一個case分支: case WM_INITDIALOG: { //add code here } break;
最後仍是在對話框資源的屬性裏把center置爲TRUE,這才讓對話框顯示在屏幕中央...ui
求教高手,代碼如何實現這一功能?先謝過!spa