鱼C论坛

 找回密码
 立即注册
查看: 3261|回复: 7

新手!!刚来!有个MFC的问题不会,求指点!!!最好来个大神,问题比较难

[复制链接]
发表于 2013-4-22 05:56:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hackasn 于 2013-4-22 06:00 编辑

新来啊!!没有那个什么币,希望能帮助我一下````

下面的这个是我前几天学的,能通过,#include <windows.h>        //必须的头文件

  1. LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);//回调函数(过程)原型
  2. int WINAPI WinMain(
  3.                                    HINSTANCE hInstance,  //实例句柄
  4.                                    HINSTANCE hPrevInstance,
  5.                                    LPSTR lpCmdLine,
  6.                                    int nCmdShow
  7.                                    )
  8. {
  9.         WNDCLASS wndcls;                                        //WNDCLASS结构
  10.         wndcls.style=CS_HREDRAW |CS_VREDRAW;
  11.         wndcls.cbClsExtra=0;
  12.         wndcls.cbWndExtra=0;
  13.         wndcls.lpfnWndProc=WinProc;                        //回调函数(过程)
  14.         wndcls.lpszClassName="FirstMain";        //窗口类名
  15.         wndcls.lpszMenuName=NULL;
  16.         wndcls.hbrBackground=(HBRUSH) GetStockObject(WHITE_BRUSH);
  17.         wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);
  18.         wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
  19.         wndcls.hInstance=hInstance;                        //实例句柄

  20.         RegisterClass(&wndcls);                                //注册

  21.         HWND hwnd;                                                        //创建父窗口句柄
  22.         hwnd=CreateWindowEx(
  23.                 0,"FirstMain","窗口标题",
  24.                 WS_TILEDWINDOW,                                        //正常显示状态
  25.                 200,200,300,200,
  26.                 NULL,NULL,hInstance,NULL);

  27.         ShowWindow(hwnd,SW_SHOWNORMAL);                //句柄,显示状态
  28.         UpdateWindow(hwnd);                                        //句柄

  29.         MSG msg;
  30.         while(GetMessage(&msg,NULL,0,0))
  31.         {
  32.                 TranslateMessage(&msg);                        //键盘消息转换为字符
  33.                 DispatchMessage(&msg);                        //返回msg给回调函数(过程)
  34.         }
  35.         return 0;
  36. }

  37. LRESULT CALLBACK WinProc(
  38.         HWND hwnd,      // 当前句柄
  39.         UINT msg,       // 当前MSG消息
  40.         WPARAM wParam,
  41.         LPARAM lParam
  42.         )
  43. {
  44.         switch(msg)
  45.         {
  46.         case WM_LBUTTONDOWN:
  47.                 MessageBox(hwnd,"mouse clicked","消息框",0);
  48.                 HDC hdc;
  49.                 hdc=GetDC(hwnd);
  50.                 TextOut(hdc,0,0,"鼠标单击",strlen("鼠标单击"));
  51.         ReleaseDC(hwnd,hdc);
  52.                 break;
  53.         case WM_CLOSE:
  54.                 if(IDYES==MessageBox(hwnd,"是否结束?","message",MB_YESNO))
  55.                 {
  56.                         DestroyWindow(hwnd);
  57.                 }
  58.                 break;
  59.         case WM_DESTROY:
  60.                 PostQuitMessage(0);
  61.                 break;
  62.         default:
  63.                 return DefWindowProc(hwnd,msg,wParam,lParam); //缺省必须使用
  64.         }
  65.         return 0;
  66. }
复制代码


今天自己通宵做了另外一个,一个自动关机的MFC程序,但是能编译,不能运行,但是没有窗口显示,在进程中有,不知道怎么回事!!!!!求大神解答!!!!

  1. #include <windows.h>

  2. #define IDC_RESET                       1000
  3. #define IDC_SETTIME                     1001
  4. #define IDC_CURRENTTIME                 1002
  5. #define IDC_SHUTDOWNTIME                1013
  6. #define IDC_HOUR                        1014
  7. #define IDC_MINUTE                      1015
  8. #define IDC_FREE                        1016
  9. #define IDC_CONST                       1017
  10. #define IDC_CONSTTIME                   1018

  11. #ifdef APSTUDIO_INVOKED
  12. #ifndef APSTUDIO_READONLY_SYMBOLS
  13. #define _APS_NEXT_RESOURCE_VALUE        101
  14. #define _APS_NEXT_COMMAND_VALUE         40001
  15. #define _APS_NEXT_CONTROL_VALUE         1000
  16. #define _APS_NEXT_SYMED_VALUE           101
  17. #endif
  18. #endif
  19. #define ID_TIMER 1

  20. //过程函数原型
  21. LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

  22. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PSTR szCmdLine,int iCmdShow)
  23. {
  24.         //注册类
  25.         static TCHAR szAppName[]=TEXT("Shutdown");
  26.         HWND hwnd;
  27.         MSG msg;
  28.         WNDCLASS wndclass;
  29.         wndclass.style=CS_HREDRAW|CS_VREDRAW;
  30.         wndclass.lpfnWndProc=WndProc;
  31.         wndclass.cbClsExtra=0;
  32.         wndclass.cbWndExtra=DLGWINDOWEXTRA;//note见MSDN的WNDCLASS
  33.         wndclass.hInstance=hInstance;
  34.         wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  35.         wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
  36.         wndclass.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
  37.         wndclass.lpszMenuName=NULL;
  38.         wndclass.lpszClassName=szAppName;
  39.         //判断注册
  40.         if(!RegisterClass(&wndclass))
  41.         {
  42.                 MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
  43.                 return 0;
  44.         }
  45.         hwnd=CreateDialog(hInstance,szAppName,0,NULL);
  46.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,0,(LPARAM)TEXT("3"));
  47.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,1,(LPARAM)TEXT("15"));
  48.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,2,(LPARAM)TEXT("30"));
  49.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,3,(LPARAM)TEXT("60"));
  50.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,4,(LPARAM)TEXT("120"));
  51.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_ADDSTRING,5,(LPARAM)TEXT("240"));
  52.         SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_SETCURSEL,2,0);
  53.         ShowWindow(hwnd,iCmdShow);
  54.         while(GetMessage(&msg,NULL,0,0))
  55.         {
  56.                 TranslateMessage(&msg);
  57.                 DispatchMessage(&msg);
  58.         }
  59.         return msg.wParam;
  60. }
  61. void ShowCurrentTime(HWND hwnd,SYSTEMTIME st)
  62. {
  63.         TCHAR szBuffer[10];
  64.         wsprintf(szBuffer,TEXT("%d:%d:%d"),st.wHour,st.wMinute,st.wSecond);
  65.         SetDlgItemText(hwnd,IDC_CURRENTTIME,szBuffer);
  66. }
  67. BOOL IsTimeValid(HWND hwnd,UINT iTime,BOOL bHour)//判定用户输入的时间是否有效
  68. {
  69.         if(bHour)
  70.         {
  71.                 if(iTime>24)
  72.                 {
  73.                         MessageBox(hwnd,TEXT("一天只有24小时"),TEXT("小提示"),MB_ICONERROR);
  74.                         return 0;
  75.                 }
  76.         }
  77.         else
  78.         {
  79.                 if(iTime>59)
  80.                 {
  81.                         MessageBox(hwnd,TEXT("一小时只有60分钟"),TEXT("小提示"),MB_ICONERROR);
  82.                         return 0;
  83.                 }
  84.         }
  85.         return 1;
  86. }
  87. VOID CALLBACK ShutDownNow(HWND hwnd)//自动关机
  88. {
  89.         //获得权限
  90.         if(1)//IDYES==MessageBox(hwnd,TEXT("确定关机吗?请马上保存文件"),TEXT("警告"),MB_YESNO|MB_ICONQUESTION))
  91.         {
  92.                 OSVERSIONINFO os;
  93.                 os.dwOSVersionInfoSize =sizeof(OSVERSIONINFO);//在调用GetVersionEx函数前必须初始化
  94.                 GetVersionEx(&os);//取得系统版本
  95.                 if(VER_PLATFORM_WIN32_NT==os.dwPlatformId) //32位操作系统
  96.                 {
  97.                         HANDLE handle;
  98.                         TOKEN_PRIVILEGES tkp;
  99.                         OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&handle);//取得当前进程的访问令牌句柄
  100.                         LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);//
  101.                         tkp.PrivilegeCount =1;//表明tkp数组中只有一个元素
  102.                         tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;//需要修改的权限属性
  103.                         AdjustTokenPrivileges(handle,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);//修改访问令牌句柄的某些权限
  104.                         //确定权限正确
  105.                         if(GetLastError()!=ERROR_SUCCESS)
  106.                         {
  107.                                 MessageBox(hwnd,"AdjustTokenPrivileges权限出错","error",MB_OK|MB_ICONERROR);
  108.                                 return;
  109.                         }
  110.                 }
  111.                 ExitWindowsEx(EWX_SHUTDOWN,0);//开始关机
  112.         }
  113. }
  114. LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  115. {
  116.         SYSTEMTIME st;
  117.         TCHAR szBuffer[10];
  118.         int iResult;
  119.         static BOOL bValid=0;
  120.         static BOOL bCheck=0;
  121.         static int iHour,iMinute;
  122.         switch(message)
  123.         {
  124.         case WM_CREATE:
  125.                 SetTimer(hwnd,ID_TIMER,1000,NULL);
  126.                 GetLocalTime(&st);
  127.                 ShowCurrentTime(hwnd,st);
  128.                 return 0;
  129.         case WM_TIMER:
  130.                 GetLocalTime(&st);
  131.                 ShowCurrentTime(hwnd,st);
  132.                 if(bValid)
  133.                 {
  134.                         if(st.wHour==iHour&&st.wMinute==iMinute)
  135.                                 ShutDownNow(hwnd);
  136.                 }
  137.                 return 0;
  138.         case WM_COMMAND:
  139.                 switch(LOWORD(wParam))
  140.                 {
  141.                 case IDC_FREE:
  142.                         CheckRadioButton(hwnd,IDC_FREE,IDC_CONST,IDC_FREE);
  143.                         EnableWindow(GetDlgItem(hwnd,IDC_HOUR),1);
  144.                         EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),1);
  145.                         EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),0);
  146.                         bCheck=1;
  147.                         SetFocus(GetDlgItem(hwnd,IDC_HOUR));
  148.                         return 0;
  149.                 case IDC_CONST:
  150.                         CheckRadioButton(hwnd,IDC_FREE,IDC_CONST,IDC_CONST);
  151.                         EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
  152.                         EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
  153.                         EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),1);
  154.                         bCheck=1;
  155.                         return 0;
  156.                 case IDOK:
  157.                         if(bCheck)//判定是否选择了模式
  158.                         {
  159.                                 if(BST_CHECKED==SendMessage(GetDlgItem(hwnd,IDC_FREE),BM_GETCHECK,0,0))//设定时间模式
  160.                                 {
  161.                                         iHour=GetDlgItemInt(hwnd,IDC_HOUR,0,0);
  162.                                         iMinute=GetDlgItemInt(hwnd,IDC_MINUTE,0,0);
  163.                                         if(IsTimeValid(hwnd,iHour,1)&&IsTimeValid(hwnd,iMinute,0))
  164.                                         {
  165.                                                 wsprintf(szBuffer,TEXT("%d:%d:00"),iHour,iMinute);
  166.                                                 SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),szBuffer);
  167.                                                 EnableWindow(GetDlgItem(hwnd,IDOK),0);
  168.                                                 EnableWindow(GetDlgItem(hwnd,IDC_RESET),1);        
  169.                                                 EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
  170.                                                 EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
  171.                                                 EnableWindow(GetDlgItem(hwnd,IDC_FREE),0);
  172.                                                 EnableWindow(GetDlgItem(hwnd,IDC_CONST),0);
  173.                                                 SendMessage(GetDlgItem(hwnd,IDC_FREE),BM_SETCHECK,BST_UNCHECKED,0);
  174.                                                 bValid=1;
  175.                                                 MessageBox(hwnd,TEXT("设定关机时间成功,请勿关闭该程序"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
  176.                                                 SetFocus(GetDlgItem(hwnd,IDC_RESET));
  177.                                         }
  178.                                 }
  179.                                 else//固定时间模式
  180.                                 {
  181.                                         if(CB_ERR==SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_GETCURSEL,0,0))
  182.                                                 MessageBox(hwnd,TEXT("请先选择关机时间"),TEXT("友情提示"),MB_ICONINFORMATION);               
  183.                                         //SendMessage(GetDlgItem(hwnd,IDC_CONSTTIME),CB_GETLBTEXT,0,(LPARAM)szBuffer);
  184.                                         iResult=GetDlgItemInt(hwnd,IDC_CONSTTIME,0,0);
  185.                                         GetLocalTime(&st);
  186.                                         iMinute=(st.wMinute+iResult%60)%60;
  187.                                         iHour=(st.wHour+iResult/60)+((iResult%60+st.wMinute>59)?1:0);
  188.                                         wsprintf(szBuffer,TEXT("%d:%d:00"),iHour,iMinute);
  189.                                         SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),szBuffer);
  190.                                         EnableWindow(GetDlgItem(hwnd,IDOK),0);
  191.                                         EnableWindow(GetDlgItem(hwnd,IDC_RESET),1);
  192.                                         EnableWindow(GetDlgItem(hwnd,IDC_HOUR),0);
  193.                                         EnableWindow(GetDlgItem(hwnd,IDC_MINUTE),0);
  194.                                         EnableWindow(GetDlgItem(hwnd,IDC_FREE),0);
  195.                                         EnableWindow(GetDlgItem(hwnd,IDC_CONST),0);
  196.                                         EnableWindow(GetDlgItem(hwnd,IDC_CONSTTIME),0);
  197.                                         SendMessage(GetDlgItem(hwnd,IDC_CONST),BM_SETCHECK,BST_UNCHECKED,0);
  198.                                         bValid=1;
  199.                                         MessageBox(hwnd,TEXT("设定关机时间成功,请勿关闭该程序"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
  200.                                         SetFocus(GetDlgItem(hwnd,IDC_RESET));
  201.                                 }
  202.                         }
  203.                         else
  204.                                 MessageBox(hwnd,TEXT("请先设定关机模式"),TEXT("小提示"),MB_ICONINFORMATION);
  205.                         return 0;        
  206.                 case IDC_RESET:
  207.                         SetWindowText(GetDlgItem(hwnd,IDC_SHUTDOWNTIME),TEXT("未设定"));
  208.                         EnableWindow(GetDlgItem(hwnd,IDOK),1);
  209.                         EnableWindow(GetDlgItem(hwnd,IDC_RESET),0);
  210.                         EnableWindow(GetDlgItem(hwnd,IDC_FREE),1);
  211.                         EnableWindow(GetDlgItem(hwnd,IDC_CONST),1);
  212.                         bValid=0;
  213.                         bCheck=0;
  214.                         MessageBox(hwnd,TEXT("已经取消定时关机"),TEXT("友情提示"),MB_OK|MB_ICONINFORMATION);
  215.                         SetFocus(GetDlgItem(hwnd,IDC_SETTIME));
  216.                         return 0;
  217.                 }
  218.                 return 0;
  219.         case WM_DESTROY:
  220.                 KillTimer(hwnd,ID_TIMER);
  221.                 PostQuitMessage(0);
  222.                 return 0;
  223.         }
  224.         return DefWindowProc(hwnd,message,wParam,lParam);
  225. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-22 06:25:14 | 显示全部楼层
顶起来!!!求解答!!!!!!!!!!!激动人心,无法言表!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-22 07:09:10 | 显示全部楼层
我不得不说了……  继续顶!!!!!求解!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-22 08:05:39 | 显示全部楼层
好吧!太长了!有待参考
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-22 08:47:57 | 显示全部楼层
``````````````求!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1太生气了,无法HOLD啦 >_<......
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-22 10:44:42 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-22 10:53:28 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-22 11:44:05 | 显示全部楼层
表示什么都看不懂啊  唉   激动人心,无法言表!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-1 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表