c语言手工添加菜单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言手工添加菜单相关的知识,希望对你有一定的参考价值。

我在编写一个很基本的程序,想从基础做起,不用MFC的自动生成的菜单,而是逐行代码的形式给我的窗口添加菜单.需要您做的有:1.定义一个菜单2.把这个菜单添加到窗口中3.经我实验可以运行4.把我的悬赏分拿走
如果需要的话看看我已经写成的程序框架
#include<windows.h>
#include "allmenu.h"
#include<iostream>
using namespace std;
HMENU hmenu;
HMENU haddmenu;
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

switch(message)
/* case WM_INIT:
hmenu=GetMenu(hwnd);
haddmenu=CreateMenu();

AppendMenu(haddmenu,MF_ENABLED,IDM_OPENBIG,"打开目标图像");
AppendMenu(haddmenu,HF_ENABLED,IDM_OPENSMALL,"打开模板图像");
AppendMenu(haddmenu,HF_ENABLED,IDM_EXIT,"退出");

/* case WM_COMMAND:
switch(LOWORD(wParam))
hmenu=GetMenu(hwnd);
haddmenu=CreateMenu();

AppendMenu(haddmenu,MF_ENABLED,IDM_OPENBIG,"打开目标图像");
AppendMenu(haddmenu,HF_ENABLED,IDM_OPENSMALL,"打开模板图像");
AppendMenu(haddmenu,HF_ENABLED,IDM_EXIT,"退出");
*/
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);

return 0;

//winmain函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
MSG Msg;
WNDCLASS wndclass;
HWND hwnd;
char lpszClassName[]="我的窗口";
char lpszTitle[]="MyWindows";
char lpszMenuName[]="menu";
hmenu=LoadMenu(hInstance,"hmenu");

wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为默认值
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName=lpszMenuName;
wndclass.lpszClassName=lpszClassName;

if(!RegisterClass(&wndclass))
MessageBeep(0);
return false;

//创建窗口
hwnd=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hmenu,
hInstance,
NULL
);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
TranslateMessage(&Msg);
DispatchMessage(&Msg);


return Msg.wParam;

//allmenu.h文件

#define MYMENU 10
#define IDM_OPENSMALL 11

#define IDM_OPENBIG 12
#define IDM_CLOSE 13
#define IDM_EXIT 14

参考技术A CreateMenu的函数放在WinMain函数里面就可以了啊
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
MSG Msg;
WNDCLASS wndclass;
HWND hwnd;
char lpszClassName[]="我的窗口";
char lpszTitle[]="MyWindows";
char lpszMenuName[]="menu";

hmenu=CreateMenu();

AppendMenu(hmenu,MF_ENABLED,IDM_OPENBIG,"打开目标图像");
AppendMenu(hmenu,MF_ENABLED,IDM_OPENSMALL,"打开模板图像");
AppendMenu(hmenu,MF_ENABLED,IDM_EXIT,"退出");

wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为默认值
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.lpszMenuName=lpszMenuName;
wndclass.lpszClassName=lpszClassName;

if(!RegisterClass(&wndclass))
MessageBeep(0);
return false;

//创建窗口
hwnd=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hmenu,
hInstance,
NULL
);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
TranslateMessage(&Msg);
DispatchMessage(&Msg);


return Msg.wParam;
本回答被提问者采纳

如何将更改语言下拉菜单添加到 Django(1.10)管理员?

【中文标题】如何将更改语言下拉菜单添加到 Django(1.10)管理员?【英文标题】:how to add change language dropdown to Django(1.10) admin? 【发布时间】:2017-01-04 13:13:21 【问题描述】:

我打算在我的管理页面中添加更改语言下拉菜单。 根据this code 和How to extend admin page。 我复制base_site.html并将其复制到myapp/templates/admin,然后创建一个名为change_language.html的html文件并在其中写入以下代码:

% load i18n %
/ % trans 'Change language' %
<form action="/i18n/setlang/" method="post" style="display: inline;">
  <div style="display: inline;">
    <select name="language" onchange="javascript:form.submit()">
      % for lang in LANGUAGES %
        <option value=" lang.0 "% ifequal LANGUAGE_CODE lang.0 % selected="selected"% endifequal %> lang.1 </option>
      % endfor %
    </select>
  </div>
</form>

我在这个文件的顶部添加% extends 'admin/base_site.html' %,注意发生了。 我添加 % extends 'admin/base.html' % ,再次注意发生。 所有提示和答案都说我们应该在base.html 的第 25 行更改名称&lt;div id="user-tools"&gt;,但在 Django 1.10 中,它使用不同的人员进入第 31 行。我有点迷失了,因为我在每个地方都阅读了许多不同的员工,而且他们都不适合我。有人知道我在哪里做错了吗? 这是我的中间件:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

和模板设置:

TEMPLATES = [

    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
        os.path.join(BASE_DIR,'templates'),
    ],
    'APP_DIRS': True,
    'OPTIONS': 
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    ,
,
]

【问题讨论】:

你能发布你的中间件和模板引擎吗? 当然。我更新我的问题亲爱的@rfkortekaas 【参考方案1】:

在您的模板/管理文件夹中,确保文件名为 base_site.html(否则默认的 base_site 将不会被覆盖)。

确保从django-repo 复制最新版本的文件。

最重要的是:验证您扩展了管理员 base.html(您的 base_site.html 应以 % extends "admin/base.html" % 开头)

您现在可以添加表单(例如添加到页脚):

% extends "admin/base.html" %
% load i18n %

% block title % title  |  site_title|default:_('Django site admin') % endblock %

% block branding %
<h1 id="site-name"><a href="% url 'admin:index' %"> site_header|default:_('Django administration') </a></h1>
% endblock %

% block nav-global %% endblock %

% block footer %
<div id="footer">
    <form action="/i18n/setlang/" method="post">
    % csrf_token %
        <select name="language">
            % for lang in LANGUAGES %
                <option value=" lang.0 "
                    % ifequal lang.0 request.LANGUAGE_CODE %
                        selected="yes"
                    % endifequal %
                > lang.1 </option>
            % endfor %
        </select>
        <input type="submit" value="% trans 'Change language' %" />
    </form>
</div>
% endblock %

请参阅base.html 以查找似乎适合您的表单的块。

您还需要将i18n urls 添加到您的网址设置中

url(r'^i18n/', include('django.conf.urls.i18n')),

如果您真的想使用 javascript 提交表单,您还需要获取并提交表单的 csrf 令牌。 django docs 涵盖的这个话题相当全面。

【讨论】:

【参考方案2】:

除了 Kim 的回答之外,您还应该在 django 设置 django.template.context_processors.i18n 中添加 i18n 上下文处理器,以便能够访问模板中的 LANGUAGES 变量。

【讨论】:

谢谢!我只是在查看管理站点和语言列表,它是空的。添加后我得到了列表【参考方案3】:

我猜你正在混合你在互联网上找到的两个答案。其中一个从管理模板复制并更改了几个文件,在程序的引用中有效地覆盖了它们。第二个扩展了管理员的模板。您应该完全实现其中之一。

【讨论】:

你能说得更具体些吗?如果我想复制 base.html 文件,我应该把它复制到哪里?它是如何工作的? 这里是来自base.html github.com/django/django/blob/master/django/contrib/admin/…的代码 您的第一个链接建议复制此链接并更改第 25 行(或本示例中的第 28 行)tp 包含您的新 html 文件 (change_language.html) 您的第二个答案建议创建另一个 html 文件(例如 base_site.html,因此它不会与 base.html 冲突)并在原始 base.html 中扩展一个块。在这种情况下,您应该用新代码替换 userlinks 块。 您知道如何访问语言吗?在我的change_languages.html 中,select 没有选项?你能帮助我吗 ? @navit

以上是关于c语言手工添加菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言添加鼠标右键菜单

C语言课程设计

怎样能将汇编语言转换成c语言

编写一个C语言程序,显示如下菜单并实现相应的菜单选择功能

c语言,命令执行完以后怎么返回选择菜单

c语言设计,编程实现学生基本信息管理程序