<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 海前 王</title>
    <description>The latest articles on DEV Community by 海前 王 (@__040711563a17902392e7).</description>
    <link>https://dev.to/__040711563a17902392e7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1403388%2Ff8a1a5ef-3d87-406d-a057-d3581039ba77.png</url>
      <title>DEV Community: 海前 王</title>
      <link>https://dev.to/__040711563a17902392e7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/__040711563a17902392e7"/>
    <language>en</language>
    <item>
      <title>layout</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 13 Sep 2024 08:35:32 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/layout-4c19</link>
      <guid>https://dev.to/__040711563a17902392e7/layout-4c19</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;QApplication&amp;gt;
#include &amp;lt;QMainWindow&amp;gt;
#include &amp;lt;QListView&amp;gt;
#include &amp;lt;QStandardItemModel&amp;gt;
#include &amp;lt;QVBoxLayout&amp;gt;
#include &amp;lt;QLabel&amp;gt;
#include &amp;lt;QTransform&amp;gt;
#include &amp;lt;QPainter&amp;gt;

class VerticalLabel : public QLabel
{
public:
    VerticalLabel(const QString &amp;amp;text, QWidget *parent = nullptr) : QLabel(text, parent)
    {
        setAlignment(Qt::AlignCenter);
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);
        QTransform transform;
        transform.rotate(-90); // 旋转90度
        painter.setTransform(transform);
        painter.drawText(-height(), 0, height(), width(), alignment(), text());
    }

    QSize sizeHint() const override
    {
        QSize s = QLabel::sizeHint();
        return QSize(s.height(), s.width()); // 交换宽高
    }
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
    {
        setWindowTitle("QListView Example");
        resize(400, 300);

        // 创建数据模型
        QStandardItemModel *model = new QStandardItemModel;
        QStringList fileList = {"File1.txt", "File2.txt", "File3.txt", "File4.txt"};

        for (const QString &amp;amp;file : fileList) {
            QStandardItem *item = new QStandardItem(file);
            model-&amp;gt;appendRow(item);
        }

        // 创建列表视图
        QListView *listView = new QListView;
        listView-&amp;gt;setModel(model);
        listView-&amp;gt;setViewMode(QListView::ListMode); // 设置视图模式为列表模式
        listView-&amp;gt;setSelectionMode(QAbstractItemView::SingleSelection); // 设置选择模式为单选
        listView-&amp;gt;setSpacing(5); // 设置项目间距

        // 创建垂直标签
        VerticalLabel *titleLabel = new VerticalLabel("File List");

        // 布局管理
        QHBoxLayout *layout = new QHBoxLayout;
        layout-&amp;gt;addWidget(listView);
        layout-&amp;gt;addWidget(titleLabel); // 将标题放在右侧

        QWidget *centralWidget = new QWidget;
        centralWidget-&amp;gt;setLayout(layout);
        setCentralWidget(centralWidget);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建主窗口并显示
    MainWindow mainWindow;
    mainWindow.show();

    return app.exec();
}

#include "main.moc"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>treectrl</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Thu, 12 Sep 2024 05:43:30 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/treectrl-214e</link>
      <guid>https://dev.to/__040711563a17902392e7/treectrl-214e</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// MFCApplication1Dlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include"Resource.h"
#include&amp;lt;vector&amp;gt;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

///////////////////////////////////////////////
void InitTreeControl(CString strRoot, HTREEITEM hTreeItemParent = NULL);
///////////////////////////////////////////////////////////
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
    , m_find(_T(""))
{
    m_hIcon = AfxGetApp()-&amp;gt;LoadIcon(IDR_MAINFRAME);
}

void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    //  DDX_Text(pDX, IDC_EDIT1, treeCtrl);
    DDX_Text(pDX, IDC_EDIT1, m_find);
    DDX_Control(pDX, IDC_TREE1, treeCtrl);
    DDX_Control(pDX, IDC_TREE2, m_ctlTree);
}

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_EN_CHANGE(IDC_EDIT1, &amp;amp;CMFCApplication1Dlg::OnEnChangeEdit1)
    ON_BN_CLICKED(IDOK, &amp;amp;CMFCApplication1Dlg::OnBnClickedOk)
END_MESSAGE_MAP()


// CMFCApplication1Dlg 消息处理程序

BOOL CMFCApplication1Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX &amp;amp; 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX &amp;lt; 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != nullptr)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu-&amp;gt;AppendMenu(MF_SEPARATOR);
            pSysMenu-&amp;gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时，框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);         // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码


    // Initialize the tree control
    CString root[2] = { TEXT("A"), TEXT("B") };

    for (int i = 0; i &amp;lt; 2; i++)
    {
        HTREEITEM r = treeCtrl.InsertItem(root[i], NULL);

        CString str;
        for (int j = 0; j &amp;lt; 3; j++)
        {
            str.Format(TEXT("%s%d"), root[i], j + 1);
            HTREEITEM j1 = treeCtrl.InsertItem(str, r);

            CString str1;
            for (int m = 0; m &amp;lt; 3; m++)
            {
                str1.Format(TEXT("%s%d%d"), root[i], j + 1, m + 1);
                HTREEITEM m1 = treeCtrl.InsertItem(str1, j1);

                CString str2;
                for (int q = 0; q &amp;lt; 3; q++)
                {
                    str2.Format(TEXT("%s%d%d%d"), root[i], j + 1, m + 1, q + 1);
                    HTREEITEM q1 = treeCtrl.InsertItem(str2, m1);

                    CString str3;
                    for (int s = 0; s &amp;lt; 3; s++)
                    {
                        str3.Format(TEXT("%s%d%d%d%d"), root[i], j + 1, m + 1, q + 1, s + 1);
                        HTREEITEM s1 = treeCtrl.InsertItem(str3, q1);
                    }
                }
            }
        }
    }
    m_ctlTree.ModifyStyle(NULL, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);




    return TRUE;  // 除非将焦点设置到控件，否则返回 TRUE
}

void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID &amp;amp; 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }
}

// 如果向对话框添加最小化按钮，则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序，
//  这将由框架自动完成。

void CMFCApplication1Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast&amp;lt;WPARAM&amp;gt;(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&amp;amp;rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
    return static_cast&amp;lt;HCURSOR&amp;gt;(m_hIcon);
}

void CMFCApplication1Dlg::func(HTREEITEM root, CString condition)
{
    CString itemText = treeCtrl.GetItemText(root);

    if (itemText.Find(condition) != -1)
    {
        treeCtrl.SelectItem(root);
        treeCtrl.SetCheck(root, TRUE);
        treeCtrl.Expand(root, TVM_EXPAND);
        return;
    }

    HTREEITEM A1 = treeCtrl.GetChildItem(root);
    std::vector&amp;lt;HTREEITEM&amp;gt; vecItem;

    while (A1 != NULL)
    {
        vecItem.push_back(A1);
        A1 = treeCtrl.GetNextItem(A1, TVGN_NEXT);
    }

    for (int q = (int)vecItem.size() - 1; q &amp;gt; -1; q--)
    {
        CString itemText = treeCtrl.GetItemText(vecItem[q]);

        if (itemText.Find(condition) != -1)
        {
            treeCtrl.SelectItem(vecItem[q]);
            treeCtrl.SetCheck(vecItem[q], TRUE);
            treeCtrl.Expand(vecItem[q], TVM_EXPAND);
            vecItem.clear();
            return;
        }
        else
        {
            func(vecItem[q], condition);
        }
    }
}




void CMFCApplication1Dlg::OnEnChangeEdit1()
{
    // TODO:  如果该控件是 RICHEDIT 控件，它将不
    // 发送此通知，除非重写 CDialogEx::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask()，
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。

    // TODO:  在此添加控件通知处理程序代码
}


void CMFCApplication1Dlg::OnBnClickedOk()
{
    UpdateData(TRUE);

    std::vector&amp;lt;HTREEITEM&amp;gt; vecItem;
    HTREEITEM root = treeCtrl.GetRootItem();

    while (root != NULL)
    {
        vecItem.push_back(root);
        root = treeCtrl.GetNextItem(root, TVGN_NEXT);
    }

    for (int q = (int)vecItem.size() - 1; q &amp;gt; -1; q--)
    {
        func(vecItem[q], m_find);
    }

    CString rootPath = _T("E:\\BaiduNetdiskDownload"); // Change to your root folder path
    m_ctlTree.DeleteAllItems(); // Clear existing items
    InitTreeControl(rootPath);
    UpdateData();
}

void CMFCApplication1Dlg::InitTreeControl(CString strRoot, HTREEITEM hTreeItemParent)
{

    CStringArray strArrayFolderPath;
    CStringArray strArrayFilePath;

    HTREEITEM hTreeItemChild = NULL;
    CString strParentData = L"";
    CString strChildData = L"";

    if (hTreeItemParent == NULL)
    {
        strParentData = strRoot;
        hTreeItemParent = m_ctlTree.InsertItem(strParentData);
    }

    FileSearch(strRoot, strArrayFolderPath, strArrayFilePath);

    for (int i = 0; i &amp;lt; strArrayFolderPath.GetSize(); i++)
    {
        strChildData = strArrayFolderPath.GetAt(i);
        hTreeItemChild = m_ctlTree.InsertItem(strChildData, hTreeItemParent);

        // Recursive call to add subfolders and files
        InitTreeControl(strChildData, hTreeItemChild);
    }

    for (int i = 0; i &amp;lt; strArrayFilePath.GetSize(); i++)
    {
        strChildData = strArrayFilePath.GetAt(i);
        hTreeItemChild = m_ctlTree.InsertItem(strChildData, hTreeItemParent);
    }
}
int CMFCApplication1Dlg::FileSearch(CString strRootFolderPath, CStringArray&amp;amp; strArrayFolderPath, CStringArray&amp;amp; strArrayFilePath)
{
    strArrayFolderPath.RemoveAll();
    strArrayFilePath.RemoveAll();

    int nChildFolderCounts = 0;
    CFileFind ff;
    CString FilePath;

    if (strRootFolderPath.Right(1) != _T("\\"))
    {
        strRootFolderPath += _T("\\");
    }
    strRootFolderPath += _T("*.*");

    BOOL res = ff.FindFile(strRootFolderPath);
    while (res)
    {
        res = ff.FindNextFile();
        FilePath = ff.GetFilePath();
        if (ff.IsDirectory() &amp;amp;&amp;amp; !ff.IsDots()) // Found a directory
        {
            strArrayFolderPath.Add(FilePath);
            nChildFolderCounts++;
        }
        else if (!ff.IsDirectory() &amp;amp;&amp;amp; !ff.IsDots()) // Found a file
        {
            strArrayFilePath.Add(FilePath);
        }
    }

    return nChildFolderCounts;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>归一化</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Tue, 10 Sep 2024 08:52:15 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/gui-hua-1e8c</link>
      <guid>https://dev.to/__040711563a17902392e7/gui-hua-1e8c</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;limits&amp;gt;
#include &amp;lt;sstream&amp;gt;

struct Vertex {
    float x, y, z;
};

std::vector&amp;lt;Vertex&amp;gt; LoadOBJ(const std::string&amp;amp; filename, std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; faces) {
    std::ifstream file(filename);
    std::vector&amp;lt;Vertex&amp;gt; vertices;
    std::string line;

    if (!file.is_open()) {
        std::cerr &amp;lt;&amp;lt; "Error opening file." &amp;lt;&amp;lt; std::endl;
        return vertices;
    }

    while (std::getline(file, line)) {
        std::istringstream ss(line);
        std::string type;
        ss &amp;gt;&amp;gt; type;

        if (type == "v") {
            Vertex v;
            ss &amp;gt;&amp;gt; v.x &amp;gt;&amp;gt; v.y &amp;gt;&amp;gt; v.z;
            vertices.push_back(v);
        } else if (type == "f") {
            std::vector&amp;lt;int&amp;gt; face;
            int index;
            while (ss &amp;gt;&amp;gt; index) {
                face.push_back(index - 1); // OBJ indices start from 1
            }
            faces.push_back(face);
        }
    }

    return vertices;
}

void ComputeBoundingBox(const std::vector&amp;lt;Vertex&amp;gt;&amp;amp; vertices, Vertex&amp;amp; minVertex, Vertex&amp;amp; maxVertex) {
    minVertex = { std::numeric_limits&amp;lt;float&amp;gt;::max(), std::numeric_limits&amp;lt;float&amp;gt;::max(), std::numeric_limits&amp;lt;float&amp;gt;::max() };
    maxVertex = { std::numeric_limits&amp;lt;float&amp;gt;::lowest(), std::numeric_limits&amp;lt;float&amp;gt;::lowest(), std::numeric_limits&amp;lt;float&amp;gt;::lowest() };

    for (const Vertex&amp;amp; v : vertices) {
        if (v.x &amp;lt; minVertex.x) minVertex.x = v.x;
        if (v.y &amp;lt; minVertex.y) minVertex.y = v.y;
        if (v.z &amp;lt; minVertex.z) minVertex.z = v.z;

        if (v.x &amp;gt; maxVertex.x) maxVertex.x = v.x;
        if (v.y &amp;gt; maxVertex.y) maxVertex.y = v.y;
        if (v.z &amp;gt; maxVertex.z) maxVertex.z = v.z;
    }
}

void NormalizeVertices(std::vector&amp;lt;Vertex&amp;gt;&amp;amp; vertices, const Vertex&amp;amp; minVertex, const Vertex&amp;amp; maxVertex) {
    for (Vertex&amp;amp; v : vertices) {
        v.x = (v.x - minVertex.x) / (maxVertex.x - minVertex.x);
        v.y = (v.y - minVertex.y) / (maxVertex.y - minVertex.y);
        v.z = (v.z - minVertex.z) / (maxVertex.z - minVertex.z);
    }
}

int main() {
    std::vector&amp;lt;Vertex&amp;gt; vertices;
    std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; faces;

    // Load the OBJ file
    vertices = LoadOBJ("model.obj", faces);

    if (vertices.empty()) {
        std::cerr &amp;lt;&amp;lt; "No vertices loaded." &amp;lt;&amp;lt; std::endl;
        return 1;
    }

    // Compute bounding box
    Vertex minVertex, maxVertex;
    ComputeBoundingBox(vertices, minVertex, maxVertex);

    // Normalize vertices
    NormalizeVertices(vertices, minVertex, maxVertex);

    std::cout &amp;lt;&amp;lt; "Bounding box min: (" &amp;lt;&amp;lt; minVertex.x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; minVertex.y &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; minVertex.z &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Bounding box max: (" &amp;lt;&amp;lt; maxVertex.x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; maxVertex.y &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; maxVertex.z &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;

    std::cout &amp;lt;&amp;lt; "Vertices normalized:" &amp;lt;&amp;lt; std::endl;
    for (const Vertex&amp;amp; v : vertices) {
        std::cout &amp;lt;&amp;lt; "(" &amp;lt;&amp;lt; v.x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; v.y &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; v.z &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
    }

    return 0;
}
#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;limits&amp;gt;

const wchar_t CLASS_NAME[] = L"Sample Window Class";

struct Vertex {
    float x, y, z;
};

// 示例归一化顶点数据
std::vector&amp;lt;Vertex&amp;gt; normalizedVertices = {
    {0.1f, 0.1f, 0.0f},
    {0.9f, 0.1f, 0.0f},
    {0.9f, 0.9f, 0.0f},
    {0.1f, 0.9f, 0.0f}
};

// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    static HDC hdc;

    switch (uMsg) {
    case WM_CREATE:
        hdc = GetDC(hwnd);
        break;

    case WM_PAINT: {
        PAINTSTRUCT ps;
        HDC hdcMem = BeginPaint(hwnd, &amp;amp;ps);

        // 填充背景色
        RECT rect;
        GetClientRect(hwnd, &amp;amp;rect);
        HBRUSH hBrush = CreateSolidBrush(RGB(255, 255, 255)); // 创建白色画刷
        FillRect(hdcMem, &amp;amp;rect, hBrush); // 用白色填充背景
        DeleteObject(hBrush); // 释放画刷对象

        // 绘制归一化点
        for (const Vertex&amp;amp; v : normalizedVertices) {
            int x = static_cast&amp;lt;int&amp;gt;(v.x * (rect.right - rect.left)); // 映射到窗口宽度
            int y = static_cast&amp;lt;int&amp;gt;(v.y * (rect.bottom - rect.top)); // 映射到窗口高度
            Ellipse(hdcMem, x - 5, y - 5, x + 5, y + 5); // 绘制圆点
        }

        EndPaint(hwnd, &amp;amp;ps);
        break;
    }

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
    // 注册窗口类
    WNDCLASS wc = { };
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;
    RegisterClass(&amp;amp;wc);

    // 创建窗口
    HWND hwnd = CreateWindowEx(
        0, CLASS_NAME, L"Sample Window",
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
        NULL, NULL, hInstance, NULL
    );

    if (hwnd == NULL) {
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 运行消息循环
    MSG msg;
    while (GetMessage(&amp;amp;msg, NULL, 0, 0)) {
        TranslateMessage(&amp;amp;msg);
        DispatchMessage(&amp;amp;msg);
    }

    return 0;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>win32 mapwindowpoints</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Tue, 10 Sep 2024 08:19:56 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/win32-mapwindowpoints-5bk7</link>
      <guid>https://dev.to/__040711563a17902392e7/win32-mapwindowpoints-5bk7</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;iostream&amp;gt;

// Global variables for window handles
HWND hWndMain;
HWND hWndChild;

// Function to create a console window
void CreateConsole() {
    // Allocate a console for the calling process
    AllocConsole();

    // Redirect standard output to the console
    FILE* pFile;
    freopen_s(&amp;amp;pFile, "CONOUT$", "w", stdout);

    // Optionally, you can redirect standard input and error as well
    freopen_s(&amp;amp;pFile, "CONIN$", "r", stdin);
    freopen_s(&amp;amp;pFile, "CONOUT$", "w", stderr);

    std::cout &amp;lt;&amp;lt; "Console created." &amp;lt;&amp;lt; std::endl;
}

// Function to handle window messages
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hwnd, &amp;amp;ps);
                // Draw a simple rectangle in the child window
                RECT rect = { 50, 50, 200, 200 };
                FillRect(hdc, &amp;amp;rect, (HBRUSH)(COLOR_WINDOW + 1));
                EndPaint(hwnd, &amp;amp;ps);
            }
            return 0;
        case WM_LBUTTONDOWN:
            {
                POINT points[2];
                points[0].x = LOWORD(lParam);
                points[0].y = HIWORD(lParam);
                points[1].x = points[0].x + 50; // Just an example offset
                points[1].y = points[0].y + 50;

                std::cout &amp;lt;&amp;lt; "Source window coordinates:" &amp;lt;&amp;lt; std::endl;
                std::cout &amp;lt;&amp;lt; "Point 0: (" &amp;lt;&amp;lt; points[0].x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; points[0].y &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
                std::cout &amp;lt;&amp;lt; "Point 1: (" &amp;lt;&amp;lt; points[1].x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; points[1].y &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;

                // Map points from the main window to the child window
                MapWindowPoints(hWndMain, hWndChild, points, 2);

                std::cout &amp;lt;&amp;lt; "Target window coordinates:" &amp;lt;&amp;lt; std::endl;
                std::cout &amp;lt;&amp;lt; "Point 0: (" &amp;lt;&amp;lt; points[0].x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; points[0].y &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
                std::cout &amp;lt;&amp;lt; "Point 1: (" &amp;lt;&amp;lt; points[1].x &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; points[1].y &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
            }
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

// Function to register and create windows
void CreateWindows(HINSTANCE hInstance) {
    // Register the main window class
    const char CLASS_NAME[] = "Main Window Class";

    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&amp;amp;wc);

    // Create the main window
    hWndMain = CreateWindowEx(
        0,
        CLASS_NAME,
        "Main Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL
    );

    ShowWindow(hWndMain, SW_SHOW);
    UpdateWindow(hWndMain);

    // Create the child window
    hWndChild = CreateWindowEx(
        0,
        CLASS_NAME,
        "Child Window",
        WS_CHILD | WS_VISIBLE,
        50, 50, 300, 300,
        hWndMain,
        NULL,
        hInstance,
        NULL
    );
}

// Entry point of the program
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    MSG msg;

    // Create a console window for output
    CreateConsole();

    CreateWindows(hInstance);

    // Main message loop
    while (GetMessage(&amp;amp;msg, NULL, 0, 0)) {
        TranslateMessage(&amp;amp;msg);
        DispatchMessage(&amp;amp;msg);
    }

    return 0;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>lvs</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Tue, 10 Sep 2024 01:54:05 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/lvs-4ee2</link>
      <guid>https://dev.to/__040711563a17902392e7/lvs-4ee2</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 获取对话框的客户区大小
    RECT rect;
    GetClientRect(&amp;amp;rect);

    // 创建 ListCtrl 控件
    m_ListCtrl.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_OWNERDRAW, 
                      CRect(0, 0, rect.right, rect.bottom), this, IDC_LISTCTRL);

    // 添加列
    m_ListCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100);
    m_ListCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100);

    // 添加项
    for (int i = 0; i &amp;lt; 50; ++i)
    {
        CString str;
        str.Format(_T("Item %d"), i + 1);
        m_ListCtrl.InsertItem(i, str);
        m_ListCtrl.SetItemText(i, 1, _T("Detail"));
    }

    // 初始化滚动条
    SCROLLINFO si = { sizeof(si) };
    si.fMask = SIF_RANGE | SIF_PAGE;
    si.nMin = 0;
    si.nMax = 50;
    si.nPage = 10; // Number of visible items
    m_ListCtrl.SetScrollInfo(SB_VERT, &amp;amp;si, TRUE);

    return TRUE;
}
void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);

    if (m_ListCtrl.GetSafeHwnd())
    {
        m_ListCtrl.MoveWindow(0, 0, cx, cy);

        SCROLLINFO si = { sizeof(si) };
        si.fMask = SIF_RANGE | SIF_PAGE;
        si.nMin = 0;
        si.nMax = 50;
        si.nPage = cy / cyChar; // Adjust the page size based on the dialog size
        m_ListCtrl.SetScrollInfo(SB_VERT, &amp;amp;si, TRUE);
    }
}

void CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    int nScrollPos = m_ListCtrl.GetScrollPos(SB_VERT);

    switch (nSBCode)
    {
    case SB_LINEDOWN:
        nScrollPos += 1;
        break;
    case SB_LINEUP:
        nScrollPos -= 1;
        break;
    case SB_PAGEDOWN:
        nScrollPos += m_ListCtrl.GetScrollInfo(SB_VERT).nPage;
        break;
    case SB_PAGEUP:
        nScrollPos -= m_ListCtrl.GetScrollInfo(SB_VERT).nPage;
        break;
    case SB_THUMBPOSITION:
        nScrollPos = nPos;
        break;
    }

    // Ensure the scroll position is within valid range
    nScrollPos = max(0, min(nScrollPos, 50 - m_ListCtrl.GetScrollInfo(SB_VERT).nPage));

    m_ListCtrl.SetScrollPos(SB_VERT, nScrollPos);
    m_ListCtrl.Scroll(CSize(0, (nScrollPos - m_ListCtrl.GetScrollPos(SB_VERT)) * cyChar));

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_WM_SIZE()
    ON_WM_VSCROLL()
END_MESSAGE_MAP()



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>tvs</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Mon, 09 Sep 2024 04:21:52 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/tvs-303b</link>
      <guid>https://dev.to/__040711563a17902392e7/tvs-303b</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;下面是你提供的commctrl.h头文件中的树视图控件（TreeView）相关宏和结构体定义的翻译整理版本。这些定义通常用于设置和操作树视图控件的属性和状态。

树视图控件样式标志
cpp
复制代码
#define TVS_HASBUTTONS          0x0001 // 节点前显示按钮
#define TVS_HASLINES            0x0002 // 节点之间显示连接线
#define TVS_LINESATROOT         0x0004 // 根节点显示连接线
#define TVS_EDITLABELS          0x0008 // 允许编辑节点标签
#define TVS_DISABLEDRAGDROP     0x0010 // 禁用拖放操作
#define TVS_SHOWSELALWAYS       0x0020 // 始终显示选中状态
#define TVS_RTLREADING          0x0040 // 从右到左读取文本

#define TVS_NOTOOLTIPS          0x0080 // 禁用工具提示
#define TVS_CHECKBOXES          0x0100 // 显示复选框
#define TVS_TRACKSELECT         0x0200 // 跟踪选中状态
#define TVS_SINGLEEXPAND        0x0400 // 单一展开节点
#define TVS_INFOTIP             0x0800 // 显示信息提示
#define TVS_FULLROWSELECT       0x1000 // 选择整行
#define TVS_NOSCROLL            0x2000 // 禁用滚动
#define TVS_NONEVENHEIGHT       0x4000 // 禁用不均匀高度
#define TVS_NOHSCROLL           0x8000 // 禁用水平滚动（TVS_NOSCROLL覆盖此选项）

#if (NTDDI_VERSION &amp;gt;= NTDDI_WINXP)
#define TVS_EX_NOSINGLECOLLAPSE     0x0001 // 禁用单一折叠
#endif

#if (NTDDI_VERSION &amp;gt;= NTDDI_VISTA)
#define TVS_EX_MULTISELECT          0x0002 // 支持多重选择
#define TVS_EX_DOUBLEBUFFER         0x0004 // 双缓冲显示
#define TVS_EX_NOINDENTSTATE        0x0008 // 不保留缩进状态
#define TVS_EX_RICHTOOLTIP          0x0010 // 丰富工具提示
#define TVS_EX_AUTOHSCROLL          0x0020 // 自动水平滚动
#define TVS_EX_FADEINOUTEXPANDOS    0x0040 // 展开动画
#define TVS_EX_PARTIALCHECKBOXES    0x0080 // 部分复选框
#define TVS_EX_EXCLUSIONCHECKBOXES  0x0100 // 排他性复选框
#define TVS_EX_DIMMEDCHECKBOXES     0x0200 // 灰暗复选框
#define TVS_EX_DRAWIMAGEASYNC       0x0400 // 异步绘制图像
#endif
树视图项（TVITEM）标志
cpp
复制代码
#define TVIF_TEXT               0x0001 // 项目文本
#define TVIF_IMAGE              0x0002 // 项目图像
#define TVIF_PARAM              0x0004 // 项目参数
#define TVIF_STATE              0x0008 // 项目状态
#define TVIF_HANDLE             0x0010 // 项目句柄
#define TVIF_SELECTEDIMAGE      0x0020 // 选中状态图像
#define TVIF_CHILDREN           0x0040 // 项目是否有子节点
#define TVIF_INTEGRAL           0x0080 // 项目是否完整
#if (_WIN32_IE &amp;gt;= 0x0600)
#define TVIF_STATEEX            0x0100 // 扩展状态
#define TVIF_EXPANDEDIMAGE      0x0200 // 展开状态图像
#endif
树视图项状态标志
cpp
复制代码
#define TVIS_SELECTED           0x0002 // 项目被选中
#define TVIS_CUT                0x0004 // 项目被剪切
#define TVIS_DROPHILITED        0x0008 // 项目被拖放高亮
#define TVIS_BOLD               0x0010 // 项目加粗
#define TVIS_EXPANDED           0x0020 // 项目已展开
#define TVIS_EXPANDEDONCE       0x0040 // 项目曾经展开过
#define TVIS_EXPANDPARTIAL      0x0080 // 项目部分展开

#define TVIS_OVERLAYMASK        0x0F00 // 覆盖图像掩码
#define TVIS_STATEIMAGEMASK     0xF000 // 状态图像掩码
#define TVIS_USERMASK           0xF000 // 用户定义掩码

#if (_WIN32_IE &amp;gt;= 0x0600)
#define TVIS_EX_FLAT            0x0001 // 扁平化视图
#if (NTDDI_VERSION &amp;gt;= NTDDI_VISTA)
#define TVIS_EX_DISABLED        0x0002 // 禁用项
#endif
#define TVIS_EX_ALL             0x0002 // 所有扩展标志
#endif
NMTVSTATEIMAGECHANGING 结构体
cpp
复制代码
typedef struct tagNMTVSTATEIMAGECHANGING
{
    NMHDR hdr; // 通用消息头
    HTREEITEM hti; // 项目句柄
    int iOldStateImageIndex; // 旧状态图像索引
    int iNewStateImageIndex; // 新状态图像索引
} NMTVSTATEIMAGECHANGING, *LPNMTVSTATEIMAGECHANGING;
特殊常量
cpp
复制代码
#define I_CHILDRENCALLBACK  (-1) // 使用回调函数获取子项
#define I_CHILDRENAUTO      (-2) // 自动获取子项
TVITEM 结构体别名
cpp
复制代码
#define LPTV_ITEMW              LPTVITEMW // 指向 TVITEMW 的指针
#define LPTV_ITEMA              LPTVITEMA // 指向 TVITEMA 的指针
#define TV_ITEMW                TVITEMW   // TVITEMW 结构
#define TV_ITEMA                TVITEMA   // TVITEMA 结构
#define LPTV_ITEM               LPTVITEM  // 指向 TVITEM 的指针
#define TV_ITEM                 TVITEM    // TVITEM 结构
TVITEM 结构体定义
这部分结构体定义在你提供的代码中被截断，完整定义应包括以下内容：

cpp
复制代码
typedef struct tagTVITEMA
{
    UINT mask;               // 控制哪些成员有效
    int iItem;               // 项目索引
    int iImage;              // 图像索引
    int iSelectedImage;      // 选中状态图像索引
    UINT state;              // 项目状态
    UINT stateMask;          // 状态掩码
    LPSTR pszText;           // 指向文本的指针
    int cchTextMax;          // 文本缓冲区最大字符数
    LPARAM lParam;           // 自定义参数
} TVITEMA, *LPTVITEMA;
请根据需要将 TVITEM 和相关结构体根据实际情况进行调整和补充。





&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>treeview imagine</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Mon, 09 Sep 2024 04:17:18 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/treeview-imagine-624</link>
      <guid>https://dev.to/__040711563a17902392e7/treeview-imagine-624</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   CImageList* pImageList = new CImageList();

        // 创建一个包含16x16像素的图像列表
        pImageList-&amp;gt;Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);

        // 加载图标到图像列表中
        HICON hIcon1 = AfxGetApp()-&amp;gt;LoadIcon(IDI_ICON1); // 替换为你的图标ID
        HICON hIcon2 = AfxGetApp()-&amp;gt;LoadIcon(IDI_ICON2); // 替换为你的图标ID

        // 将图标添加到图像列表中，0和1是图标的索引
        pImageList-&amp;gt;Add(hIcon1);
        pImageList-&amp;gt;Add(hIcon2);

        // 将图像列表设置为树控件的普通图像列表
        SetImageList(pImageList, TVSIL_NORMAL);

        // 插入节点，设置图标索引
        HTREEITEM hRoot = InsertItem(_T("Root Node"), 0, 0); // 使用图标索引0
        InsertItem(_T("Child Node"), 1, 1, hRoot); // 使用图标索引1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>mfc open console test</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 06 Sep 2024 06:22:21 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/mfc-open-console-test-11nn</link>
      <guid>https://dev.to/__040711563a17902392e7/mfc-open-console-test-11nn</guid>
      <description>&lt;h1&gt;
  
  
  define _CRT_SECURE_NO_WARNINGS
&lt;/h1&gt;

&lt;h1&gt;
  
  
  include  // MFC 核心和标准组件
&lt;/h1&gt;

&lt;h1&gt;
  
  
  include  // 标准输入输出流
&lt;/h1&gt;

&lt;h1&gt;
  
  
  include  // Windows API 函数
&lt;/h1&gt;

&lt;p&gt;class CMyFrameWnd : public CFrameWnd {&lt;br&gt;
public:&lt;br&gt;
    CMyFrameWnd() {&lt;br&gt;
        Create(NULL, _T("Key Event Handling Window"), WS_OVERLAPPEDWINDOW, CRect(0, 0, 300, 200));&lt;br&gt;
    }&lt;/p&gt;

&lt;p&gt;protected:&lt;br&gt;
    // 处理按键事件&lt;br&gt;
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {&lt;br&gt;
        // 输出按键虚拟键码到控制台&lt;br&gt;
        std::cout &amp;lt;&amp;lt; "Key Pressed: " &amp;lt;&amp;lt; nChar &amp;lt;&amp;lt; std::endl;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // 调用基类的处理方法
    CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}

DECLARE_MESSAGE_MAP()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)&lt;br&gt;
    ON_WM_KEYDOWN()&lt;br&gt;
END_MESSAGE_MAP()&lt;/p&gt;

&lt;p&gt;class CMyApp : public CWinApp {&lt;br&gt;
public:&lt;br&gt;
    virtual BOOL InitInstance() {&lt;br&gt;
        // 创建控制台窗口&lt;br&gt;
        AllocConsole();&lt;br&gt;
        freopen("CONOUT$", "w", stdout);&lt;br&gt;
        freopen("CONIN$", "r", stdin);&lt;br&gt;
        freopen("CONIN$", "r", stderr);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    CMyFrameWnd* pFrame = new CMyFrameWnd;
    m_pMainWnd = pFrame;

    pFrame-&amp;gt;ShowWindow(SW_SHOW);
    pFrame-&amp;gt;UpdateWindow();

    return TRUE;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;CMyApp theApp;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>透明窗体拖动</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 06 Sep 2024 06:21:57 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/tou-ming-chuang-ti-tuo-dong-1200</link>
      <guid>https://dev.to/__040711563a17902392e7/tou-ming-chuang-ti-tuo-dong-1200</guid>
      <description>&lt;p&gt;include  // MFC 核心和标准组件&lt;/p&gt;

&lt;h1&gt;
  
  
  include  // Windows API 函数
&lt;/h1&gt;

&lt;p&gt;class CMyFrameWnd : public CFrameWnd {&lt;br&gt;
public:&lt;br&gt;
    CMyFrameWnd() {&lt;br&gt;
        Create(NULL, _T("Transparent Draggable Window"), WS_POPUP, CRect(0, 0, 300, 200));&lt;br&gt;
    }&lt;/p&gt;

&lt;p&gt;protected:&lt;br&gt;
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) override {&lt;br&gt;
        return TRUE; // 不创建子窗口&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;afx_msg void OnPaint() {
    CPaintDC dc(this); // device context for painting
    // 在这里可以进行绘图操作
}

afx_msg LRESULT OnNcHitTest(CPoint point) {
    LRESULT nHitTest = CFrameWnd::OnNcHitTest(point);
    return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}

afx_msg void OnLButtonDown(UINT nFlags, CPoint point) {
    CFrameWnd::OnLButtonDown(nFlags, point);
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}

afx_msg void OnSize(UINT nType, int cx, int cy) {
    CFrameWnd::OnSize(nType, cx, cy);
    Invalidate(); // 使窗口重新绘制
}

DECLARE_MESSAGE_MAP()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)&lt;br&gt;
    ON_WM_PAINT()&lt;br&gt;
    ON_WM_NCHITTEST()&lt;br&gt;
    ON_WM_LBUTTONDOWN()&lt;br&gt;
    ON_WM_SIZE()&lt;br&gt;
END_MESSAGE_MAP()&lt;/p&gt;

&lt;p&gt;class CMyApp : public CWinApp {&lt;br&gt;
public:&lt;br&gt;
    virtual BOOL InitInstance() {&lt;br&gt;
        CMyFrameWnd* pFrame = new CMyFrameWnd;&lt;br&gt;
        m_pMainWnd = pFrame;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    pFrame-&amp;gt;ShowWindow(SW_SHOW);
    pFrame-&amp;gt;UpdateWindow();

    return TRUE;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;CMyApp theApp;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>透明窗体拖动</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 06 Sep 2024 06:06:39 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/tou-ming-chuang-ti-tuo-dong-2emc</link>
      <guid>https://dev.to/__040711563a17902392e7/tou-ming-chuang-ti-tuo-dong-2emc</guid>
      <description>&lt;p&gt;include  // MFC 核心和标准组件&lt;/p&gt;

&lt;h1&gt;
  
  
  include  // Windows API 函数
&lt;/h1&gt;

&lt;p&gt;class CMyFrameWnd : public CFrameWnd {&lt;br&gt;
public:&lt;br&gt;
    CMyFrameWnd() {&lt;br&gt;
        Create(NULL, _T("Transparent Draggable Window"), WS_POPUP, CRect(0, 0, 300, 200));&lt;br&gt;
    }&lt;/p&gt;

&lt;p&gt;protected:&lt;br&gt;
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) override {&lt;br&gt;
        return TRUE; // 不创建子窗口&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;afx_msg void OnPaint() {
    CPaintDC dc(this); // device context for painting
    // 在这里可以进行绘图操作
}

afx_msg LRESULT OnNcHitTest(CPoint point) {
    LRESULT nHitTest = CFrameWnd::OnNcHitTest(point);
    return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}

afx_msg void OnLButtonDown(UINT nFlags, CPoint point) {
    CFrameWnd::OnLButtonDown(nFlags, point);
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}

afx_msg void OnSize(UINT nType, int cx, int cy) {
    CFrameWnd::OnSize(nType, cx, cy);
    Invalidate(); // 使窗口重新绘制
}

DECLARE_MESSAGE_MAP()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)&lt;br&gt;
    ON_WM_PAINT()&lt;br&gt;
    ON_WM_NCHITTEST()&lt;br&gt;
    ON_WM_LBUTTONDOWN()&lt;br&gt;
    ON_WM_SIZE()&lt;br&gt;
END_MESSAGE_MAP()&lt;/p&gt;

&lt;p&gt;class CMyApp : public CWinApp {&lt;br&gt;
public:&lt;br&gt;
    virtual BOOL InitInstance() {&lt;br&gt;
        CMyFrameWnd* pFrame = new CMyFrameWnd;&lt;br&gt;
        m_pMainWnd = pFrame;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    pFrame-&amp;gt;ShowWindow(SW_SHOW);
    pFrame-&amp;gt;UpdateWindow();

    return TRUE;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;CMyApp theApp;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>arm assembled</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 06 Sep 2024 04:18:21 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/arm-assembled-2kjj</link>
      <guid>https://dev.to/__040711563a17902392e7/arm-assembled-2kjj</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.text
.global _start

_start:
    ldr r1, =src      // Load address of source string
    ldr r0, =dst      // Load address of destination buffer
    ldr r3, =len      // Load length of string

move:
    cmp r3, #0        // Compare length to 0
    beq end           // If length is 0, branch to end
    ldrb r2, [r1]     // Load byte from source
    strb r2, [r0]     // Store byte to destination
    adds r1, r1, #1   // Increment source address
    adds r0, r0, #1   // Increment destination address
    subs r3, r3, #1   // Decrement length
    b move            // Branch to move

end:
    // Exit system call
    mov r0, #0        // Return code 0
    mov r7, #1        // System call number for exit (1 in ARM)
    swi 0             // Software interrupt to make system call

.data
src:
    .asciz "hello world"  // Source string
len = .-src               // Calculate length of the source string
dst:
    .space 20             // Reserve space for the destination string

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>get</title>
      <dc:creator>海前 王</dc:creator>
      <pubDate>Fri, 06 Sep 2024 01:41:37 +0000</pubDate>
      <link>https://dev.to/__040711563a17902392e7/get-2ocf</link>
      <guid>https://dev.to/__040711563a17902392e7/get-2ocf</guid>
      <description>&lt;p&gt;/**#include &lt;/p&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;p&gt;int main() {&lt;br&gt;
    std::ifstream file("1.txt");&lt;br&gt;
    char buffer[100];&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (file) {
    // Read a chunk of data into buffer
    file.get(buffer, sizeof(buffer),'1');

    // Output the number of characters actually read
    std::streamsize numChars = file.gcount();
    std::cout &amp;lt;&amp;lt; "Number of characters read: " &amp;lt;&amp;lt; numChars &amp;lt;&amp;lt; std::endl;

    // Null-terminate the string and output it
    buffer[numChars] = '\0';
    std::cout &amp;lt;&amp;lt; "Content read: " &amp;lt;&amp;lt; buffer &amp;lt;&amp;lt; std::endl;
}

return 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;p&gt;int main() {&lt;br&gt;
    // 创建一个包含文本的字符串流&lt;br&gt;
    std::istringstream input("Hello, world! This is a test.");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 创建一个 stringbuf 对象来存储读取的内容
std::stringbuf sb;

// 从 input 流中读取字符，直到遇到字符 '!'
input.get(sb, '!');

// 获取读取的字符串
std::string result = sb.str();

// 输出结果
std::cout &amp;lt;&amp;lt; "Read content: " &amp;lt;&amp;lt; result &amp;lt;&amp;lt; std::endl;

//this cannot change the string 
std::cout&amp;lt;&amp;lt;"\n"&amp;lt;&amp;lt;input.str();

return 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;br&gt;
 */&lt;/p&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;p&gt;int main() {&lt;br&gt;
    char ch;&lt;br&gt;
    while ((ch = std::cin.peek()) != '.' &amp;amp;&amp;amp; ch != '\n') {&lt;br&gt;
        std::cin.get(ch);&lt;br&gt;
        std::cout &amp;lt;&amp;lt; ch; // 打印读取的字符&lt;br&gt;
    }&lt;br&gt;
    return 0;&lt;br&gt;
}&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
