我创建了一个带有NSOpenGLView的窗口,我正在将OpenGL内容渲染到其中.
我想在视图中添加一些按钮和文本字段:我可以使用界面构建器(或代码)添加NSTextFields和NSButton,但它们不会出现.
NSOpenGLView被记录为无法拥有子视图,因此我通过直接从NSView派生并实现代码来创建和使用NSOpenGLContext来创建我自己的CustomGLView.但是子视图仍然没有出现: - OpenGL上下文描绘了它们.
在Windows上,这个问题不存在: - 用于托管OpenGL的Windows必须设置WS_CLIPCHILDREN和WS_CHIPSIBLINGS设置样式,以确保OpenGL表面不会遮挡任何对等体或子子视图(视图).
如何在使用OpenGL绘制的NSView上显示子视图?
我有一个比这更复杂的类结构,但把问题归结为它的本质,这描述了我的场景:我有两个类,A和B,实现共享共同祖先的纯虚拟基类,然后是第三个包含A和B的C类.最后,填充纯虚拟基础中常用方法的模板类:
struct I {
virtual void r()=0;
};
struct A : I {};
struct B : I {};
struct C : A, B {
void q(){
r(); // the problem is here.
}
};
struct D : C {
virtual void r(){
}
};
C* c = new D;
c->q();
Run Code Online (Sandbox Code Playgroud)
我的问题是,我看不出任何方法让C :: q调用r().
void C::q(){
r(); // is ambiguous
A::r(); // is pure virtual
B::r(); // also is pure virtual
D::r(); // C doesn't know about D
((D*)this)->r(); // is …Run Code Online (Sandbox Code Playgroud) 我需要将居中文本绘制到CGContext.
我开始使用Cocoa方法.我用文本创建了一个NSCell并尝试绘制它:
NSGraphicsContext* newCtx = [NSGraphicsContext
graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];
Run Code Online (Sandbox Code Playgroud)
但是CGBitmapContext似乎没有在其上呈现文本.可能是因为我必须为inView:参数传递nil.
所以我尝试将文本渲染切换到Core Graphics:
最简单的方法似乎是使用CGContextSelectFont来使用其postscript名称和点大小来选择字体,但CGContextShowTextAtPoint只接受非unicode字符,并且没有明显的方法将文本拟合到矩形:或计算范围一行文本来手动布局矩形.
然后,有一个可以创建的CGFont,并设置cia CGContextSetFont.绘制此文本需要CGContextShowGlyphsAtPoint,但CGContext似乎缺少计算生成文本的边界矩形或将文本换行到rect的函数.另外,如何将字符串转换为CGGlyphs数组并不明显.
下一个选项是尝试使用CoreText来呈现字符串.但Core Text类非常复杂,虽然有一些示例显示如何以指定的字体,在rect中显示文本,但没有示例演示如何计算CoreText字符串的边界矩形.
所以:
我正在寻找一种方法来将线程执行的预定时间片的剩余部分产生到另一个线程.WINAPI中有一个SwitchToThread函数,但它不允许调用者指定它想要切换到的线程.我浏览了MSDN很长一段时间,并没有发现任何可以提供的东西.
对于像我这样的操作系统内部的外行,似乎屈服线程应该能够指定它想要将执行传递给哪个线程.是可能还是仅仅是我的想象力?
我在SVN中有一个XCode项目.我想将一些文件从一个物理目录重新定位到另一个物理目录,但似乎无法在XCode中找到一种方法.如果我在XCode中移动它只是将文件引用从一个Group文件夹移动到下一个,而不更改它们在磁盘上的位置.如果我在Organizer中移动文件 - 组织者好像是SVN不知道,因为我只是花了一个下午手动解开移动,以便我可以办理登机手续.目前我唯一的选择似乎是:1.很多svn命令行mojo,或2.在Windows上检查可以使用TortiseSVN做各种事情(但那时我的XCode项目将会混淆).
我真的希望我错过了一些东西......
我希望能够在使用 SQLite 和 SqlServer 作为 ASP.NET Core 应用程序中实体框架的数据库提供程序之间进行切换。
DbContext将 a与数据库提供程序关联的通常模式是通过ConfigureServices方法中的代码:
services.AddDbContext<FeedbackDbContext>(options => options.UseSqlite(Configuration.GetConnectionString("Feedback")));
Run Code Online (Sandbox Code Playgroud)
EF Core 的每个数据库提供程序都添加了自己的扩展方法,如Use<Provider>.
令我惊讶的是,我找不到在配置中为连接字符串指定数据库提供程序的方法
sql-server system.data.sqlite entity-framework-core asp.net-core
我正在尝试在 EF Core 中构建一个理智的查询,该查询返回一组事物,而这些事物又是从事物集合中派生出来的。基本上在原始 SQL 中,会执行 JOIN。
它在 ASP.NET Core 中,因此初始集合是SecurityPrincipal对象上的角色列表:
var roles = User.FindAll(ClaimTypes.Role).Select(r=>r.Value);
Run Code Online (Sandbox Code Playgroud)
这些角色然后映射到我们数据库中的组,所以我可以查找这些:
var groupsQuery = dbContext.Groups.Where(g=>roles.Any(r=>r==g.GroupName));
var groups = await groupsQuery.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
这个查询很愉快,并按预期返回了一组组。然而,这些组可以访问另一个资源,这正是我真正想要的,因为它是多对多的关系,所以有一个桥接表。
这是我尝试查询 AssetGroup 连接表,以便我可以获取映射到SecurityPrincipal.
var assetGroupsQuery = dbContext.AssetsGroups.Where(ag => groupsQuery.Any(ag => ag.Id == a.GroupId));
var assetGroups = await assetGroupsQuery.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
当我执行第二个查询时,我在输出窗口中收到很多垃圾邮件:
The LINQ expression 'where ([ag].Id == [ag].GroupId)' could not be translated and will be evaluated locally.
The LINQ expression 'Any()' could not be translated and will be evaluated locally.
The LINQ …Run Code Online (Sandbox Code Playgroud) c# entity-framework linq-to-sql entity-framework-core ef-core-2.2
向 docker 节点添加标签是合法且有记录的语法:
docker node update node_x --label-add "label"
Run Code Online (Sandbox Code Playgroud)
这将添加一个标签,当查询时,该标签将显示为空字符串:
$ docker node inspect docker-desktop --format '{{json .Spec.Labels}}'
{"label":""}
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有有效的方法来制定此标签可以满足的放置约束。
对该问题的另一种看法是需要检查标签是否为非空白值。
例如,我可能想给两个节点一个标签:
docker node update node_x --label-add "fruit=apple"
docker node update node_y --label-add "fruit=orange"
Run Code Online (Sandbox Code Playgroud)
但是,作为放置约束,我尝试检查空白标签是否存在,但失败了。同样,虽然我可以检查节点是否是(或不是)特定的水果,但我无法成功测试它是否是[任何]水果。
version: "3.9"
services:
test:
image: alpine
deploy:
placement:
constraints:
- node.labels.label # == or != expected
- node.labels.label=="" # "" unexpected / '' unexpected.
- node.labels.fruit!="" # "" unexpected / '' unexpected.
Run Code Online (Sandbox Code Playgroud)
那么,我是不是错过了什么?有没有某种方法可以检查标签是否已设置,而不检查特定值。有什么方法可以检查已设置但为空白值的标签吗?
所以,是的,我发现自己处于一个可疑的位置,即执行一个SwitchToThisWindow强制我的窗口到前面的调用.我同意,它并不理想,但并不总是可以反对别人认为必要的产品"功能".
现在,我认为SwitchToThisWindow是一个胜利的AttachThreadInput黑客做强制窗口切换,因为它不太可能死锁,应该SwitchToThisWindow被删除,或停止运作我不会抱怨.
但是,SwitchToThisWindow除了在为fAltTab参数传递FALSE时将目标窗口置于顶部,并且如果传递TRUE则不执行任何操作时,会产生令人遗憾的副作用,即将当前前景窗口推送到z顺序的底部.
如何避免这种"推动当前活动到z-bottom"的行为而不诉诸AttachThreadInput?
或者,MS可以删除AttachThreadInput作为一个可行的解决方法,我可以告诉我的经理,实际上,不可能,实际上是不可能的.
我正在尝试使用Code :: Blocks在Ubuntu 11.4上开发GTK +应用程序.
www.gtk.org有关于从源代码构建GTK +的说明,看起来很复杂.但是Ubuntu软件包管理器将libgtk3-dev列为我安装的软件包.
Code :: Blocks我使用Ubuntu软件中心安装.
使用Code :: Blocks项目向导创建一个GTK +项目,当我构建时,项目无法编译"找不到gtk/gtk.h".
显然,GTK include(和lib)文件夹未添加到Code :: Blocks搜索文件夹中.我找到了相关的路径和文件......
我是否必须明确地手动将所有搜索路径添加到Code :: Blocks的搜索路径中?或者我错过了一些安装步骤.
c++ ×2
cocoa ×2
winapi ×2
windows ×2
asp.net-core ×1
c ×1
c# ×1
codeblocks ×1
core-text ×1
docker ×1
ef-core-2.2 ×1
gtk ×1
linq-to-sql ×1
linux ×1
nsopenglview ×1
opengl ×1
sql-server ×1
svn ×1
xcode ×1