В настоящее время я работаю над завершением некоторого кода, переданного мне. Это было написано в MFC в Visual Studio 2005 года назад, было приостановлено, и теперь мне привозили.MFC щелкните мышью и переместите диалоговое окно перетаскивания/перетаскивания
Хотя я знаю C++, я провел последние ~ 2 месяца, изучая код и изучая MFC, и он начинает объединяться.
GUI для кода - это SWF-файл, встроенный в невидимое диалоговое окно. У меня нет исходного кода для SWF-файла, поэтому, вероятно, в будущем его повторить в WPF или что-то еще. У меня есть WMMode, установленный в «Window», потому что в Transparent/Opaque он не отображается должным образом, где он мигает/мигает каждый раз, когда происходит событие мыши.
Как бы то ни было, в Win XP/Vista работает щелчок и перетаскивание управления вспышкой. В Windows 7/8.1 он не будет двигаться.
С радостью предоставим всю необходимую информацию. Я все еще немного перегружен диалоговыми окнами MFC, поэтому не знаю, что вы все хотели бы увидеть.
Я нашел этот вопрос: Moving window by click-drag on a control
, который выглядит, как он решает многие проблемы. Тем не менее, я не хочу, чтобы весь элемент управления был доступен как таковой, только верхняя часть. К сожалению, в представлении ресурсов MS элемент управления ActiveX пуст, так как SWF загружается только во время выполнения; Я пытался найти ресурсы для такого рода вещей, но это очень сложно, поскольку я не уверен в технических терминах, которые нужно использовать.
EDIT
Я попытался это, создав очень простое приложение MFC, который имеет статический контроль текста и ничего больше. Я пытаюсь заставить его работать, нажав на статический текст (хотя я могу рисовать себя в угол, поскольку он не имеет встроенного события lButtonDown).
Вот соответствующий код:
class MyDialog : public CDialog
{
public:
MyDialog(CWnd* pParent = NULL) : CDialog(MyDialog::IDD, pParent)
{ }
// Dialog Data, name of dialog form
enum{ IDD = INTERFACE1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
//Called right after constructor. Initialize things here.
virtual BOOL OnInitDialog()
{
CDialog::OnInitDialog();
pText = (CStatic *)GetDlgItem(ID_TEXT);
pText->SetWindowTextW(_T("Hello World!"));
return true;
}
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
private:
CStatic * pText;
public:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
Переопределенный Метод:
afx_msg void MyDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnNcLButtonDown(HTCAPTION, point);
}
Я также попытался установить nFlags в 0x2, вызывая OnLButtonDown (в отличие от onNcLButtonDown), различные другие вещи. Сообщение срабатывает, но окно не перемещается (оно перемещается из строки заголовка, как обычно). Что мне не хватает?
Так что, похоже, вы решили проблему. Вы переопределяете OnLButtonDown и передаете WM_NCLBUTTONDOWN. Если вы хотите только это, можно сказать, что верхняя часть окна, а затем проверить положение мыши и ничего не делать, если мышь не в нужном месте? –
Спасибо за ответ. Я отредактировал свой пост выше, можете ли вы представить какое-либо дальнейшее понимание? – Moe45673