小编tag*_*cht的帖子

Gtk移动窗口超出约束

我目前正在编写一个使用自定义标题栏的gtk程序(即,它没有被窗口管理器修饰).但由于使用自定义标题栏也禁用了拖动窗口的支持,我编写了自定义拖动功能,通过调用来移动窗口window.move(x, y):

bool on_titlebar_drag(GdkEvent* event)
{ 
    static int drag_x_offset = 0; 
    static int drag_y_offset = 0; 
    int x, y; 

    if (event->type == GDK_BUTTON_PRESS) 
    { 
        drag_x_offset = event->button.x; 
        drag_y_offset = event->button.y; 
    } else if(event->type == GDK_BUTTON_RELEASE) { 
        drag_x_offset = 0; 
        drag_y_offset = 0;
    } else if(event->type == GDK_MOTION_NOTIFY) { 
        x = event->motion.x_root - drag_x_offset; 
        y = event->motion.y_root - drag_y_offset; 
        mainWindow.move(x, y);
    }

    return true; 
}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,除了它不能将窗口移动到屏幕范围之外,就像其他窗口的正常行为一样,所以你可以将它"拖出视线"以便为其他人设置位置.

我试图通过调用触摸屏幕来调整窗口的大小,window.resize(width, height)但这不是我打算做的事情,因为调整大小也会将窗口内容调整到较小的比例,而我只想使其物理尺寸更小.我一直在使用也试过set_allocationsize_allocate,这两个didnt做任何改变的.

我的问题是,你知道一种方法可以将窗口移出屏幕边界(不完全,但窗口不完全在屏幕上),或改变窗口大小而不调整大小它的内容?

c c++ gtk gtkmm

6
推荐指数
1
解决办法
146
查看次数

C ++模板化类,其行为取决于类型

说你有一堂这样的课:

template <typename T>
class MyClass {
    public:
    void doSomething();
};
Run Code Online (Sandbox Code Playgroud)

在方法中,有没有办法根据这样的类型而具有不同的行为:

template <typename T> MyClass::doSomething() {
    //this is what I want:
    std::string value = "17";
    if(T == int) {
         int myInt = atoi(value.c_str());
    } else if(T == std::string) {
         std::string myString = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点?
我知道我可以编写一个包装类,该包装类提供一个带有的构造函数std::string,因此我可以使用类似以下内容的东西:

T myVar(value);

但是,如果使用像这样的简单类型,那将浪费更多的资源int,我也想知道if-else-statement能够执行不同的操作。

我会很感激的答案。问候,

标记

c++ templates

3
推荐指数
1
解决办法
2384
查看次数

标签 统计

c++ ×2

c ×1

gtk ×1

gtkmm ×1

templates ×1