SDK程序问题

xjywc 2008-10-18 09:59:26
一个SDK关机程序,但是显示一直不对,请高手赐教。



//关机.cpp
#include <windows.h>
#include <iostream>
#include "resource.h"
#include <commctrl.h>//注意这个头文件,要想使用扩展的一些控件就要用这个头文件
#pragma comment(lib,"comctl32.lib")//编译时增加comctl32.lib,里面有扩展控件的接口。



LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
static TCHAR szAppName[]="自动关机";
TCHAR time1[4];

BOOL ShutDowmWindow()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN, 0))
return FALSE;

return TRUE;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
HWND hwnd;
WNDCLASS wndclass;
MSG msg;
HMENU hmenu;

InitCommonControls();

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = DLGWINDOWEXTRA ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance,LPSTR(ID_ICON)) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;

if (!RegisterClass(&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}

hwnd=CreateDialog(hInstance,MAKEINTRESOURCE(ID_MAIN),NULL,NULL);
hmenu = GetSystemMenu(hwnd,FALSE);
AppendMenu(hmenu,MF_STRING,ID_SABOUT,"关于");
for(int ci=0;ci<24;ci++)//用循环语句将24个小时加入到combo box中。
{
if(ci<=9)
wsprintf(time1,"0%d",ci);
else
wsprintf(time1,"%d",ci);
SendMessage(GetDlgItem(hwnd,IDC_COMBO1),CB_ADDSTRING,0,LPARAM(time1));//向combo box发送CB_ADDSTRING消息加入字串。
}
for(ci=0;ci<60;ci++)//用循环语句将60分钟加入到combo box中。
{
if(ci<=9)
wsprintf(time1,"0%d",ci);
else
wsprintf(time1,"%d",ci);
SendMessage(GetDlgItem(hwnd,IDC_COMBO2),CB_ADDSTRING,0,LPARAM(time1));//同上
}

SetWindowText(GetDlgItem(hwnd,IDC_STATIC1),"nihao");
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);


while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HINSTANCE hInstance;
static HMENU htaskmenu;
TCHAR time[50];
static int hour,minute;
SYSTEMTIME st;
NOTIFYICONDATA nid;
POINT point;
UINT uID;
UINT uMsg;
TCHAR show[30];

BOOL IsBegin = FALSE;

nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd=hwnd;
nid.uID=ID_ICON;
nid.uCallbackMessage=WM_NOTIFYICON;
nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
strcpy(nid.szTip,"开始");

switch(message)
{
case WM_CREATE:
//hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
SetTimer(hwnd,ID_TIMER,100,NULL);
htaskmenu=LoadMenu(hInstance,szAppName);
htaskmenu=GetSubMenu(htaskmenu,0);
SetDlgItemText(hwnd, IDC_STATIC2, "This is a string");
break;
case WM_TIMER:
GetLocalTime(&st);
GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,&st,"HH':'mm':'ss",time+wsprintf(time," %d-%d-%d ",st.wYear,st.wMonth,st.wDay),50);
SetWindowText(GetDlgItem(hwnd,ID_STATIC1),time);
if (IsBegin && (hour==st.wHour) && (minute==st.wMinute))
{
ShutDowmWindow();
PostQuitMessage(0);
}
break;
case WM_NOTIFYICON:
uID=wParam;
uMsg=lParam;
if (uID==ID_ICON)
{
switch(uMsg)
{
case WM_RBUTTONDOWN:
GetCursorPos(&point);
TrackPopupMenuEx(htaskmenu,TPM_VERTICAL|TPM_LEFTALIGN,point.x,point.y,hwnd,NULL);
break;
}
}
break;
case WM_DESTROY:
KillTimer (hwnd,ID_TIMER);
PostQuitMessage (0) ;
return 0 ;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_BEGIN:
wsprintf(show,"关机时间:%d时%d分",hour,minute);
strcpy(nid.szTip,show);
Shell_NotifyIcon(NIM_ADD,&nid);
IsBegin=TRUE;
ShowWindow(hwnd,0);
break;
case IDC_COMBO1:
if (HIWORD(wParam)==LBN_SELCHANGE)
{
hour=SendMessage(HWND(lParam),CB_GETCURSEL,0,0);
}
break;
case IDC_COMBO2:
if (HIWORD(wParam)==LBN_SELCHANGE)
{
minute=SendMessage(HWND(lParam),CB_GETCURSEL,0,0);
}
break;
case ID_STOP:
ShowWindow(hwnd,1);
IsBegin=FALSE;
Shell_NotifyIcon(NIM_DELETE,&nid);
break;
case ID_ABOUT:
MessageBox(hwnd,"化羽制作!","自动关机",0);
break;
}
case WM_SYSCOMMAND:
switch(LOWORD(wParam))
{
case ID_SABOUT:
MessageBox(hwnd,"化羽制作!","自动关机",0);
break;
break;
}
}

return DefWindowProc (hwnd, message, wParam, lParam);

}

想问一下显示当前时间的静态框为何不会显示了,还请高手能把程序改对,还有为什么对话框左上角的图标一直不显示。请高手详细解答一下。谢谢了。

一楼为资源文件

...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
VsirSoft 2008-10-19
  • 打赏
  • 举报
回复
最好就是把文件打包 传到网盘上 帮你调试调试 这样一堆代码 也说不好从哪的问题
wltg2001 2008-10-19
  • 打赏
  • 举报
回复
怎么又开了一帖,昨天我好像改过这个程序了。难道没成功
dandycheung 2008-10-19
  • 打赏
  • 举报
回复
资源文件呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧