小编Max*_*hun的帖子

如何在 C++ Win32 中捕获鼠标在标题栏上的移动?

我有自己的窗口自定义绘制标题栏。我还在这个栏上画了一个位图,我想知道当有人用鼠标光标悬停在它上面时。我已经处理了该WM_NCMOUSEMOVE消息,但这似乎只在边界上触发,而不是我的标题区域本身。

如何检测鼠标何时位于标题栏的特定区域上?

这是使用 Visual C++ 2010。

更新:

我已经在一定程度上解决了这个问题。我(故意)没有WS_CAPTION在窗口上设置样式,而是处理WM_NCCALCSIZE并手动调整非客户区域的大小 - 在本例中将其向下移动 20 像素。这意味着我“强制”作为非客户区的区域不会收到WM_NCMOUSEMOVE消息,但也不会收到WM_MOUSEMOVE消息。一种解决方法是强制使用样式WM_CAPTION,去掉我的自定义代码,WM_NCCALCSIZE但这并不理想。有办法解决吗?

更新2:

消息也是同样的问题WM_NCHITTESTWS_CAPTION除非我设置了我不想要的样式,否则该区域不会触发这些。此外,它还会以某种方式影响客户区域,因为它不再接收WM_LBUTTONDOWN消息。

c++ winapi visual-c++

5
推荐指数
1
解决办法
1080
查看次数

从完整文件路径中提取文件名

在 VBScript 中,如何将 Test1_QTP 文件夹名称与以下路径分开。我需要将“Test1_QTP”字符串提取到变量中。

C:\TeamTask\Automation\Daily\EB\20140508\Test1_QTP
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏。

vbscript

4
推荐指数
2
解决办法
1万
查看次数

创建阻塞队列

有时,这种实施和执行BlockingQueue确实有效。有时会出现段错误。知道为什么吗?

#include <thread>
using std::thread;
#include <mutex>
using std::mutex;
#include <iostream>
using std::cout;
using std::endl;
#include <queue>
using std::queue;
#include <string>
using std::string;
using std::to_string;
#include <functional>
using std::ref;

template <typename T>
class BlockingQueue {
private:
    mutex mutex_;
    queue<T> queue_;
public:
    T pop() {
        this->mutex_.lock();
        T value = this->queue_.front();
        this->queue_.pop();
        this->mutex_.unlock();
        return value;
    }

    void push(T value) {
        this->mutex_.lock();
        this->queue_.push(value);
        this->mutex_.unlock();
    }

    bool empty() {
        this->mutex_.lock();
        bool check = this->queue_.empty();
        this->mutex_.unlock();
        return check;
    }
};

void fillWorkQueue(BlockingQueue<string>& workQueue) …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading blockingqueue c++11

2
推荐指数
1
解决办法
1万
查看次数