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 创建一个容器?

如何创建一个按钮来创建另一个按钮并立即显示

用oracle创建一个表

Java如何创建一个类?

ORACLE 创建一个表

我正在使用 Python 创建一个 lambda 以在 s3 存储桶中创建一个文件,但它只创建一行。需要基于迭代的创建