这就是我想要完成的事情:
+--------screen-----------------------+ | ______________________ |*| | |_static_header______| |*| | | | | |*| | | content |menu | |*| | | scrollable |static| |*| | | | | |*| | | | | |*| | | | | |*| +-------------------------------------+
内容的高度可变,内容滚动条必须显示在页面正文中(而不是在页面上).我设法得到了基本的想法,但是当滚动条显示时,我很难将内容div放在正确的位置,即使我设置为始终显示滚动条,我也不能使用固定宽度,因为它们不同从浏览器到浏览器.
<div style="position:absolute; background-color:Transparent; left:0px; right:0px; height:100px; z-index:2;">
<div style="background-color:Silver; width:1000px; height:100px; margin:0 auto;">
Header
</div>
</div>
<!-- Fixed div acting as the body "page" so the scrollbar shows as the page's -->
<div style="position:absolute; left:0px; top:0px; bottom:0px; right:0px; overflow-y:auto; …
Run Code Online (Sandbox Code Playgroud) 我一直在使用 .NET Core 的防伪 Cookie ( https://learn.microsoft.com/en-us/aspnet/core/security/anti-request-forgery ),并且我总是在登录:
// - HomeController.cs
[HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Login()
{
ClaimsIdentity identity = new ClaimsIdentity("myAuthType");
ClaimsPrincipal principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync("myScheme", principal,
new AuthenticationProperties
{
ExpiresUtc = DateTime.UtcNow.AddMinutes(10),
AllowRefresh = true,
IsPersistent = true
});
return View();
}
Run Code Online (Sandbox Code Playgroud)
代码完成后,每个调用/视图都会生成一个新的 X-XSRF-Cookie 并发送到浏览器,浏览器会为某些 Api 调用发送回该值。其代码是:
// - Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(o => o.HeaderName = CrossSiteAntiForgery.Header);
services.AddMvc(o => {
o.Filters.AddService(typeof(CrossSiteAntiForgery));
});
}
// - CrossSiteAntiForgery.cs
public class CrossSiteAntiForgery : ResultFilterAttribute
{ …
Run Code Online (Sandbox Code Playgroud) 这样做的正确方法是什么?
我正在做这些步骤:
在http://www.opengl.org/wiki/GLSL_Object中,它说:即使在链接程序之后,您也不必显式分离着色器对象.但是,一旦链接完成,最好这样做,否则当您尝试删除它们时,程序对象将保持其附加的着色器对象处于活动状态.
还有从正确的方式删除GLSL着色器?如果我不删除着色器,它会增加内存.
因此,对检查http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml,它说,如果着色器已经通过向glDeleteShader呼叫标记为删除,并没有连接到任何其他程序对象,它将在分离后删除.
所以我的#6是无用的,除非我在正确之后分开它?
在正确编译程序后(为了节省内存),我应该分离和删除吗?还是应该在我的应用程序关闭时分离/删除?
嗯,我正在阅读一些这方面的指南,但我无法弄清楚这一点,我如何在C++中正确使用函数指针?
我有一个类,我想在它完成它正在做的任何事情后调用一个函数,像这样:
class WindowImages
{
public:
void Update()
{
for(unsigned int i = 0; i < _images.size(); i++)
{
//Do something
_images[i]->MyFunctionPointer();
}
}
void Add(Image* image, void (*func)(void))
{
image->function = func; //this is wrong
_images.push_back(image);
}
private:
vector<Image*> _images;
}
class Image
{
public:
void ImageClicked();
void *function(void);
};
void main()
{
Image* image = new Image();
WindowImages images;
images.Add(image, image->ImageClicked);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将图像添加到矢量中,并传递一个函数作为参数,当图像类完成与每个图像有关的任何操作时将调用该函数.每个图像的功能都不同,但它们都是void function()格式.
我一直在尝试一堆东西但到目前为止什么都没有,我怎么能这样做?此外,如果您碰巧有更多...初学者友好的教程或函数指针指南(甚至可能是C++ 11 lambdas),这将是非常有用的!
我创建了一个简单的 UserControl,它有一个Value
属性:
public partial class Label : UserControl
{
public Label()
{
InitializeComponent();
DataContext = this;
}
public object Value
{
get { return GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(object), typeof(Label), new PropertyMetadata(""));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这个 XAML:
<Border BorderBrush="#A0A0A0" BorderThickness="1, 1, 0, 0" CornerRadius="1">
<Border BorderBrush="#000000" BorderThickness="0, 0, 1, 1" CornerRadius="1">
<Border.Background>
<LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
<GradientStop Color="#FFFFFF" Offset="0.0" />
<GradientStop Color="#E0E0E0" Offset="1.0" />
</LinearGradientBrush>
</Border.Background>
<TextBlock Width="100" …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个游戏项目作为业余爱好,我目前正处于需要将一些资源数据(例如.BMP)存储到我自己的文件格式中的部分,因此我的游戏可以解析所有这些并加载到屏幕.
为了读取BMP,我读取了标题,然后是每个像素的RGB数据,我有一个存储这些值的数组[width] [height].
我被告知我应该用二进制保存这些类型的数据,但不是原因.我读过关于二进制及其内容(数据的0-1表示),但为什么我应该用它来保存.BMP数据呢?如果我稍后会在游戏中阅读它,它是否只会增加更复杂性甚至可能减慢加载过程?
最后,如果以二进制保存更好(我猜它是,从我在其他游戏资源文件中研究的每个人看起来如何这样做)我如何在C++中读写二进制文件?我已经看到很多问题,但是对于许多不同类型的变量有许多不同的方法,所以我问的是哪种方法最好/更多C++是这样做的?
我读过某处某时以前,矢量导致取决于他们是如何使用的内存泄漏,但我想问只是要确定:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
vector<somePtr*> listPtrs;
return 0;
//Detects memory leaks
}
Run Code Online (Sandbox Code Playgroud)
这没有发现任何东西:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
{
vector<somePtr*> listPtrs;
}
return 0;
//No memory leaks detected
}
Run Code Online (Sandbox Code Playgroud)
在清除指针之前,正在从向量中删除对象.我想我记得读过它们所在的块之后会自动删除向量和列表以及其他std容器,所以在示例1中我得到了内存泄漏,因为在块结束之前调用了内存泄漏函数,所以向量还活着并造成它.
我不确定它,但是我已经有一段时间了,因为我认为我读过这个,我只能找到关于没有被删除的对象的问题,只是删除了指针.
这是真的?如果我使用包含向量和列表的全局类,我会得到内存泄漏吗?
我正在编写一个游戏引擎,我为对象设置了这个类:
class SceneManager //controls everything in the "world" game
{
public:
void Add(SceneObject* object); //adds to the vector
private:
vector<SceneObject*> _worldObjects; //the vector that contains all of them
}
Run Code Online (Sandbox Code Playgroud)
我在游戏上工作的所有类都继承自SceneObject:
class SceneObject
{
public:
virtual void Draw() = 0;
}
class Image : public SceneObject
{ }
class Sprite : public SceneObject
{ }
class Model3D : public SceneObject
{ }
Run Code Online (Sandbox Code Playgroud)
所以我知道我可以为我的向量中的所有对象调用Draw().但我一直致力于优化,我正在尝试摆脱所有继承和虚函数,而是使用组合,因为它们无法内联,并且在每个对象上执行时似乎是一个主要的性能问题基础.
我正在寻找一些C++技术,我可以使用它来在我的向量中存储一堆SceneObjects,然后在它上面调用Draw()并正确绘制与之相关的对象.这也适用于我用作虚拟的Update()函数.
所以这段代码:
void SceneManager::Add(SceneObject* object)
{
_worldObjects.push_back(object);
}
void SceneManager::DrawTheWorld()
{
for(unsigned int i = 0; i < …
Run Code Online (Sandbox Code Playgroud) 我遇到std :: list和内存泄漏问题:
class AbstractObject
{
public:
virtual void Say() = 0;
}
class RealObject : public AbstractObject
{
public:
virtual void Say() { cout << "Real Obj Says..." << endl; } //Do I need the "virtual" keyword here too?
}
class AnotherRealObject : public AbstractObject
{
public:
virtual void Say() { cout << "Another Real Obj Says..." << endl; } //Do I need the "virtual" keyword here too?
}
class PackOfObjects
{
public:
std::list<AbstractObject*> objects; //list of pointers because …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个游戏引擎,我正在创建一些资源基类,如顶点,纹理,字体等.
现在我正在创建一些基本类,我希望将其暴露给使用这些基类的另一个程序员,例如Image(使用纹理),Text(使用字体),Models(使用顶点)等
游戏引擎也暴露出来,所以他们可以调用它的功能,例如编码游戏.
但我不希望他们访问基类,我也不希望它与他们的类冲突.例如,他们可能想为某个内容创建一个名为"Material"的类,但我的资源已经有一个"Material"类,我怎样才能避免冲突,甚至更好,隐藏这些基类(所以他们不要乱用它并打破了一些东西)?
编辑:例如,我有暴露的类Image.它包含Quad和Texture基类的私有实例,我的资源管理器确保总是只加载其中一个(因此我在内存中没有重复的纹理/四边形).
纹理本身具有宽度/高度,并管理加载到卡的数据.Quad相同.
图像确保在请求图像调整大小时,它会更改需要更改的所有内容并将数据重新上载到卡中.
纹理和四边形是公共的,因为它们几乎用于所有地方,有模块和一些应用效果的类.
他们(其他程序员)可以使用Image作为实例,继承或作为成员,因为它管理自己,我只想暴露这个Image类,所以他们不知道有Quad和Texture类,它也不会也不会影响他们的班级命名.