在哪里编码Win32菜单

时间:2018-04-19 04:37:30

标签: c++ visual-studio winapi win32gui resource-files

我是Win32 API的新手,我正在尝试学习我的空闲时间。我进展顺利,但今天我遇到了菜单。我意识到有两种不同的方式(我目前都知道)我可以在Win32中实现一个菜单。我可以在import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); JPanel p = new JPanel(); p.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; JLabel l = new JLabel("First Name"); p.add(l, gbc); JTextField j = new JTextField(12); gbc.gridx++; p.add(j, gbc); gbc.gridx = 0; gbc.gridy++; gbc.gridwidth = GridBagConstraints.REMAINDER; JRadioButton j1 = new JRadioButton("Male"); JRadioButton j2 = new JRadioButton("Female"); ButtonGroup bg = new ButtonGroup(); bg.add(j1); bg.add(j2); JPanel buttons = new JPanel(); buttons.add(j1); buttons.add(j2); p.add(buttons, gbc); gbc.gridy++; gbc.insets = new Insets(100, 0, 0, 0); JButton b = new JButton("Submit"); p.add(b, gbc); JScrollPane jp = new JScrollPane(p); frame.add(jp, BorderLayout.CENTER); //frame.pack(); // This is just to force the point frame.setSize(250, 100); frame.setVisible(true); } }); } } 内的AppendMenu中使用WM_CREATE,或者我可以在WndProc中创建一个菜单,例如:

resource.rc

我的问题是:要么是实施的方法,要么是更好的"比另一个。通过"更好"我的意思是代码比其他代码更加模块化或可扩展?是否有使用它们的好处/缺点?

提前感谢您的贡献!

1 个答案:

答案 0 :(得分:2)

与代码相比,资源文件往往更清晰地说明正在完成的工作,例如,与AppendMenu / InsertMenu调用相比,使用BEGIN ... END块更容易看到布局。

与在代码中执行相同任务相比,使用资源还可以让您更轻松地进行翻译。在这种情况下,您可以创建资源,将字符串翻译为目标语言,而数字标识符在所有版本中都相同。这适用于所有资源类型(对话框,字符串和消息表,甚至图标),而不仅仅是菜单。