GDI-IntersectClipRect创建一个新的剪裁区域,他是前一个剪裁区域与一个矩形的交集
Posted 天子骄龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDI-IntersectClipRect创建一个新的剪裁区域,他是前一个剪裁区域与一个矩形的交集相关的知识,希望对你有一定的参考价值。
HRGN hrgn1 = CreateRectRgn(10, 10, 200, 200);//创建矩形区域 HDC hdc = ::GetDC(m_hWnd); int n = SelectClipRgn(hdc, hrgn1);//选择剪切区域 int n1=::IntersectClipRect(hdc, 100, 100, 300,300); //创建一个新的剪裁区域,他是前一个剪裁区域与一个矩形的交集 /* 参数1:HDC hdc 设备环境句柄 参数2:int 定义了矩形区域左上角的逻辑X坐标 参数3:int 定义了矩形区域左上角的逻辑Y坐标 参数4:int 定义了矩形区域右下角的逻辑X坐标 参数5:int 定义了矩形区域右下角的逻辑Y坐标 返回值:该返回值表明了新的剪切区域的复杂度,它可是如下几种形式: NULLREGION:剪切区域为空; SIMPLEREGION:剪切区域是单个矩形; COMPIEXREGION:剪切区域有多个矩形; ERROR:剪切区域创建失败 注释:矩形的底边和右边并不排除在剪切区域之外 */ HRGN hrgn = CreateRectRgn(10, 10, 400, 400);//创建矩形区域 HBRUSH hbr = CreateSolidBrush(RGB(0, 0, 255)); //单色的画刷 FillRgn(hdc, hrgn, hbr); //用画刷填充区域 ::ReleaseDC(m_hWnd, hdc);
使用来自另一个模型的下拉列表为菜单创建一个创建视图
【中文标题】使用来自另一个模型的下拉列表为菜单创建一个创建视图【英文标题】:Create a Create view for a Menu With a Dropdownlist from another Model for the dishes 【发布时间】:2014-11-16 13:09:13 【问题描述】:我是一名学生,需要申请学校。 这是餐厅的预订应用程序。 我想为菜单创建一个创建视图,您可以在其中为菜单命名,然后选择该菜单需要的菜肴。这些盘子存放在另一个模型中。 我正在使用这个问题:Create a Dropdown List for MVC3 using Entity Framework (.edmx Model) & Razor Views && Insert A Database Record to Multiple Tables 但没有让它工作。 这是我的模型:
public class MenuAddController
private BonTempsDbContext db = new BonTempsDbContext();
public Menu Menu get; set;
public Dictionary<int, string> Voorgerechten get; set;
public Dictionary<int, string> Hoofdgerechten get; set;
public Dictionary<int, string> Nagerechten get; set;
public MenuAddController()
public MenuAddController(int id)
Menu = db.Menu
.Where(e => e.id == id).SingleOrDefault();
// instantiate your dictionaries
foreach (var Voorgerecht in db.Voorgerecht)
Voorgerechten.Add(Voorgerecht.id, Voorgerecht.description);
foreach (var Hoofdgerecht in db.Hoofdgerecht)
Hoofdgerechten.Add(Hoofdgerecht.id, Hoofdgerecht.description);
foreach (var Nagerecht in db.Nagerecht)
Nagerechten.Add(Nagerecht.id, Nagerecht.description);
这是我的控制器。
public class MenusController : Controller
// GET: Menus
public ActionResult Index()
return View();
[HttpGet]
public ActionResult Add()
return View(new MenuAddController());
[HttpPost]
public ActionResult Add(MenuAddController vm)
if (ModelState.IsValid)
Menu.Add(vm.Menu); <--- this is the error line
return View("Index"); // or wherever you go after successful add
return View(vm);
它给出了一个错误
Menu.Add(vm.Menu);
错误 1“BonTempsMVC.Menu”不包含“添加”的定义
有人可以帮我吗?
【问题讨论】:
【参考方案1】:您的错误是因为MenusController
上没有Menu
属性,即您没有声明任何名为Menu
的东西。看起来您正在尝试在 MenuAddController 上使用 Menu 对象,但它显然不存在于 MenusController 中,因为它是一个完全不同的类。
根据您的类名称,您可能没有完全掌握 MVC 模式。您的MenuAddController
看起来像是在尝试成为一个视图模型,也可能是一个存储库——我无法确定您的意图是什么。好消息是MenusController
就在那里。它唯一缺少的是一种将菜单(正在添加的东西)持久/保存到数据库的方法。
让我们从MenusController
开始,因为您似乎在那里最接近完成。如前所述,数据访问是所有缺失的。我会考虑将BonTempsDbContext
属性添加到控制器类,或者至少在添加(POST)操作中实例化一个,例如
public class MenusController
private BonTempsDbContext db = new BonTempsDbContext();
// actions and stuff
或在动作本身中,例如
[HttpPost]
public ActionResult Add(SomeViewModel vm)
var db = new BonTempsDbContext();
// check model state, etc
// db.Menus.Add(vm.Menu)
我看到的唯一其他奇怪之处是 GET Add 操作。您的变量名称表明您正在向它传递一个控制器,这在 MVC 的上下文中没有意义。我最常看到的约定是传递一个空的视图模型对象(如下所述)来设置要发布到动作的 POST 版本的表单。
这是不完整的(某种伪代码),因为你提到它是家庭作业!
现在到其他位。 MenuAddController 作为对象或名称(对我而言)没有任何意义,因此让我们考虑一个名为 MenuAddViewModel
的新对象,它表示 要添加的 Menu 对象的状态,即对象 ASP。 NET MVC 将在用户提交表单时为您绑定(您尚未显示)。也许在所述视图模型对象上有一个 Menu 属性,这就是您计划保存到数据库的内容,例如
public class MenuAddViewModel
public Menu Menu get; set;
// ...
如果您的表单是以 MVC 可以自动绑定 Menu 属性的方式生成的,那可能就这么简单。这样,您可以在两个 Add 操作中重用(几乎总是一件好事) MenuAddViewModel 对象。您将它传递给 GET 视图,它有助于填充一个空表单,然后用户提交(POST)到“发布”视图和 POOF,数据上下文可以将其保存到数据库或任何位置。
我正在描述的新视图模型对象不需要数据上下文对象,因为它只需要了解 Menu 对象的状态。如果您需要组合菜单项,您可以将属性添加到所述视图模型对象并从那里开始。
【讨论】:
很抱歉,我努力工作并最终成功了,但与您建议的有点不同。仍然非常感谢您的帮助。以上是关于GDI-IntersectClipRect创建一个新的剪裁区域,他是前一个剪裁区域与一个矩形的交集的主要内容,如果未能解决你的问题,请参考以下文章
为啥 docker 必须从 dockerfile 创建一个镜像,然后从该镜像创建一个容器,而不是从 Dockerfile 创建一个容器?