From 6a695e8a03a31e78d06d9a4c6bed74098ad22e6a Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Tue, 1 Aug 2023 23:51:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E9=98=B6=E6=AE=B5=E5=8F=AA?= =?UTF-8?q?=E5=B7=AE=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OfficeAssistant_msvc/OfficeAssistant_msvc.qrc | 3 +- .../OfficeAssistant_msvc.vcxproj | 7 ++ .../OfficeAssistant_msvc.vcxproj.filters | 13 ++++ OfficeAssistant_msvc/config.h | 19 ++++-- OfficeAssistant_msvc/icon/wechat.ico | Bin 0 -> 41662 bytes OfficeAssistant_msvc/logo.aps | Bin 0 -> 43740 bytes OfficeAssistant_msvc/logo.rc | Bin 0 -> 3240 bytes OfficeAssistant_msvc/mainscreen.cpp | 7 +- OfficeAssistant_msvc/mainwindow.cpp | 16 +++-- OfficeAssistant_msvc/mainwindow.h | 3 + OfficeAssistant_msvc/mainwindowlayout.cpp | 11 +++- OfficeAssistant_msvc/mysettingsdialog.cpp | 19 ++++-- OfficeAssistant_msvc/mysettingsdialog.ui | 45 ++++++++++++- OfficeAssistant_msvc/navbar.cpp | 60 ++++++++++++------ OfficeAssistant_msvc/navbar.h | 5 ++ OfficeAssistant_msvc/netio.cpp | 11 ++-- OfficeAssistant_msvc/qminiblink.cpp | 2 +- OfficeAssistant_msvc/resource.h | Bin 0 -> 860 bytes icon/logo_navbar.png | Bin 0 -> 4915 bytes icon/wechat.ico | Bin 0 -> 41662 bytes 20 files changed, 167 insertions(+), 54 deletions(-) create mode 100644 OfficeAssistant_msvc/icon/wechat.ico create mode 100644 OfficeAssistant_msvc/logo.aps create mode 100644 OfficeAssistant_msvc/logo.rc create mode 100644 OfficeAssistant_msvc/resource.h create mode 100644 icon/logo_navbar.png create mode 100644 icon/wechat.ico diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.qrc b/OfficeAssistant_msvc/OfficeAssistant_msvc.qrc index c6fd62d..f4afed3 100644 --- a/OfficeAssistant_msvc/OfficeAssistant_msvc.qrc +++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.qrc @@ -1,4 +1,3 @@ - - + diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj index 654475d..d599502 100644 --- a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj +++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj @@ -102,6 +102,7 @@ + @@ -129,6 +130,12 @@ + + + + + + diff --git a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters index 90781a1..07c050c 100644 --- a/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters +++ b/OfficeAssistant_msvc/OfficeAssistant_msvc.vcxproj.filters @@ -40,6 +40,9 @@ Header Files + + Header Files + @@ -116,4 +119,14 @@ Form Files + + + Resource Files + + + + + Resource Files + + \ No newline at end of file diff --git a/OfficeAssistant_msvc/config.h b/OfficeAssistant_msvc/config.h index 95430e3..5fdd6e9 100644 --- a/OfficeAssistant_msvc/config.h +++ b/OfficeAssistant_msvc/config.h @@ -4,13 +4,18 @@ #ifndef OFFICEASSISTANT_CONFIG_H #define OFFICEASSISTANT_CONFIG_H -#define CONFIG_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/config" -#define OP_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/op" -#define DEVICE_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/device" -#define BASE_URL "http://softapi.s103.y01.cn/" -#define DEFAULT_FILE "/config/default_navbar.kmd" -#define KEY "3b046cfe4a2a3e62141a4840f2006210a3224e3615312bef6e19f4983921abe0" - +#define CONFIG_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/config" //获取导航栏信息的地址 +#define OP_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/op" //上传是否设置开机启动、是否建立桌面快捷方式的地址 +#define DEVICE_URL "http://softapi.s103.y01.cn/addons/Kmdsoft/Index/device" //上传设备信息的地址 +#define BASE_URL "http://softapi.s103.y01.cn/" //域名 +#define DEFAULT_FILE "/config/default_navbar.kmd" //默认导航栏文件位置 +#define KEY "3b046cfe4a2a3e62141a4840f2006210a3224e3615312bef6e19f4983921abe0" //Key +#define NAME "办公助手" //中文名 +#define LOGO_TITLEBAR "/icon/logo_navbar.png" //标题栏图标 +#define ENG_NAME "OfficeAssistant" //英文名 +#define LENG_NAME L"OfficeAssistant" //英文名(宽字符) #define ADD_AUTOSTART 1 #define ADD_SHORTCUT 2 +#define VERSION "1.0.0" //软件版本 +#define RELEASE "20230801" //Release #endif //OFFICEASSISTANT_CONFIG_H diff --git a/OfficeAssistant_msvc/icon/wechat.ico b/OfficeAssistant_msvc/icon/wechat.ico new file mode 100644 index 0000000000000000000000000000000000000000..59e8ef836e15672c937a2dae5248eff797a2de71 GIT binary patch literal 41662 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 S+6(8aWBjA|FO()m`TqgU?S*;( literal 0 HcmV?d00001 diff --git a/OfficeAssistant_msvc/logo.aps b/OfficeAssistant_msvc/logo.aps new file mode 100644 index 0000000000000000000000000000000000000000..0d231317d5608dbbce3575107e5f148180090af3 GIT binary patch literal 43740 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 TFgu6N7@dmIWWScQyH2_X(L{w) literal 0 HcmV?d00001 diff --git a/OfficeAssistant_msvc/mainscreen.cpp b/OfficeAssistant_msvc/mainscreen.cpp index b296a86..099f63f 100644 --- a/OfficeAssistant_msvc/mainscreen.cpp +++ b/OfficeAssistant_msvc/mainscreen.cpp @@ -24,12 +24,17 @@ MainScreen::MainScreen(QWidget *parent) : button = new QPushButton(widget); layout_left->addStretch(4); layout_left->addWidget(button,1); + layout_left->setAlignment(Qt::AlignCenter); + button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + button->setMinimumSize(100,50); + button->setMaximumSize(200,100); widget->setLayout(layout_left); widget->setHidden(true); - button->setStyleSheet("border-style:none;padding:10px;border-radius:5px;background-color:#09bb07"); + button->setStyleSheet("border-style:none;padding:10px;border-radius:5px;background-color:#09bb07;color:white;font-family:SimHei"); //Plus Math icon by Icons8 QString dir = QApplication::applicationDirPath(); button->setText(QString::fromLocal8Bit("打开微信")); + //button->setStyleSheet("text-color:white"); layout = new QHBoxLayout; miniblink = new QMiniBlink(this); layout->addWidget(widget, 1); diff --git a/OfficeAssistant_msvc/mainwindow.cpp b/OfficeAssistant_msvc/mainwindow.cpp index 9211661..1689572 100644 --- a/OfficeAssistant_msvc/mainwindow.cpp +++ b/OfficeAssistant_msvc/mainwindow.cpp @@ -6,23 +6,27 @@ #include "mainwindow.h" #include "ui_MainWindow.h" - - - +#include "config.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); - QDesktopWidget* desktopWidget = QApplication::desktop(); + QDesktopWidget* desktopWidget = QApplication::desktop(); QRect deskRect = desktopWidget->availableGeometry(); - //delete desktopWidget; + resize(deskRect.width()*0.8, deskRect.height()*0.8); + setWindowState(Qt::WindowMaximized); mainWindowLayout=new MainWindowLayout(this); setCentralWidget(mainWindowLayout); - setWindowState(Qt::WindowMaximized); + setWindowTitle(QString::fromLocal8Bit(NAME)); + QString path = QApplication::applicationDirPath(); + path += LOGO_TITLEBAR; + icon = new QIcon(path); + setWindowIcon(*icon); } MainWindow::~MainWindow() { + delete icon; this->setCentralWidget(nullptr); delete mainWindowLayout; delete ui; diff --git a/OfficeAssistant_msvc/mainwindow.h b/OfficeAssistant_msvc/mainwindow.h index 2e0eef1..fae4151 100644 --- a/OfficeAssistant_msvc/mainwindow.h +++ b/OfficeAssistant_msvc/mainwindow.h @@ -8,6 +8,8 @@ #include #include #include "mainwindowlayout.h" +#include + QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE @@ -22,6 +24,7 @@ public: private: Ui::MainWindow *ui; + QIcon *icon; QVBoxLayout *layout; MainWindowLayout *mainWindowLayout; }; diff --git a/OfficeAssistant_msvc/mainwindowlayout.cpp b/OfficeAssistant_msvc/mainwindowlayout.cpp index 0ceb15e..ceb9dfe 100644 --- a/OfficeAssistant_msvc/mainwindowlayout.cpp +++ b/OfficeAssistant_msvc/mainwindowlayout.cpp @@ -11,6 +11,7 @@ MainWindowLayout::MainWindowLayout(QWidget *parent) : QWidget(parent), ui(new Ui::MainWindowLayout) { ui->setupUi(this); + setContentsMargins(0, 0, 0, 0); layout=new QVBoxLayout(this); mainWindowLayout = this; ConfigRequest *configRequest = new ConfigRequest; @@ -18,13 +19,17 @@ MainWindowLayout::MainWindowLayout(QWidget *parent) : configRequest->sendRequest(configResponse); mainScreen = new MainScreen(this); navBar=new NavBar(configResponse,mainScreen,this); - navBar->setAttribute(Qt::WA_DeleteOnClose); + navBar->setMinimumHeight(0); + navBar->setMaximumHeight(this->height() / 8); + mainScreen->setMinimumHeight(0); + //navBar->setAttribute(Qt::WA_DeleteOnClose); delete configRequest; //QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::QSizePolicy::Fixed); //navBar->setSizePolicy(sizePolicy); - layout->setMargin(0); + //layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(navBar,1); layout->addWidget(mainScreen,7); + layout->setMargin(0); setLayout(layout); connect(this,&MainWindowLayout::clickButton1,mainScreen,&MainScreen::clickButton1); } @@ -42,7 +47,7 @@ MainWindowLayout::~MainWindowLayout() { void MainWindowLayout::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); - navBar->resize(navBar->width(),height()/8); + navBar->setMaximumHeight(event->size().height()/8); //layout->setAlignment(Qt::AlignmentFlag::AlignHCenter); } diff --git a/OfficeAssistant_msvc/mysettingsdialog.cpp b/OfficeAssistant_msvc/mysettingsdialog.cpp index 307afa7..1888e71 100644 --- a/OfficeAssistant_msvc/mysettingsdialog.cpp +++ b/OfficeAssistant_msvc/mysettingsdialog.cpp @@ -2,11 +2,13 @@ #include #include #include "netio.h" +#include "config.h" #include "globalvariables.h" MySettingsDialog::MySettingsDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); + setWindowFlags(Qt::WindowCloseButtonHint); this->setFixedSize(width(), height()); HKEY hRoot = HKEY_CURRENT_USER; wchar_t *szSubKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; @@ -19,10 +21,10 @@ MySettingsDialog::MySettingsDialog(QWidget *parent) } QString app = QApplication::applicationFilePath(); app.replace("/", "\\"); - DWORD size=128; - wchar_t reg[128]; - lRet = RegGetValue(hRoot, szSubKey, L"OfficeAssistant", RRF_RT_ANY, nullptr, reg, &size); - if (wcscmp(reg,app.toStdWString().c_str())==0) { + DWORD size=128+sizeof(wchar_t); + char reg[128] = { 0 }; + lRet = RegQueryValueEx(hKey, L"OfficeAssistant", NULL, NULL,(LPBYTE)reg, &size); + if (lRet==0) { ui.autostart->setChecked(true); } copyButton = ui.copy; @@ -31,6 +33,7 @@ MySettingsDialog::MySettingsDialog(QWidget *parent) connect(ui.addshortcut, &QPushButton::clicked, this, &MySettingsDialog::createShortcut); connect(ui.law_button, &QPushButton::clicked, this, &MySettingsDialog::law); ui.code->setText(QString(QCryptographicHash::hash(getMachineGUID().toUtf8(), QCryptographicHash::Md5).toHex())); + ui.version->setText(QString(VERSION) + "-" + QString(RELEASE)); } MySettingsDialog::~MySettingsDialog() @@ -53,7 +56,7 @@ void MySettingsDialog::autoStart(int state) QString app = QApplication::applicationFilePath(); app.replace("/", "\\"); qDebug() << app.toStdWString().c_str(); - lRet = RegSetValueEx(hKey, L"OfficeAssistant", 0, REG_SZ, (BYTE*)app.toStdWString().c_str(), app.length()*sizeof(wchar_t)); + lRet = RegSetValueEx(hKey, LENG_NAME, 0, REG_SZ, (BYTE*)app.toStdWString().c_str(), app.length()*sizeof(wchar_t)); if (lRet == ERROR_SUCCESS) { QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("创建开机启动项成功")); @@ -72,7 +75,7 @@ void MySettingsDialog::autoStart(int state) return; } QString app = QApplication::applicationFilePath(); - lRet = RegDeleteValue(hKey, L"OfficeAssistant"); + lRet = RegDeleteValue(hKey, LENG_NAME); if (lRet == ERROR_SUCCESS) { QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("移除开机启动项成功。")); @@ -95,7 +98,9 @@ void MySettingsDialog::copyToCLipboard() { } void MySettingsDialog::createShortcut() { QString deskTopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); - deskTopPath = deskTopPath + QString::fromLocal8Bit("/办公助手.lnk"); + deskTopPath = deskTopPath + QString::fromLocal8Bit("/"); + deskTopPath = deskTopPath + QString::fromLocal8Bit(NAME); + deskTopPath = deskTopPath + QString::fromLocal8Bit(".lnk"); QString srcFile = QApplication::applicationFilePath(); bool succeed=QFile::link(srcFile, deskTopPath); if (succeed) { diff --git a/OfficeAssistant_msvc/mysettingsdialog.ui b/OfficeAssistant_msvc/mysettingsdialog.ui index cef95d5..a9423cf 100644 --- a/OfficeAssistant_msvc/mysettingsdialog.ui +++ b/OfficeAssistant_msvc/mysettingsdialog.ui @@ -26,12 +26,51 @@ 70 - 70 + 40 581 - 381 + 461 + + + + + 0 + 1 + + + + 鐗堟湰淇℃伅 + + + + + 20 + 50 + 108 + 24 + + + + 鐗堟湰鍙 + + + + + + 130 + 50 + 261 + 24 + + + + TextLabel + + + + @@ -151,6 +190,8 @@ + gridLayoutWidget + hardware diff --git a/OfficeAssistant_msvc/navbar.cpp b/OfficeAssistant_msvc/navbar.cpp index 334eec6..181c6a4 100644 --- a/OfficeAssistant_msvc/navbar.cpp +++ b/OfficeAssistant_msvc/navbar.cpp @@ -9,6 +9,7 @@ #include "config.h" #include #include +#include #include "mainwindowlayout.h" #include "globalvariables.h" #ifdef _DEBUG @@ -20,30 +21,50 @@ QString url_param; NavBar::NavBar(ConfigResponse *configResponse, MainScreen *mainScreen,QWidget *parent) : QWidget(parent), ui(new Ui::NavBar) { ui->setupUi(this); - this->setAttribute(Qt::WA_DeleteOnClose); + //this->setAttribute(Qt::WA_DeleteOnClose); buffer = new QByteArray; + /*QString style = "background-color:"; + style += configResponse->basic.backgroud_color.toUpper(); + style += ";"; + setStyleSheet(style);*/ + //setStyleSheet("margin:0"); + setContentsMargins(0, 0, 0, 0); if (configResponse->succeed&&configResponse->menus.empty()!=true) { getLogoFromInternet(configResponse); } else { getLogoFromLocal(); } - this->setLayout(nullptr); - int n = buttonStructs.length(); - int x = (width() - height()*n) / 2; + layout2 = new QHBoxLayout; + layout_right = new QHBoxLayout; + layout_left = new QHBoxLayout; + logo_label = new QLabel(this); + //*logo = logo->scaled(this->width() / (5 / scale), this->height()); + logo_label->setScaledContents(true); + logo_label->setPixmap(QPixmap::fromImage(*logo)); + logo_label->setMaximumHeight(parent->height() / 8); + layout_left->addWidget(logo_label); + layout_left->setAlignment(Qt::AlignCenter); for (auto buttonStruct : buttonStructs) { MyButton *myButton = new MyButton(buttonStruct, height(), height(), &buttons,this); - myButton->setGeometry(x, 0, height(), height()); - myButton->show(); + myButton->setMaximumHeight(parent->height() / 8); + layout_right->addWidget(myButton); + //myButton->show(); connect(myButton, &MyButton::clicked1, mainWindowLayout, &MainWindowLayout::clickButton); - x += height(); buttons << myButton; } + layout_right->setAlignment(Qt::AlignLeft); if (!buttonStructs.empty()) { connect(this, &NavBar::firstUrl, mainScreen, &MainScreen::firstUrl); emit firstUrl(buttonStructs[0].url); } - + layout2->addLayout(layout_left, 1); + layout2->addLayout(layout_right, 4); + layout_right->setMargin(0); + layout2->setMargin(0); + //layout2->setAlignment(Qt::AlignJustify); + this->setLayout(layout2); + logo_label->show(); } NavBar::~NavBar() { @@ -52,8 +73,15 @@ NavBar::~NavBar() { delete buttonStruct.image_cover; } for(auto button : buttons){ + layout_right->removeWidget(button); delete button; } + layout2->removeWidget(logo_label); + delete logo_label; + delete logo; + //delete layout_left; + delete layout_right; + delete layout2; delete ui; } @@ -66,20 +94,14 @@ void NavBar::paintEvent(QPaintEvent *event) { QRectF rect(0, 0, this->width(), this->height()); painter.fillRect(rect, qColor); - QRectF rect2(0, 0, this->width()/5, this->height()); - painter.drawImage(rect2, *logo); - } void NavBar::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); - int n = buttonStructs.length(); - int x = (width() - height()*n) / 2; for(auto button:buttons){ - button->setSize(event->size().height(),event->size().height(),event->size().height(),event->size().height()); - button->setGeometry(x, 0, event->size().height(), event->size().height()); - x += event->size().height(); + button->setMaximumSize(event->size().height(), event->size().height()); button->update(); } + logo_label->setMaximumSize(event->size().width() / 5, event->size().height()); } void NavBar::getLogoFromInternet(ConfigResponse *configResponse) { qColor.setNamedColor(configResponse->basic.backgroud_color); @@ -98,10 +120,8 @@ void NavBar::getLogoFromInternet(ConfigResponse *configResponse) { delete request_logo; if (downloadSuccess == true) { *buffer = reply->readAll(); - QSvgRenderer *render_logo = new QSvgRenderer(*buffer); - logo = new QImage(400, 200, QImage::Format_ARGB32); - QPainter painter_logo(logo); - render_logo->render(&painter_logo); + logo = new QImage(); + logo->loadFromData(*buffer); buffer->clear(); for (auto button : configResponse->menus) { QUrl url_image(button.img); diff --git a/OfficeAssistant_msvc/navbar.h b/OfficeAssistant_msvc/navbar.h index d151b6d..32f3f68 100644 --- a/OfficeAssistant_msvc/navbar.h +++ b/OfficeAssistant_msvc/navbar.h @@ -16,6 +16,7 @@ #include "buttonstruct.h" #include #include "mainscreen.h" +#include #include "mainwindowlayout.h" @@ -49,10 +50,14 @@ private: QNetworkReply *reply; QEventLoop eventLoop; QImage *logo; + QLabel *logo_label; bool downloadSuccess=true; void getLogoFromInternet(ConfigResponse *configResponse); void getLogoFromLocal(); MainScreen *mainScreen; + QHBoxLayout *layout_left; + QHBoxLayout *layout_right; + QHBoxLayout *layout2; private slots: void storeToBuffer(); void cancelDownload(); diff --git a/OfficeAssistant_msvc/netio.cpp b/OfficeAssistant_msvc/netio.cpp index 590327c..d39fe52 100644 --- a/OfficeAssistant_msvc/netio.cpp +++ b/OfficeAssistant_msvc/netio.cpp @@ -65,11 +65,6 @@ RequestBodyBase::RequestBodyBase(){ exit(1); } parter_id=obj_root.value("parter_id").toString(); - if(obj_root.value("release")==QJsonValue::Undefined){ - QMessageBox::warning(nullptr, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("配置文件损坏")); - exit(1); - } - release=obj_root.value("release").toString(); }else{ //处理错误 QMessageBox::warning(nullptr, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("配置文件损坏")); @@ -107,6 +102,8 @@ RequestBodyBase::RequestBodyBase(){ default: os_version="Unknown"; } + this->release = RELEASE; + this->version = VERSION; //读取MachineGUID并取MD5作为device_id QByteArray hash = QCryptographicHash::hash(getMachineGUID().toUtf8(), QCryptographicHash::Md5); device_id = hash.toHex(); @@ -114,6 +111,10 @@ RequestBodyBase::RequestBodyBase(){ QJsonValue value = device_id; QJsonObject obj_root = qJsonDocument.object(); obj_root.insert("device_id", value); + QJsonValue version_json = this->version; + obj_root.insert("version", version_json); + QJsonValue release_json = this->release; + obj_root.insert("release", release_json); qJsonDocument.setObject(obj_root); QJsonValue os_json(this->os); QJsonValue os_version_json(this->os_version); diff --git a/OfficeAssistant_msvc/qminiblink.cpp b/OfficeAssistant_msvc/qminiblink.cpp index 2802e75..45ef1aa 100644 --- a/OfficeAssistant_msvc/qminiblink.cpp +++ b/OfficeAssistant_msvc/qminiblink.cpp @@ -15,7 +15,7 @@ void QMiniBlink::init() { ui.setupUi(this); wkeInit(); RECT rect; - GetWindowRect((HWND)this->winId(), &rect); + GetWindowRect((HWND)parent->winId(), &rect); resize(rect.right - rect.left, rect.bottom - rect.top); this->wkeView = wkeCreateWebWindow(WKE_WINDOW_TYPE_CONTROL, (HWND)this->winId(), 0, 0, rect.right - rect.left, rect.bottom - rect.top); diff --git a/OfficeAssistant_msvc/resource.h b/OfficeAssistant_msvc/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..5bfe071e7d60c07fd3cd2e255507a240a86032d8 GIT binary patch literal 860 zcmb7?(MkeQ5Qcw(Zi1jU=zuqYkQ%+fw(EtYYqTnLwWw(rlHj%$M06AM5WQ!Y)i=9| zB__!*o;k;vfByMrKR-$;=@ARnRIET%o#9~?h4NM77U>Dw)egBOIW;s=UsFw#;6vT< z*5NHts;v2t=#Wz%7`?fLLT(17_`xkDicy0gy literal 0 HcmV?d00001 diff --git a/icon/logo_navbar.png b/icon/logo_navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c0e4a6ffb6437fe00975c0624f1826fb40ee57 GIT binary patch literal 4915 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 R3)ic2{G<3U