hur.cn - 华软网

 热门搜索

一个神秘的估计大家没注意过的小问题,关于系统菜单的!!!

  作者:未知    来源:网络    更新时间:2011/1/13
我在RC资料中的资源以下:
ABOUTBOX DIALOG DISCARDABLE  32, 32, 181, 102
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | 
    WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "I LOVE ZHAOXUJING"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,66,81,50,14
    ICON            "ABOUT1",IDC_STATIC,7,7,21,23
    CTEXT           "About1",IDC_STATIC,40,12,100,8
    CTEXT           "About Box Demo Program",IDC_STATIC,7,40,167,8
    CTEXT           "(c) Charles Petzold, 1998",IDC_STATIC,7,52,167,8
END

对话框的气概我在这里举行了设置,结果运行的时候弹出的模式对话框有最大,最小化,题目列,然则惟独没有这个所谓的系统菜单。查了MSDN也没什么特殊描写对此。
所有特地来论坛跟大家讨论一下,究竟是出了什么问题,3Q!
尝试用了 VC 6和VS08。
---华软 网友回答---
STYLE DS_MODALFRAME | WS_POPUP|WS_OVERLAPPEDWINDOW
这样写一样是一个情况,不出现系统菜单。
---华软网友回复---
没人回答是否有点难,算了我贴出代码
C++">#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc      (HWND, UINT, WPARAM, LPARAM) ;
BOOL    CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("About1") ;
     MSG          msg ;
     HWND         hwnd ;
     WNDCLASS     wndclass ;
     
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = szAppName ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
     
     ShowWindow (hwnd, iCmdShow) ;
     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 int a;
     
     switch (message)
     {
     case WM_CREATE :
          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
          return 0 ;
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDM_APP_ABOUT :
               a=DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
               break ;
          }
          return 0 ;
          
     case WM_DESTROY :
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, 
                            WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_INITDIALOG :
 SetWindowText(hDlg,TEXT("I LOVE ZHAOXUJING 1WANNIAN"));
          return TRUE ;
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
          case IDCANCEL :
               EndDialog (hDlg, 3) ;
               return TRUE ;
          }
          break ;
     }
     return FALSE ;
}

---华软网友回复---
所谓的“系统菜单”指的是题目栏 右键弹出的“最大化,最小化,关闭”这个菜单,你把WS_SYSMENU气概去掉,你看看右键题目栏有啥转变
---华软网友回复---
你这个资源资料里边也没有菜单得定义啊

IDC_QWE MENU DISCARDABLE
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit",                IDM_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About ...",           IDM_ABOUT
    END
END
---华软网友回复---
"ABOUTBOX"?
---华软网友回复---
犯糊涂了,我的错!
---华软网友回复---
现在系统菜单有了,咋么向平常的应用程序那样增加个图标呢?
---华软网友回复---
资源资料中定义icon资源 或 bitmap资源

在程序中 wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
或wndclass.hIcon         = LoadIcon (hInstance, MakeInterSource(ICON_ID)) ;
---华软网友回复---
引用 8 楼 wangbo56916860 的回复:
资源资料中定义icon资源 或 bitmap资源

在程序中 wndclass.hIcon = LoadIcon (hInstance, szAppName) ;
或wndclass.hIcon = LoadIcon (hInstance, MakeInterSource(ICON_ID)) ;


恩,是的,我就是用这个方法实现的主窗口系统菜单图标,我这里问的是如果给这个模态对话框增加上系统菜单图标,由于我已经增加了系统菜单了在STYLE中。
---华软网友回复---
问题已经解决了,能够在WM_INITDIALOG中SendMessage(HWND,WM_SETICON,WPARAM,LPARAM)来实现。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。