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
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 行更改名称<div id="user-tools">
,但在 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语言手工添加菜单的主要内容,如果未能解决你的问题,请参考以下文章